目錄
一、salt master-minion模式部署
特性:
遠程執行、配置管理、雲管理、事件驅動
master---node1---192.168.56.11
master---node2---192.168.56.12
#master和minion下載
[root@linux-node1 ~]# yum install -y epel-release salt-master salt-minion
[root@linux-node1 ~]# systemctl start salt-master
[root@linux-node2 ~]# yum install -y epel-release salt-minion
#配置master管理minion
[root@linux-node1-2 ~]# vi /etc/salt/minion
#master: salt 修改 master: 192.168.56.11
[root@linux-node1-2 ~]# systemctl start salt-minion
#master通過id識別minion,默認主機名,可通過minion中id選項配置
[root@linux-node2 salt]# cat /etc/salt/minion_id
linux-node2.example.com
#minion啓動後會以id形式發送管理請求到master
[root@linux-node1 salt]# tree /etc/salt/pki/master/minions_pre/
/etc/salt/pki/master/minions_pre/
├── linux-node1.example.com
└── linux-node2.example.com
#master同意請求
[root@linux-node1 salt]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
linux-node1.example.com
linux-node2.example.com
Proceed? [n/Y] Y
Key for minion linux-node1.example.com accepted.
Key for minion linux-node2.example.com accepted.
#master查看節點
[root@linux-node1 salt]# salt "*" test.ping
linux-node2.example.com:
True
linux-node1.example.com:
True
#通信原理
#Salt使用發佈-訂閱模式與受管系統進行通信。連接由Salt Minion發起,這意味着受控端不需要監聽端口。Salt Master使用的端口爲4505 和4506,必須打開它們才能接受傳入連接。
4505:所有Salt Minion建立與發佈者端口的持久連接,並監聽消息。命令通過此端口異步發送到所有連接,這使命令可以同時在大量系統上執行。
4506:Salt Minion根據需要,連接到服務器,將結果發送到Salt Master,並安全地請求文件和minion 特定的數據值(salt pillar)。
[root@linux-node1 salt]# lsof -n -i:4505
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 19120 root 13u IPv4 52032 0t0 TCP *:4505 (LISTEN)
salt-mast 19120 root 15u IPv4 55867 0t0 TCP 192.168.56.11:4505->192.168.56.11:41386 (ESTABLISHED)
salt-mast 19120 root 16u IPv4 55878 0t0 TCP 192.168.56.11:4505->192.168.56.12:38952 (ESTABLISHED)
二、salt salt-ssh模式部署
傳統salt基礎設施中,由minions主動鏈接master,master並不會存儲minion的網絡和主機配置。而基於ssh鏈接時,這個規則就需要改變,因爲master必須通過ssh去鏈接他的minion。salt-ssh可以獨立運行的,不需要minion端。salt-ssh可以代替expect之類的密碼推送腳本,看起來功能不比expect差 。 salt-ssh 用的是sshpass進行密碼交互的。
但是:
1、salt-ssh是串行的,效率低於master-minion模式
2、要求服務器支持ssh服務
#安裝配置管理
[root@linux-node1 base]# yum install -y salt-ssh
[root@linux-node1 base]# cat /etc/salt/roster
linux-node1:
host: 192.168.56.11
user: root
passwd: 123456
linux-node2:
host: 192.168.56.12
user: root
passwd: 123456
#使用ssh遠程執行
#加- i自動認證,不加的話參考一下
[root@linux-node1 base]# salt-ssh '*' -r 'uptime' -i
[root@linux-node1 base]# salt-ssh '*' -r 'uptime'
linux-node1.example:
----------
retcode:
254
stderr:
stdout:
The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
The authenticity of host '192.168.56.11 (192.168.56.11)' can't be established.
ECDSA key fingerprint is SHA256:Zpw1uMG0zaEdDsyD2O9nj3mYjTwTrgzQ8uh50cN2Oqs.
ECDSA key fingerprint is MD5:76:9d:4e:60:7b:38:cf:ef:f9:df:a3:0b:8b:17:ae:e7.
Are you sure you want to continue connecting (yes/no)?
#此時ssh有驗證訪問機制,臨時關閉解決
[root@linux-node1 base]# vim /etc/ssh/ssh_config
StrictHostKeyChecking ask修改爲no
[root@linux-node1 base]# systemctl restart sshd
特別注意:
salt-ssh第一次執行是根據roster文件裏配置的賬號密碼推送密碼,來實現自動交互的。
執行完了後會在目標服務器裏面,追加master端(即源機器)的key。
然後就可以刪除roster裏面的passwd密碼條目並且改回ssh規則了,不影響後批量操作的執行。
三、salt配置管理
#master目錄規劃
創建配置文件讀取目錄,可分開發、測試、項目等環境配置(base爲默認目錄)
[root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev.test.prod}
[root@linux-node1 ~]# vim /etc/salt/master
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
test:
- /srv/salt/test
prod:
- /srv/salt/prod
[root@linux-node1 ~]# systemctl restart salt-master
#先搞個apache服務sls腳本
[root@linux-node1 ~]# vim /srv/salt/base/web/apache.sls
apache:
pkg.installed:
- name: httpd
service.running:
- name: httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
解釋說明:
apache:id聲明,在所有環境(base、prod)下全局唯一
pkg:狀態模塊
.:引用關係
installed:模塊中的方法
::代表層級關係
name:可以理解爲參數,後面跟的是參數值
file.managed:文件管理模塊,必須要有source指定文件的來源路徑
name :節點需要管理的文件目錄(minion目錄)
source:要載入到節點的源文件,salt://代表着環境的根路徑,這的根路徑爲:/srv/salt/base/(master目錄)
user、group、mode:分別指定文件的所屬者,所屬組和權限
以上的文件還可以使用分id的寫法:
apache-install:
pkg.installed:
- name: httpd
apache-service:
service.running:
- name: httpd
apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
#執行sls
#建議先yum update否則時間較長
[root@linux-node1 base]# salt 'linux-node2*' state.sls web.apache
四、salt高級狀態
#上述每個腳本都要執行一遍太繁瑣,可以通過指定計劃腳本執行
#高級狀態即統一規定哪些節點做什麼操作,避免繁瑣執行,統一規劃
#開啓高級狀態
[root@linux-node1 web]# vi /etc/salt/master
開放 state_top: top.sls
#編寫計劃腳本
[root@linux-node1 base]# cat /srv/salt/base/top.sls
base:
'linux-node1-example.com':
- web.apache
'linux-node2-example.com':
- web.apache
#先測試沒問題再執行
#在不想影響當前主機的運行情況,可以使用test=True 進行預測試
#通常我們所有高級狀態或者sls腳本都要提前測試無誤纔可以
[root@linux-node1 base]# salt '*' state.highstate test=True
#執行高級狀態模塊
#執行highstate後,系統默認搜索base目錄下之前配置的top.sls
[root@linux-node1 base]# salt '*' state.highstate