SALTSTACK自動化運維管理------(SALTSTACK的簡介和基本原理、saltstack的安裝與配置、saltstack的遠程執行)

SALTSTACK自動化運維管理-------(SALTSTACK的簡介和基本原理、saltstack的安裝與配置、saltstack的遠程執行)

1.SALTSTACK的簡介

saltstack是一個服務器基礎構架集中化管理平臺具備配置管理,遠程執行,監控等功能,基於python實現,結合輕量級消息隊列(ZeroMQ)與python第三方模塊(Pyzmq,PyCrypto,PyYAML等)構建。
通過部署saltstack,我們可以在成千上萬臺服務器上做到批量執行命令,根據不同業務進行配置集中化管理,分發文件,採集服務器數據,操作系統基礎及軟件包管理等,它是運維人員提高工作效率,規範業務配置與操作的利器。

2.salt的基本原理

在這裏插入圖片描述

  1. SaltStack 採用 C/S模式,server端就是salt的master,client端就是minion,minion與master之間通過ZeroMQ消息隊列通信。
  2. minion上線後先與master端聯繫,把自己的pub key發過去,這時master端通過salt-key -L命令就會看到minion的key,接受該minion-key後,也就是master與minion已經互信。
  3. master可以發送任何指令讓minion執行了,salt有很多可執行模塊,比如說cmd模塊,在安裝minion的時候已經自帶了,它們通常位於你的python庫中,locate salt | grep /usr/ 可以看到salt自帶的所有東西。
  4. 這些模塊是python寫成的文件,裏面會有好多函數,如cmd.run,當我們執行salt ‘*’ cmd.run 'uptime’的時候,master下發任務匹配到的minion上去,minion執行模塊函數,並返回結果。master監聽4505和4506端口,4505對應的是ZMQ的PUB system,用來發送消息,4506對應的是REP system是來接受消息的。
    在這裏插入圖片描述

具體步驟如下:

  1. Salt stack的Master與Minion之間通過ZeroMq進行消息傳遞,使用了ZeroMq的發佈-訂閱模式,連接方式包括tcp,ipc
  2. salt命令,將cmd.run ls命令從salt.client.LocalClient.cmd_cli發佈到master,獲取一個Jodid,根據jobid獲取命令執行結果。
  3. master接收到命令後,將要執行的命令發送給客戶端minion。
  4. minion從消息總線上接收到要處理的命令,交給minion._handle_aes處理
  5. minion._handle_aes發起一個本地線程調用cmdmod執行ls命令。線程執行完ls後,調用minion._return_pub方法,將執行結果通過消息總線返回給master
  6. master接收到客戶端返回的結果,調用master._handle_aes方法,將結果寫的文件中
  7. salt.client.LocalClient.cmd_cli通過輪詢獲取Job執行結果,將結果輸出到終端。

3.saltstack的安裝與配置

實驗環境:server3和server4,server3充當master端,server4充當minion端
1.安裝初始化軟件包
網址:https://developer.aliyun.com/mirror/

在這裏插入圖片描述
根據指示進行配置官方的YUM倉庫:

第一步:安裝初始化軟件包

在server3和server4中配置YUM源:
yum install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

在這裏插入圖片描述

第二步:文件中的訪問地址需要替換成鏡像站的路徑

sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo

在這裏插入圖片描述
配置完成後,發現可以列出,證明我們的配置沒有問題。
在這裏插入圖片描述
第三步:master端的設置(這裏我們用server3來充當master端):

在server3中:
yum install -y salt-master     #安裝master端
systemctl start salt-master    #啓動master服務
systemctl enable salt-master   #設置master開機自啓動


在server4中:
yum install -y salt-minion
vim /etc/salt/minion
16行修改爲: master: 192.168.43.73
systemctl start salt-minion
systemctl enable salt-minion

在這裏插入圖片描述
注意:不是minion端想連接master端就可以連接的,是要經過master端的允許的。

第四步:master端允許minion端連接

