如何在多臺(tái)服務(wù)器上運(yùn)行相同命令
PSSH
全稱是parallel-ssh,基于Python編寫(xiě)的并發(fā)在多臺(tái)服務(wù)器上批量執(zhí)行命令的工具。包括pssh,pscp,prsync,pnuke和pslurp。該項(xiàng)目包括psshlib,可以在自定義應(yīng)用程序中使用。它相當(dāng)于ansible的簡(jiǎn)化版,執(zhí)行起來(lái)速度比ansible快,支持文件并行復(fù)制,遠(yuǎn)程命令執(zhí)行,殺掉遠(yuǎn)程主機(jī)上的進(jìn)程,殺手锏是文件并行復(fù)制。
主要用法:
pssh命令 在遠(yuǎn)程主機(jī)上執(zhí)行本地命令或者腳本
pscp命令 將本地文件拷貝至多個(gè)遠(yuǎn)端主機(jī)
pslurp命令 從多臺(tái)遠(yuǎn)程機(jī)器拷貝文件到本地
pnuke命令 在遠(yuǎn)端主機(jī)殺進(jìn)程
prsync命令 使用rsync協(xié)議從本地計(jì)算機(jī)同步到遠(yuǎn)程主機(jī)
安裝
yum install epel-release yum install pssh
使用
(1)、定義一個(gè)文件,寫(xiě)入需要操作的機(jī)器,如pssh-hosts
vim pass-hosts
然后寫(xiě)入需要控制的機(jī)器
192.168.96.54:22 192.168.96.60:22 192.168.96.244:22
(2)、pssh執(zhí)行命令
pssh -h pssh-hosts -l root -i "echo "Hello World"" # 因?yàn)橐呀?jīng)是互信環(huán)境,所以不需要輸入密碼
(3)、參數(shù)含義
-h -–hosts 主機(jī)文件列表,內(nèi)容格式[user@]host[:port] -l -–user 登錄使用的用戶名 -p -–par 并發(fā)的線程數(shù)【可選】 -t --timeout 超時(shí)時(shí)間【可選】 -v --verbose 輸出詳細(xì)信息【可選】
僅包含在pslurp里的
-L --localdir 下載文件的保存目錄
(4)、pscp從96.54拷貝文件到其他機(jī)器
pscp.pssh -h pssh-hosts -l root pssh-hosts /tmp # 拷貝pssh-hosts文件到其他機(jī)器的/tmp目錄 # pscp從本地拷貝到遠(yuǎn)程,所以先寫(xiě)本地的某個(gè)文件或目錄,再寫(xiě)遠(yuǎn)程的目錄
(5)、pslurp從其它機(jī)器下載文件到本地
例如,先創(chuàng)建一個(gè)腳本,并將其傳入到每個(gè)機(jī)器上,獲取每個(gè)機(jī)器的hostname并寫(xiě)入到一個(gè)文件,然后將每個(gè)機(jī)器上的該文件下載到本地。
準(zhǔn)備:
在使用pssh執(zhí)行腳本后,將每個(gè)機(jī)器的hostname寫(xiě)入到本地的某個(gè)文件了
最后使用pslurp將其拷貝到本地的某個(gè)目錄
pslurp -h pssh-hosts -L /a /tmp/1.txt 1.txt # 將每個(gè)節(jié)點(diǎn)上的/tmp/1.txt下載到本地的a目錄里 # pslurp從遠(yuǎn)程下載到遠(yuǎn)程,所以先寫(xiě)遠(yuǎn)程的某個(gè)文件或目錄,再寫(xiě)本地的目錄
(6)、pnuke 殺死遠(yuǎn)程主機(jī)上的進(jìn)程
例如殺死每個(gè)機(jī)器的nginx進(jìn)程查看每個(gè)節(jié)點(diǎn)的nginx的狀態(tài)
執(zhí)行命令
查看效果
(7)、prsync跟rsync使用差不多,略過(guò)。
ansible
安裝
先搜索倉(cāng)庫(kù)里的ansible源
然后安裝centos提供的ansible源
然后每個(gè)機(jī)器安裝ansible。(其實(shí)只需在管理主機(jī)上安裝,都安裝只是為了方便換其他機(jī)器后使用)
使用
(1)、安裝完后,在/etc/ansible/目錄下生成三個(gè)主要的文件或目錄
- ansible.cfg: Ansible的配置文件
- hosts:登記被管理的主機(jī)
- roles:角色項(xiàng)目定義目錄,主要用于代碼復(fù)用
(2)、添加節(jié)點(diǎn),在/etc/ansible/hosts文件中添加需要被管理的服務(wù)器節(jié)點(diǎn)
pssh -h pssh-hosts -i "printf '[cluster]\n192.168.96.54\n192.168.96.60\n192.168.96.244\n' > /etc/ansible/hosts" pssh -h pssh-hosts -i "cat /etc/ansible/hosts"
這里將三個(gè)節(jié)點(diǎn)放入cluster組中,后面執(zhí)行命令時(shí)可指定針對(duì)某個(gè)組執(zhí)行。
(3)、建立互信環(huán)境
ssh-keygen -t rsa -b 4096 ssh-copy-id root@192.168.96.54
(4)、測(cè)試連通性
針對(duì)cluster組里的機(jī)器執(zhí)行ping命令
ansible cluster -m ping
若要針對(duì)所有組的機(jī)器執(zhí)行命令,則使用all即可。
ansible all -m ping
(5)、處理[WARNING]: sftp transfer mechanism failed
修改sshd_config
改sshd_config文件,取消注釋Subsystem
修改ansible配置文件,添加scp_if_ssh=True
在執(zhí)行時(shí)已經(jīng)沒(méi)有warning了
(6)、ansible命令構(gòu)成
ansible的命令格式為, ansible 主機(jī)群組名 -m 命令模塊名 -a “批量執(zhí)行的操作”
常用模塊
- ping模塊
- command/shell模塊,兩者區(qū)別是shell支持管道,command不支持管道操作
ansible all -m command -a 'hostname'
ansible all -m shell -a 'hostname | grep 54'
script腳本模塊
ansible all -m script -a '/tmp/test.sh' # 無(wú)需將腳本拷貝到其他節(jié)點(diǎn)
copy模塊,相當(dāng)于scp
ansible all -m copy -a "src=/tmp/test.sh dest=/tmp/" # 將本節(jié)點(diǎn)的該路徑的腳本拷貝到其他機(jī)器的tmp目錄下
- user/group模塊
- git模塊
- file模塊
- service模塊
- yum模塊
- cron模塊
其他模塊不再一一列舉,可通過(guò)ansible-doc 模塊名查看具體用法例如: ansible-doc yum
(7)、playbook
playbook即劇本,由一個(gè)或多個(gè)play組成,play的功能就是為歸為一組的主機(jī)編排要執(zhí)行的一系列task,其中每一個(gè)task就是調(diào)用Ansible的一個(gè)命令模塊。
playbook的核心元素包括:
- hosts:執(zhí)行任務(wù)的主機(jī),可以是主機(jī)組
- tasks:要執(zhí)行的任務(wù)列表
- variables:內(nèi)置變量或自定義的變量
- templates:使用模板語(yǔ)法的文件,通常為配置文件
- handlers:和notify結(jié)合使用,由特定條件觸發(fā),一般用于配置文件變更觸發(fā)服務(wù)重啟
- tags:標(biāo)簽,可在運(yùn)行時(shí)通過(guò)標(biāo)簽指定運(yùn)行playbook中的部分任務(wù)
- roles:定義可重用的任務(wù)和變量集合。
沒(méi)用過(guò)。
參考資料:https://www.cnblogs.com/spec-dog/p/12736447.html
自定義腳本
一個(gè)最簡(jiǎn)單的腳本的方式
#!/bin/bash # 要執(zhí)行的命令 COMMAND="ls -l" # 集群中所有節(jié)點(diǎn)的 IP 地址 NODES=("192.168.1.101" "192.168.1.102" "192.168.1.103") # 在所有節(jié)點(diǎn)上執(zhí)行命令 for NODE in "${NODES[@]}" do echo "Executing command on node $NODE..." ssh $NODE $COMMAND done
到此這篇關(guān)于如何在多臺(tái)服務(wù)器上運(yùn)行相同命令的文章就介紹到這了,更多相關(guān)多臺(tái)服務(wù)器運(yùn)行相同命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- jar包在linux服務(wù)器已經(jīng)運(yùn)行好但是訪問(wèn)不到地址的問(wèn)題及解決方法
- C#控制臺(tái)程序如何發(fā)布到服務(wù)器Linux上運(yùn)行
- 解決服務(wù)器運(yùn)行jupyter notebook方法
- python 服務(wù)器運(yùn)行代碼報(bào)錯(cuò)ModuleNotFoundError的解決辦法
- pycharm 實(shí)現(xiàn)本地寫(xiě)代碼,服務(wù)器運(yùn)行的操作
- selenium+chromedriver在服務(wù)器運(yùn)行的詳細(xì)教程
- Pycharm使用遠(yuǎn)程linux服務(wù)器conda/python環(huán)境在本地運(yùn)行的方法(圖解))
- jmeter 在linux服務(wù)器的安裝和運(yùn)行教程圖解
相關(guān)文章
如何通過(guò)Apache Bench實(shí)現(xiàn)web壓力測(cè)試
這篇文章主要介紹了如何通過(guò)Apache Bench實(shí)現(xiàn)web壓力測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05在Linux下用軟件實(shí)現(xiàn)RAID功能的實(shí)現(xiàn)方法
安裝程式實(shí)現(xiàn)軟件RAID代替硬件RAID的方法,今天再進(jìn)一步談?wù)勈謩?dòng)創(chuàng)建軟RAID和日常維護(hù)的方法。2011-04-04rsync備份海量文件時(shí)占用大量?jī)?nèi)存的解決方法
這篇文章主要介紹了rsync備份海量文件時(shí)占用大量?jī)?nèi)存的解決辦法,需要的朋友可以參考下2016-07-07構(gòu)建及部署jenkins?pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本
這篇文章主要為大家介紹了構(gòu)建及部署jenkins?pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本,喲需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03在Ubuntu下通過(guò)Docker部署Cloudflared Tunnel服務(wù)器
本文詳細(xì)介紹了如何在Ubuntu上通過(guò)Docker部署CloudflaredTunnel服務(wù)器,今天探討如何在Ubuntu上通過(guò)Docker部署Cloudflared Tunnel服務(wù)器,感興趣的朋友一起看看吧2024-12-12詳解aws免費(fèi)服務(wù)器申請(qǐng)及網(wǎng)絡(luò)代理搭建教程
這篇文章主要介紹了aws免費(fèi)服務(wù)器申請(qǐng)及網(wǎng)絡(luò)代理搭建教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12