目錄
- PSSH
- 安裝
- 使用
- (1)、定義一個文件,寫入需要操作的機器,如pssh-hosts
- (2)、pssh執(zhí)行命令
- (3)、參數(shù)含義
- (4)、pscp從96.54拷貝文件到其他機器
- (5)、pslurp從其它機器下載文件到本地
- (6)、pnuke 殺死遠程主機上的進程
- (7)、prsync跟rsync使用差不多,略過。
- ansible
- 安裝
- 使用
- (1)、安裝完后,在/etc/ansible/目錄下生成三個主要的文件或目錄
- (2)、添加節(jié)點,在/etc/ansible/hosts文件中添加需要被管理的服務(wù)器節(jié)點
- (3)、建立互信環(huán)境
- (4)、測試連通性
- (5)、處理[WARNING]: sftp transfer mechanism failed
- (6)、ansible命令構(gòu)成
- (7)、playbook
PSSH
全稱是parallel-ssh,基于Python編寫的并發(fā)在多臺服務(wù)器上批量執(zhí)行命令的工具。包括pssh,pscp,prsync,pnuke和pslurp。該項目包括psshlib,可以在自定義應(yīng)用程序中使用。它相當于ansible的簡化版,執(zhí)行起來速度比ansible快,支持文件并行復制,遠程命令執(zhí)行,殺掉遠程主機上的進程,殺手锏是文件并行復制。
主要用法:
pssh命令 在遠程主機上執(zhí)行本地命令或者腳本
pscp命令 將本地文件拷貝至多個遠端主機
pslurp命令 從多臺遠程機器拷貝文件到本地
pnuke命令 在遠端主機殺進程
prsync命令 使用rsync協(xié)議從本地計算機同步到遠程主機
安裝
yum install epel-release yum install pssh
使用
(1)、定義一個文件,寫入需要操作的機器,如pssh-hosts
vim pass-hosts
然后寫入需要控制的機器
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"" # 因為已經(jīng)是互信環(huán)境,所以不需要輸入密碼
(3)、參數(shù)含義
-h -–hosts 主機文件列表,內(nèi)容格式[user@]host[:port] -l -–user 登錄使用的用戶名 -p -–par 并發(fā)的線程數(shù)【可選】 -t --timeout 超時時間【可選】 -v --verbose 輸出詳細信息【可選】
僅包含在pslurp里的
-L --localdir 下載文件的保存目錄
(4)、pscp從96.54拷貝文件到其他機器
pscp.pssh -h pssh-hosts -l root pssh-hosts /tmp # 拷貝pssh-hosts文件到其他機器的/tmp目錄 # pscp從本地拷貝到遠程,所以先寫本地的某個文件或目錄,再寫遠程的目錄
(5)、pslurp從其它機器下載文件到本地
例如,先創(chuàng)建一個腳本,并將其傳入到每個機器上,獲取每個機器的hostname并寫入到一個文件,然后將每個機器上的該文件下載到本地。
準備:
在使用pssh執(zhí)行腳本后,將每個機器的hostname寫入到本地的某個文件了
最后使用pslurp將其拷貝到本地的某個目錄
pslurp -h pssh-hosts -L /a /tmp/1.txt 1.txt # 將每個節(jié)點上的/tmp/1.txt下載到本地的a目錄里 # pslurp從遠程下載到遠程,所以先寫遠程的某個文件或目錄,再寫本地的目錄
(6)、pnuke 殺死遠程主機上的進程
例如殺死每個機器的nginx進程查看每個節(jié)點的nginx的狀態(tài)
執(zhí)行命令
查看效果
(7)、prsync跟rsync使用差不多,略過。
ansible
安裝
先搜索倉庫里的ansible源
然后安裝centos提供的ansible源
然后每個機器安裝ansible。(其實只需在管理主機上安裝,都安裝只是為了方便換其他機器后使用)
使用
(1)、安裝完后,在/etc/ansible/目錄下生成三個主要的文件或目錄
- ansible.cfg: Ansible的配置文件
- hosts:登記被管理的主機
- roles:角色項目定義目錄,主要用于代碼復用
(2)、添加節(jié)點,在/etc/ansible/hosts文件中添加需要被管理的服務(wù)器節(jié)點
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"
這里將三個節(jié)點放入cluster組中,后面執(zhí)行命令時可指定針對某個組執(zhí)行。
(3)、建立互信環(huán)境
ssh-keygen -t rsa -b 4096 ssh-copy-id root@192.168.96.54
(4)、測試連通性
針對cluster組里的機器執(zhí)行ping命令
ansible cluster -m ping
若要針對所有組的機器執(zhí)行命令,則使用all即可。
ansible all -m ping
(5)、處理[WARNING]: sftp transfer mechanism failed
修改sshd_config
改sshd_config文件,取消注釋Subsystem
修改ansible配置文件,添加scp_if_ssh=True
在執(zhí)行時已經(jīng)沒有warning了
(6)、ansible命令構(gòu)成
ansible的命令格式為, ansible 主機群組名 -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' # 無需將腳本拷貝到其他節(jié)點
copy模塊,相當于scp
ansible all -m copy -a "src=/tmp/test.sh dest=/tmp/" # 將本節(jié)點的該路徑的腳本拷貝到其他機器的tmp目錄下
- user/group模塊
- git模塊
- file模塊
- service模塊
- yum模塊
- cron模塊
其他模塊不再一一列舉,可通過ansible-doc 模塊名查看具體用法例如: ansible-doc yum
(7)、playbook
playbook即劇本,由一個或多個play組成,play的功能就是為歸為一組的主機編排要執(zhí)行的一系列task,其中每一個task就是調(diào)用Ansible的一個命令模塊。
playbook的核心元素包括:
- hosts:執(zhí)行任務(wù)的主機,可以是主機組
- tasks:要執(zhí)行的任務(wù)列表
- variables:內(nèi)置變量或自定義的變量
- templates:使用模板語法的文件,通常為配置文件
- handlers:和notify結(jié)合使用,由特定條件觸發(fā),一般用于配置文件變更觸發(fā)服務(wù)重啟
- tags:標簽,可在運行時通過標簽指定運行playbook中的部分任務(wù)
- roles:定義可重用的任務(wù)和變量集合。
沒用過。
參考資料:https://www.cnblogs.com/spec-dog/p/12736447.html
自定義腳本
一個最簡單的腳本的方式
#!/bin/bash # 要執(zhí)行的命令 COMMAND="ls -l" # 集群中所有節(jié)點的 IP 地址 NODES=("192.168.1.101" "192.168.1.102" "192.168.1.103") # 在所有節(jié)點上執(zhí)行命令 for NODE in "${NODES[@]}" do echo "Executing command on node $NODE..." ssh $NODE $COMMAND done