1. 程式人生 > >[自動化] Saltstack服務配置詳解

[自動化] Saltstack服務配置詳解

txt hostname 文件操作 roo python 安裝包 目錄管理 關閉selinux 服務配置

Saltstack 簡介

Saltstack 是一個服務器基礎設施管理工具,它具有配置管理、遠程執行、監控等功能。Saltstack由Python語言編寫,基於 C/S 架構,即服務端 master 和客戶端 minions,Master和 Minion之間是通過 Zeromq(消息隊列)進行通信的 ;適合大規模批量管理服務器。

Saltstack 常用模塊

(1)pkg模塊:包管理,包括增刪更新

(2)file模塊:管理文件操作,包括同步文件、設置文件權限和所屬用戶組、刪除文件等。

(3)cmd模塊:在Million上執行命令或者腳本。

(4)user模塊:管理系統賬戶操作。

(5)service模塊:管理系統服務操作。

(6)cron模塊:管理cron服務操作。

saltstack安裝

1.準備工作

準備三臺機器,這三臺機器都關閉selinux以及防火墻

setenforcr 0
systemctl stop firewalld.service
systemctl disable firewalld.service

master服務器 (192.168.100.143)

minion服務器 (192.168.100.144 192.168.100.145)

2.編輯hosts文件(三臺都配置)

vim /etc/hosts

192.168.100.143 master.saltstack.com
192.168.100.144 web01.saltstack.com
192.168.100.145 web02.saltstack.com

3.分別修改各自的主機名

vim /etc/hostname

 master.saltstack.com   #master服務器
 web01.saltstack.com    #million服務器1
 web02.saltstack.com    #million服務器1

配置完成,重啟生效,再次關閉selinux。

4.安裝

(1)服務端

yum install -y epel-release  #安裝epel源
yum install -y salt-master 

(2)客戶端

yum install -y epel-release  #安裝epel源
yum install -y salt-minion

5.配置服務端配置文件(/etc/salt/master)

vim /etc/salt/master

interface: 192.168.100.143     #第15行,修改監聽地址為本機地址

auto_accept: True     #第215行,主服務器會自動認證被控端的認證,只要被控端在設置完主服務器的IP地址後啟動服務,主服務器就會允許被控端自動認證,以避免以後每次都要運行salt-key來確認認證書信任。

file_roots:
  base:
    - /srv/sale
#第416行,去掉註釋。開啟saltstack文件根目錄位置,註意這個目錄默認沒有創建,需要自己手動創建。

nodegroups:   
  group1: ‘web01.saltstack.com‘
  group2: ‘web02.saltstack.com‘   #第710行,配置組分類

pillar_opts: True    #第552行,開啟pillar功能,同步文件功能

pillar_roots:
    base:
     - /srv/pillar  #第529行,去掉註釋,pillar的主目錄,需要自己創建

技術分享圖片

6.創建salt與pillar文件根目錄

mkdir /srv/salt
mkdir /srv/pillar

7.啟動salt-master服務

systemctl start salt-master
systemctl enable salt-master

8.配置million客戶端配置文件(/etc/salt/minion)

vim /etc/salt/minion

master: 192.168.100.143     ##第16行,指定master服務器的IP

id: web01.saltstack.com   #註意冒號要有空格 ##第78行,指定客戶端主機名,另一臺是web02.saltstack.com 

技術分享圖片

9.分別啟動兩臺客戶端服務

systemctl start salt-minion

10.測試

(1)查看在主服務器上已經被接受過的客戶端

salt-key

技術分享圖片
(1)測試連接服務端和客戶端的通信狀態

##在主服務器端進行操作

salt ‘*‘ test.ping         

web01.saltstack.com:
  True
web02.saltstack.com:
  True

技術分享圖片
(2)測試遠程執行命令

##在主服務器端進行操作
salt ‘*‘ cmd.run ‘hostname‘    ##遠程執行命令

技術分享圖片

Saltstack的三大組件

1.grains

grains 是在 minion(客戶端)啟動時收集到的一些信息,比如操作系統類型、網卡ip等,它更適合做一些靜態的屬性值的數據采集 。
使用命令:

salt ‘web01.saltstack.com‘ grains.ls            //列出所有的 grains 項目名字

技術分享圖片

salt ‘web01.saltstack.com‘ grains.items      //列出所有的 grains 項目名以及值

技術分享圖片
grains在遠程執行命令時也很方便,示例如下:

salt -G os:CentOS cmd.run ‘hostname‘

技術分享圖片

2.pillar

pillar 和 grains 不一樣,是在 master 上定義的,並且是針對 minion 定義的一些信息。像一些比較重要的數據(密碼)可以存在 pillar 裏,還可以定義變量等。

salt ‘web01.saltstack.com‘ pillar.items  #查看指定minion的 pillar值

技術分享圖片
綜上所述,如果你想定義的屬性值是經常變化的,就采用pillar:如果很固定、不易變,就采用 grains。

3.state

state組件是SaltStack的核心功能,通過預先定制好的sls文件對被控端主機進行狀態管理,如程序包、文件、網路配置、系統服務、系統用戶等。state的定義也是通過編寫sls文件進行操作的。

示例一:通過saltstack遠程安裝apache

1.創建入口文件top.sls

