1. 程式人生 > >linux之master和minion

linux之master和minion

saltstack部落格地址:

https://www.cnblogs.com/pyyu/p/9465608.html
線上yaml檔案編寫:
http://www.bejson.com/validators/yaml_editor/
saltstack部落格地址:
https://www.cnblogs.com/pyyu/p/9465608.html

 

python的開發領域

django/flask/tornado/sanic/ 後臺開發

django rest framewokr 寫api介面資料

編寫機器人呼叫指令碼 flask+人工智慧 ,有一個是機器人手臂

運維開發領域 cmdb平臺開發 (slatstack/ansible + django提供頁面+mysql)資產管理平臺,運維開發人員,編寫cmdb,提供資料展示
監控平臺二次開發 zabbix二開 nagios二次開發 ,都去了小米,二次開發 open-falcon(golang) 一個監控產品
k8s 二次開發業務開發 python/golang
程式碼釋出平臺 git+django+jenkins

 

 


紅蜘蛛軟體

c/s

client : 學生端是客戶端 ,裝了紅蜘蛛客戶端-學生端

server端: 教師機 ,裝了紅蜘蛛軟體-教師端

教師機,只能管理, 教師機和學生機,相互通訊,相互知道的情況下


#運維管理工具

ansible #支援ssh,不需要客戶端


saltstack #也是隻是ssh,不需要客戶端的
安裝架構是,master /minion


安裝salt的依賴模組
python
zeromq 是一個訊息佇列 ,master和minion通訊,需要將master傳送的命令,放入一個佇列中
rabbitmq
rpc 遠端訊息呼叫
pyzmp
pycrypto
msgpack-python
yaml
-是一個新興的語法格式
salt
ansible
python
k8s
都是遵循yaml語法的配置檔案格式
jinja2
模板語言


#伺服器環境準備
1.master 講師機
ip 192.168.12.96 node1 安裝salt-master

2.準備多個客戶端,被管控端,學生機 安裝salt-minion
192.168.12.89 minion1
192.168.12.121 minion2
192.168.12.8 minion3
sudo hostname set-hostname 新的主機名
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的配置檔案 (vim /etc/salt/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 's14minion[1,2,3]' pkg.version redis

's14minion[1,2,3]' #匹配s14minion1、s14minion2、s14minion3
salt 's14minion[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 's14minion[1,2,3]' pkg.install nginx

salt "*" service.status/start/stop/restart nginx
#通過service模組管理服務


#命令執行結果,返回為yaml
salt --out=yaml "*" service.status nginx


#s14期,有男同學,有女同學

#python的資料結構
#大字典 s14值是字典,字典中有兩個key,一個是男同學key,值是列表,一個是女同學key,值是列表
{
s14:
{
"男同學":['kangchen','xiaoma'],
"女同學":['wengang','xiaoxue','xiaodilei'],
}
}


#yaml語言解析
線上yaml配置檔案編寫
http://www.bejson.com/validators/yaml_editor/

#yaml語法
#yaml的物件,就是python的字典通過冒號指明字典
#yaml的陣列,就是python的列表,通過 橫槓 表示 -
#作用域通過縮排層級關係區分
#空格數量保持一致即可,不要求是幾個,預設是2個空格


s14:
男同學:
- kangchen
- xiaoma
- xiaoyu
女同學:
- wengang
- wengang2
- xiaowengang3

#對應的python資料結構
{ s14:
{ '男同學': [ 'kangchen', 'xiaoma', 'xiaoyu' ],
'女同學': [ 'wengang', 'wengang2', 'xiaowengang3' ] } }

 

#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檔案

 

設定key value的操作 是呼叫 __setitems__
del __del__
__str__
__len__

流暢的python

len(變數)