#運維管理工具node
ansible #支持ssh,不須要客戶端python
saltstack #也是隻是ssh,不須要客戶端的
安裝架構是,master /minion
安裝salt的依賴模塊
python
zeromq 是一個消息隊列 ,master和minion通訊,須要將master發送的命令,放入一個隊列中
rabbitmq
rpc 遠程消息調用
pyzmp
pycrypto
msgpack-python
yamllinux
jinja2
yaml-是一個新興的語法格式
salt
ansible
python
k8s
都是遵循yaml語法的配置文件格式
jinja2
模板語言
-----------------------------------------------------------------------------------------------------nginx
#服務器環境準備
1.master node1redis
ip 192.168.12.96 node1 安裝salt-masterjson
2.準備多個客戶端,被管控端,學生機 安裝salt-minion 數組
192.168.12.89 minion1
192.168.12.121 minion2
192.168.12.8 minion3緩存
3.關閉全部節點的防火牆,以避免影響實驗服務器
iptables -F 數據結構
systemctl stop firewalld
關閉selinux
4.配置本地文件解析,用於加速身份驗證 編輯 /etc/hosts
經過主機名通訊
192.168.12.96 node1
192.168.12.89 minion1
192.168.12.121 minion2
192.168.12.8 minion3
5.確保環境準備ok,確保每一個節點的yum源配置正確
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空緩存
yum makecache #生成yum緩存
6.安裝salt軟件
1.node1端安裝salt-master
yum install salt-master -y
2.在3個minion地址中安裝salt-minion
yum install salt-minion -y
7.修改master和minion的配置文件
1.master的配置文件
interface: 0.0.0.0 #綁定到本地的0.0.0.0地址
publish_port: 4505 #管理端口,命令發送
user: root #運行salt進程的用戶
worker_threads: 5 #salt運行線程數,線程越多處理速度越快,不要超過cpu個數
ret_port: 4506 #執行結果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master #日誌文件地址
#自動接收minion的key
auto_accept: False
2.三個minion的配置文件
master: node1
master_port: 4506
user: root
id: s14minion1 #表示minion身份信息的,這裏要修改,三個節點,爲不一樣的id
acceptance_wait_time: 10
log_file: /var/log/salt/minion
8.啓動salt-master和salt-minion
systemctl start salt-master
systemctl start salt-minion
9.在salt軟件啓動的時候,會進行通訊鏈接,master能夠檢測到minion的身份地址,此時還未接收key,還未通訊,須要認證祕鑰才能夠通訊
salt-key -L #查看全部主機祕鑰信息
#salt-key參數解析
-L #查看KEY狀態
-A #容許全部
-D #刪除全部
-a #認證指定的key
-d #刪除指定的key
-r #註銷掉指定key(該狀態爲未被認證)
#在祕鑰通訊以前,最好進行祕鑰檢驗
master端:
salt-key -f 指明節點id #查看節點的祕鑰信息
minion端:
salt-call --local key.finger #查看本身的祕鑰信息,與master端的進行對比
salt-key -a minion-id #指明接收一個minion
salt-key -A # 接收全部minion的祕鑰
salt "*" test.ping #經過salt主命令 匹配全部的已接收的主機 發送ping命令,會獲得True 或false
salt "*" cmd.run #經過執行命令接口,對全部主機,執行命令
salt "*" cmd.run "yum install nginx -y #對全部主機發送安裝nginx的命令
10.salt經常使用命令
1.salt的命令直接輸入,叫作執行模塊
2.saltstack提供了本身的腳本語言 s14salt.sls ,狀態模塊
3.salt的命令語法格式
salt --summary '*' cmd.run 'yum remove nginx -y'
--summary是返回salt命令的執行成功狀態
"*" 目標匹配字符串
cmd.run 模塊函數,對全部匹配到的機器,執行後面的參數
'yum remove nginx -y' #參數以下
salt --out=json '*' cmd.run_all 'hostname'
--out=json #返回salt執行結果爲json格式 #json數據反饋給API
salt "*" cmd.run "ls /tmp"
salt "*" cmd.run_all "ls /tmp"
#cmd.run和cdm.run_all是返回結果的詳細的差異
#目標定位字符串
salt 'minion[1,2,3]' pkg.version redis
'minion[1,2,3]' #匹配minion一、minion二、minion3
salt 'minion[1,2,3]' pkg.download redis#只下載redis的rpm包,不安裝這是pkg.download函數的功能
pkg模塊對應着yum工具
pkg.install
pkg.version
pkg.remove
pkg.version
#列出pkg全部的方法
salt '*' sys.list_functions pkg
#service模塊,練習遠程安裝啓動nginx
salt 'minion[1,2,3]' pkg.install nginx
salt "*" service.status/start/stop/restart nginx
#經過service模塊管理服務
#命令執行結果,返回爲yaml
salt --out=yaml "*" service.status nginx
#python班,有男同窗,有女同窗
#python的數據結構
#大字典 python值是字典,字典中有兩個key,一個是男同窗key,值是列表,一個是女同窗key,值是列表
{
python:
{
"男同窗":['py1','py2'],
"女同窗":['pp1','pp2','pp3'],
}
}
#yaml語言解析
在線yaml配置文件編寫
http://www.bejson.com/validators/yaml_editor/
#yaml語法
#yaml的對象,就是python的字典經過冒號指明字典
#yaml的數組,就是python的列表,經過 橫槓 表示 -
#做用域經過縮進層級關係區分
#空格數量保持一致便可,不要求是幾個,默認是2個空格
#salt直接在命令行輸入的命令,叫作
在命令行輸入的命令都是 執行模塊
等到命令寫入到文件中, 就叫作狀態模塊
#state模塊能夠執行salt的sls文件
#sls之salt腳本的編寫與使用
1.更改配置文件,添加以下參數,注意yaml的語法(修改了文件要重啓salt服務)
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
test:
- /srv/salt/test/
2.重啓全部的salt服務
systemctl restart salt-master
systemctl restart salt-mion
#注意重啓了服務,祕鑰須要再次接受
3.編寫nginx.sls文件,放在/srv/salt/base底下,(注意,nginx.sls文件,須要在全部機器上都有)
salt-cp "*" /srv/salt/base/nginx.sls /srv/salt/base/ #將master機器上的nginx.sls,批量分發到全部節點上
4.調用state模塊,執行nginx.sls文件
salt "*" state.sls nginx #執行命令
#saltstack兩大數據管理中心 grains(靜態採集數據) 與pillar(動態採集數據)
#
salt "*" grains.items #採集全部minion機器的硬件信息,返回字典數據,key和value
salt "*" grains.item osfullname #經過item方法,經過key,返回單獨的value
salt "*" grains.item ipv4
salt "*" grains.item ipv4 os hostname #支持多key的方式查看信息
#經過-G參數,指明是grains模塊,匹配到全部的 操做系統是7系列的機器,而後執行命令
salt -G 'osrelease:7*' cmd.run "echo 'i am from master....' > /tmp/salt.txt"
#自定義設置granis數據
salt "*" grains.setval my_class s14
#刪除自定義grains的值
salt "*" grains.delval my_class
#若是想永久刪除這個key,須要刪除minion底下的/etc/salt/grains文件