mkdir /srv/salt          #配置文件中需要開啟
vim /srv/salt/top.sls     #創建入口文件,入口文件的作用是定義pillar 的數據覆蓋被控主機的有效範圍
base:
  ‘*‘:
    - apache

2.創建pillar入口文件apache.sls

vim /srv/salt/apache.sls
apache:           #這裏是自定義的名稱
  pkg.installed:        #安裝包
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

3.重啟服務端服務

systemctl restart salt-master

4.執行命令

salt ‘*‘ state.highstate    ##執行並刷新state配置命令

技術分享圖片
這樣就可遠程安裝apache服務了

示例二:文件目錄管理

1、文件管理

(1)接著編輯之前的 top.sls 文件

vim /srv/salt/top.sls   #修改為如下

base:
  ‘web02.saltstack.com‘:
    - file

(2)新建 file.sls 文件

vim /srv/salt/file.sls

file-test:     #自定義
  file.managed:
    - name: /opt/file.txt      #指定遠程客戶端要生成的文件。
    - source: salt://test/abc/1.txt #源文件
    - user: root
    - group: root
    - mode: 644

(3)新建所要測試的源文件

mkdir -p /srv/salt/test/abc/

vim /srv/salt/test/abc/1.txt
   test-test-test

(4)重啟服務端服務

systemctl restart salt-master

(5)執行命令

salt ‘web02.saltstack.com‘ state.highstate    ##執行並刷新state配置命令

技術分享圖片
技術分享圖片

2、目錄管理

(1)接著編輯之前的 top.sls 文件

vim /srv/salt/top.sls              #修改為如下
base:
  ‘web02.saltstack.com‘:
    - dir

(2)新建 dir.sls 文件

vim /srv/salt/dir.sls
file-dir:
  file.recurse:
    - name: /opt/dir
    - source: salt://test1/a
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True

註意:clean: True 源刪除文件或目錄,目標也會跟著刪除,否則不會刪除。可以默認設置為 False。

(3)新建所要測試的源目錄

 mkdir -p /srv/salt/test1/a
 vim /srv/salt/test1/a/0.txt
   12345678

(4)重啟服務端服務

systemctl restart salt-master

(5)執行命令

salt ‘web02.saltstack.com‘ state.highstate    ##執行並刷新state配置命令

技術分享圖片
技術分享圖片

示例三:遠程執行

1.遠程執行命令

(1)接著編輯之前的 top.sls 文件

vim /srv/salt/top.sls              #修改為如下
base:
  ‘web01.saltstack.com‘:
    - cmd

(2)新建 cmd.sls 文件

vim /srv/salt/cmd.sls
cmd-test:  
  cmd.run:
    - onlyif: test -f /opt/123.txt
    - names:
      - touch /opt/cmdtest.txt
      - mkdir /opt/cmdtest
    - user: root

(3)在web01.saltstack.com主機上創建/opt/123.txt

touch /opt/123.txt

(4)重啟服務端服務

systemctl restart salt-master

(5)執行命令

salt ‘web01.saltstack.com‘ state.highstate    ##執行並刷新state配置命令

技術分享圖片
技術分享圖片

2.遠程執行腳本

(1)接著編輯之前的 top.sls 文件

vim /srv/salt/top.sls              #修改為如下
base:
  ‘web01.saltstack.com‘:
    - shell

(2)新建 shell.sls 文件

vim /srv/salt/shell.sls
shell-test:  
  cmd.script:
    - source: salt://test/1.sh
    - user: root

(3)新建 1.sh 腳本文件

vim /srv/salt/test/1.sh
 #!/bin/bash
 echo "hello" > /opt/123.txt

(4)重啟服務端服務

systemctl restart salt-master

(5)執行命令

salt ‘web01.saltstack.com‘ state.highstate    ##執行並刷新state配置命令

技術分享圖片
技術分享圖片

示例四:管理任務計劃

1.建cron計劃

(1)接著編輯之前的 top.sls 文件

vim /srv/salt/top.sls              #修改為如下
base:
  ‘web02.saltstack.com‘:
    - cron

(2)新建 cron.sls 文件

vim /srv/salt/cron.sls
cron-test:  
  cron.present:
    - name: /bin/touch /opt/111.txt
    - user: root
    - minute: ‘*‘
    - hour: 0
    - daymonth: ‘*‘
    - month: ‘3,5‘
    - dayweek: ‘*‘

(3)重啟服務端服務

systemctl restart salt-master

(4)執行命令

salt ‘web02.saltstack.com‘ state.highstate    ##執行並刷新state配置命令

技術分享圖片
技術分享圖片

2.刪除 cron

只需修改 cron.sls 文件,
把 cron.present: 改成 cron.absent即可。然後重啟服務,執行並刷新state配置命令。

vim /srv/salt/cron.sls
cron-test:  
  cron.absent:
    - name: /bin/touch /opt/111.txt
    - user: root
    - minute: ‘*‘
    - hour: 0
    - daymonth: ‘*‘
    - month: ‘3,5‘
    - dayweek: ‘*‘
systemctl restart salt-master
salt ‘web02.saltstack.com‘ state.highstate    ##執行並刷新state配置命令

技術分享圖片

[自動化] Saltstack服務配置詳解