salt-key -L
salt-key -A

在這裏插入圖片描述
在這裏插入圖片描述
測試master端與minion端的連接:

salt '*' test.ping          salt server4 test.ping 
salt server4 cmd.run df     salt '*' cmd.run df
salt server4 cmd.run 'touch /mnt/file1'
salt server4 cmd.run 'ls /mnt/file1'

在這裏插入圖片描述

在這裏插入圖片描述

4.saltstack的遠程執行

  1. 遠程執行shell命令
salt命令由三個主要部分構成:
salt  'target'   function   arguments
target:指定哪些minion,默認的規則是使用glob匹配minion id  如:salt '*' test.ping
也可以使用正則表達式:   salt -E 'server[4-6]' test.ping
也可以指定列表:  salt -L 'server4,server5' test.ping

在這裏插入圖片描述

function是module提供的功能,salt內置了大量有效的function

在這裏插入圖片描述

arguments通過空格來界定參數:
salt '*' sys.doc pkg     #查看模塊文檔

salt server4  pkg.install httpd
salt server4  pkg.remove  httpd

在這裏插入圖片描述

在這裏插入圖片描述

另外:salt內置的執行模板列表 https://docs.saltstack.cn/ref/modules/all/index.html

在這裏插入圖片描述

  1. 編寫遠程執行模塊
編寫master配置文件 :
vim /etc/salt/master
    file_roots:
    base:
    	-/srv/salt
編輯完重啓服務

當然了,我們在這裏使用默認的就行


在這裏插入圖片描述

創建模塊目錄:
mkdir /srv/salt/_modules

編寫模塊文件:
vim  /srv/salt/_modules/mydisk.py
	def df():
    return __salt__['cmd.run']('df -h')

同步模塊:
salt server4 saltutil.sync_modules

測試效果:server3中
[root@server3 _modules]# salt server4 saltutil.sync_modules
server4:
    - modules.mydisk
[root@server3 _modules]# salt server4 mydisk.df         #運行模塊
server4:
    Filesystem             Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root   17G  1.3G   16G   8% /
    devtmpfs               898M     0  898M   0% /dev
    tmpfs                  910M  100K  910M   1% /dev/shm
    tmpfs                  910M  9.5M  901M   2% /run
    tmpfs                  910M     0  910M   0% /sys/fs/cgroup
    /dev/nvme0n1p1        1014M  146M  869M  15% /boot
    tmpfs                  182M     0  182M   0% /run/user/0
    /dev/sr0               4.2G  4.2G     0 100% /xuruntian

server4中:
[root@server4 salt]# pwd
/var/cache/salt
[root@server4 salt]# tree .
.
└── minion
    ├── extmods
    │   └── modules
    │       └── mydisk.py
    ├── files
    │   └── base
    │       └── _modules
    │           └── mydisk.py
    ├── module_refresh
    └── proc

7 directories, 3 files

在這裏插入圖片描述
在這裏插入圖片描述

  1. 配置管理
創建一個sls文件:
[root@server3 salt]# pwd
/srv/salt
[root@server3 salt]# vim apache.sls
[root@server3 salt]# cat apache.sls 
httpd:
  pkg.installed
[root@server3 salt]# salt server4 state.sls apache      #指定主機執行
server4:
----------
          ID: httpd
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: httpd
     Started: 07:31:28.077723
    Duration: 5643.012 ms
     Changes:   
              ----------
              httpd:
                  ----------
                  new:
                      2.4.6-88.el7
                  old:

Summary for server4
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   5.643 s

[root@server4 salt]# tree .
.
└── minion
    ├── extmods
    │   └── modules
    │       ├── mydisk.py
    │       └── mydisk.pyc
    ├── files
    │   └── base
    │       ├── apache.sls        #server4中出現apache.sls文件
    │       └── _modules
    │           └── mydisk.py
    ├── module_refresh
    └── proc
        └── 20200606233126426578

7 directories, 6 files

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章