Saltstack三大功能html
1,遠程執行python
2,配置管理(狀態)mysql
3,雲管理ios
四種運行方式:web
Local 本地正則表達式
Minion/Master C/S sql
Syndic 代理模式數據庫
Salt SSHapache
安裝倉庫vim
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el7.noarch.rpm
安裝master和minion
yum -y install salt-master salt-minion
客戶端安裝minion
不修改master配置文件就能夠先啓動master
systemctl start salt-master
修改minion配置文件
vim /etc/salt/minion
16行填寫master地址
103號配置ID(也能夠不配置默認使用主機名爲ID這裏我沒有配置)
啓動
systemctl start salt-minion
會在/etc/salt文件夾下面生成一個id文件就是主機名(不要隨意修改,由於啓動須要讀取minion_id,若是修改須要先把這個文件刪除而後在啓動的時候又自動生成)
修改兩個個客戶端的配置文件而後啓動(分別爲個人web服務器和ios服務器)
須要通過master認證之後才能使用
minion第一次啓動會生成一個pki目錄
pem是私鑰 pub爲公鑰
master下面也有一個pki文件夾
pre下是客戶端發送的ID可是尚未通過master的認證
能夠查看服務器端文件和客戶端文件的MD5來看是否是同一個文件
經過salt-key能夠查看key
贊成的 拒絕的 沒有贊成的
贊成
salt-key -A 贊成全部
贊成之後
同時在客戶端生成一個公鑰
minion_master.pub
實際上認證過程就是交換公鑰的過程,實現了加密通訊。
遠程執行
salt '*' test.ping
這裏的ping不是發送ping包而是檢測客戶端是否通訊正常
批量執行建立文件夾的命令
salt '*' cmd.run 'mkdir /tmp/hehe'
配置管理
State 要寫一個文件格式 YAML 後綴
YAML:三板斧
1,縮進
兩個空格,不能使用Tab
2,冒號
表示層級關係的冒號後面沒有東西,表示鍵值的有一個空格
key:value
3,短橫線
短橫線後面也有一個空格
- list1
- list2
設置master配置文件
vim /etc/salt/master
去掉這幾行的#
重啓master
systemctl restart salt-master
建立配置文件目錄
mkdir /srv/salt
在建立一個web配置文件目錄
mkdir web
進入這個web目錄建立一個配置文件apache.sls
apache-install: #定義惟一標示 pkg.installed: #pkg是一個狀態模塊,installed是執行方法 - names: - httpd - httpd-devel apache-service: service.running: - name: httpd #運行一個服務,服務名是httpd - enable: True #開機自啓動
執行
salt '10-8-86-172' state.sls web.apache
在對應的客戶端目錄/var/cache/salt生成對應的文件,是master發送給minnon的
若是客戶端是centos就使用yum安裝若是是Ubuntu就使用apt-get自動安裝
執行完畢會在相應客戶端自動安裝apache而且啓動
PS:後面加test = True能夠先測試可是不執行
注意編輯時候的空格,每一行的末尾也不能有空格和Tab
上面是手動執行一個模塊
slat有一個高級狀態
打開master配置文件(須要放在base下面)
vim /srv/salt/top.sls
base: '10-8-45-27': - web.apache '10-8-86-172': - web.apache
執行
salt '*' state.highstate
Saltstack與ZeroMQ
Saltstack使用4505 4506兩個端口4505用於消息的發佈
4506請求與響應
ZeroMQ不是一個傳統意義的消息隊列
默認salt-master進程顯示都是salt-master
安裝顯示進程的詳細信息的包
yum -y install python-setproctitle
systemctl restart salt-master
ps -ef|grep salt-master
經過進程已經創建好長鏈接了,因此執行速度快
SaltStack 數據系統
Grains (穀粒)
Pillar (柱子)
Grains:靜態數據 當Minion啓動時收集的Minion本地相關信息
操做系統版本,內核版本,CPU,內存,硬盤,設備型號,序列號
不重啓就不會變,因此叫靜態數據
1,資產管理,信息查詢
2,用於目標選擇
3,配置管理中使用
查看其中一條服務器的grains信息
salt '10-8-45-27' grains.ls
salt '10-8-45-27' grains.items
查看全部機器的操做系統
salt '*' grains.item os
查看ip
salt '*' grains.item fqdn_ip4
查找出操做系統是CentOS的執行相應的命令,這樣就能夠作目標選擇
salt -G 'os:CentOs' test.ping
salt -G 'os:CentOs' cmd.run 'echo hehe'
若是列出的grains不夠用也能夠自定義grains
能夠修改客戶端的的vim /etc/salt/minion自定義grains
先不重啓,查看是沒有的
重啓之後再查找
重啓定義爲apache的apache
salt -G 'roles:apache' cmd.run 'systemcet restart httpd'
生產環境不建議寫在minion直接寫在
vim /etc/salt/grains
cloud: openstack
minion會自動找
grain在top裏面的用法
PS:這裏grain沒有s
開發一個Grains 在master下
Python。寫一個Python腳本,返回一個字典就能夠了
#!/usr/bin/env python #_*_ coding: utf-8 _*_ def my_grains(): #初始化一個grains字典 grains = {} #設置字典中的key grains['iaas'] = 'openstack' grains['edu'] = 'oldboyedu' #返回這個字典 return grains
同步到minion
salt '*' saltutil.sync_grains
在minion的/var/cache/salt
在master下面查看
Grains優先級:
1,系統自帶
2,Grains文件寫的
3,minion配置文件
4,本身寫的
PS:能夠不重啓salt-minion刷新更新grains命令是,salt '*' saltutil.sync_grains
Pillar:
Pillar是動態的。給特定的Minion指定特定的數據。只有指定的minion本身能看到本身的數據(安全,好比定義用 戶密碼)
和top file相似
顯示
salt '*' pillar.items
默認沒有顯示
設置成顯示
vim /etc/salt/master
systemctl restart salt-master
能夠查看了 是一個名稱爲master的字典
仍是註釋掉以避免影響自定義的pillar
修改master配置
重啓
systemctl restart salt-master
1,寫pillar sls
vim /srv/pillar/web/apache.sls
{% if grains['os'] == 'CentOS' %} apache: httpd {% elif grains['os'] == 'Debian' %} apache: apache2 {% endif %}
2,top file
vim /srv/pillar/top.sls
base: '10-8-86-172': - web.apache
刷新
salt '*' saltutil.refresh_pillar
查看
salt '*' pillar.items apache
PS:注意文件apache.sls和top.sls的位置
pillar使用場景
1,目標選擇
salt -I 'apache:httpd' test.ping
salt -I 'apache:httpd' cmd.run 'w'
Grains VS Pillar
類型 數據採集方式 應用場景 定義位置
Grains 靜態 minion啓動時收集 數據查詢 目標選擇 配置管理 minion
Pillar 動態 master自定義 目標選擇 配置選擇 敏感數據 master
深刻學習saltstack遠程執行
salt '*' cmd.run 'w'
命令:salt
目標:'*'
模塊: cmd.run 自帶150+模塊。本身寫模塊
返回: 執行後結果返回,Returnners
目標:Targeting
兩種:一種和minion ID有關
一種和minion ID無關
1,Minion ID有關的方法
minion ID
通配符
列表
salt -L '10-8-86-172,10-8-45-27' cmd.run 'uptime'
正則表達式
salt -E '10-8*' test.ping
全部匹配目標的方式,均可以用到top file裏面來指定目標
主機名設置方案:
1,IP地址
2,根據業務來進行設置
按百分比執行
salt '*' -b 10 test.ping
模塊:
返回tcp連接
salt '*' network.active_tcp
獲取主機名
salt '*' network.get_hostname
取得全部在運行的服務
salt '*' service.get_all
取得對應服務的狀態
salt '*' service.status sshd
往全部機器上面拷貝文件
salt-cp '*' /etc/hosts /opt/hehe
查看top file
salt '*' state.show_top
單獨安裝一個服務
salt '*' state.single pkg.installed name=lsof
返回程序
ruturns
數據返回到muysql這個返回是minion直接返回給mysql的不是返回給master而後到mysql的
salt.returners.mysql
客戶端安裝MySQL-python (python的MySQL庫)
salt '10-8-86-172' state.single pkg.installed name=MySQL-python
或者使用下面命令安裝
salt '10-8-86-172' cmd.run 'yum -y install MySQL-python'
master建立數據庫
create database `salt` character set utf8 collate utf8_general_ci;
建立表
DROP TABLE IF EXISTS `jids`; CREATE TABLE `jids` ( `jid` varchar(255) NOT NULL, `load` mediumtext NOT NULL, UNIQUE KEY `jid` (`jid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE INDEX jid ON jids(jid) USING BTREE;
DROP TABLE IF EXISTS `salt_returns`; CREATE TABLE `salt_returns` ( `fun` varchar(50) NOT NULL, `jid` varchar(255) NOT NULL, `return` mediumtext NOT NULL, `id` varchar(255) NOT NULL, `success` varchar(10) NOT NULL, `full_ret` mediumtext NOT NULL, `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, KEY `id` (`id`), KEY `jid` (`jid`), KEY `fun` (`fun`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `salt_events`; CREATE TABLE `salt_events` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `tag` varchar(255) NOT NULL, `data` mediumtext NOT NULL, `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `master_id` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `tag` (`tag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
受權
grant all on salt.* to salt@'%' identified by 'salt@pwd';
修改兩個minion的配置文件vim /etc/salt/minion
在尾部添加
mysql.host: '10.8.45.27'
mysql.user: 'salt'
mysql.pass: 'salt@pwd'
mysql.db: 'salt'
mysql.port: 3306
重啓minion
systemctl restart salt-minion
在minion看着日誌執行
先查看一下master的數據庫是空的
執行 '*' test.ping --return mysql 再來查看數據庫就有數據了
PS:返回程序是比較深刻的,或者基於saltstack作二次開發時候使用
參考文檔
https://www.unixhot.com/docs/saltstack/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql
編寫狀態模塊
先看一個系統自帶模塊
vim /usr/lib/python2.7/site-packages/salt/modules/service.py
編寫模塊
1,放哪裏
在/srv/salt目錄下新建一個文件夾_modules
2,命名
vim _modules/my_disk.py
def list(): cmd = 'df -h' ret = __salt__['cmd.run'](cmd) return ret
PS:是兩個下劃線
3,刷新
salt '*' saltutil.sync_modules
4,執行
salt '*' my_disk.list