1. 程式人生 > >自動化運維之SaltStack(概述及簡單配置實例)

自動化運維之SaltStack(概述及簡單配置實例)

ati 遠程 int lock 狀態 工具 保持 restart x86

在生產環境中,服務器往往不止一臺,有可能是成千上萬臺。對於運維人員來說,如果單獨對每臺服務器進行管理,工作難度實在是太大了。SaltStack是一個服務器基礎設施管理工具,它具有配置管理、遠程執行、監控等功能。SaltStack由Python語言編寫,是非常簡單易用和輕量級的管理工具。

通過部署SaltStack環境,可以在成千上萬臺服務器上批量執行命令。對於不同的業務進行集中管理、分發文件、采集數據、軟件包管理等,有利於運維人員提高工作效率,規範業務配置和操作。

SaltStack原理

SaltStack由Master和Minion構成,Master是服務端,表示一臺服務器;Minion是客戶服務端,表示多臺服務器。在Master上發送命令給符合條件的Minion,Minion就會執行相應的命令,Master和Minion之間是通過ZeroMQ(消息隊列)進行通信的。

SaltStack的Master端監聽4505與4506端口,4505為MAster和Minion認證通信端口,4506為Master用來發送命令或者接收Minion的命令執行返回信息。
當客戶端啟動後,會主動連接Master端註冊,然後一直保持該TCP連接,而Master通過這條TCP連接對客戶端進行控制。如果連接斷開,Master對客戶端將不能進行控制。但是,當客戶端檢查到連接斷開後,會定期向Master端請求註冊連接。

SaltStack常用模塊

SaltStack提供了非常多的功能模塊,以便於對操作系統的基礎功能和常用工具的操作。

  • (1)pkg模塊
    pkg模塊的作用是包管理,包括增刪更新。
  • (2)file模塊
    file模塊的作用是管理文件操作,包括同步文件、設置文件權限和所屬用戶組、刪除文件等操作。
  • (3)cmd模塊
    cmd模塊的作用是在Minion上執行命令或者腳本。
  • (4)user模塊
    user模塊的作用是管理系統賬戶操作。
  • (5)service模塊
    service模塊的作用是管理系統服務操作。
  • (6)cron模塊
    cron模塊的作用是管理cron服務操作。

案例:SaltStack批量部署並配置Apache

需求分析

1.案例目的

在生產環境中,經常需要根據不同的業務需求來分組部署和配置Nginx服務器。本案例使用了三臺服務器,均采用CentOS7.4系統版本,要求能連接互聯網,SELinux和防火墻均已關閉。

需要註意的是,三臺服務器一定要設置完整的FQDN,和域名一樣的形式,不然在主控端執行遠程執行命令或者配置的時候,等待的時間會非常長,甚至還會出現其他不可控的問題。

2.部署環境

角色 主機名 IP地址 組名
master master.saltstack.com 192.168.88.13 ——
minion web01.saltstack.com 192.168.88.14 group1
minion web02.saltstack.com 192.168.88.15 group2

操作步驟

1.SaltStack安裝

1.1首先安裝epel源,因為後面需要安裝SaltStack服務端和客戶端,也包括後面的Apache

yum install epel-release -y     //三臺都執行此操作

1.2主控端(master)安裝salt-master,被控端(minion)安裝salt-minion

[root@master ~]# yum install salt-master -y
[root@web01 ~]# yum install salt-minion -y
[root@web02 ~]# yum install salt-minion -y

1.3配置主控端配置文件/etc/salt/master,註意默認master文件全部是註釋的。主控端修改內容如下:

[root@master ~]# cat /etc/salt/master | grep -v ^$ | grep -v ^#
interface: 192.168.88.13        //修改15行監聽地址

auto_accept: True               //修改215行的主控端會自動認證被控端的認證

file_roots:                     //修改416行saltstack文件根目錄位置,需要修改後創建
  base:
    - /srv/salt

pillar_roots:                   //修改529行的主目錄,需要修改後創建
  base:
    - /srv/pillar

pillar_opts: True               //修改552行的pillar開啟功能

nodegroups:                     //修改710行的組分類
  group1: ‘web01.saltstack.com‘
  group2: ‘web02.saltstack.com‘

1.4創建salt文件根目錄及pillar目錄

[root@master ~]# mkdir /srv/salt
[root@master ~]# mkdir /srv/pillar

1.5啟動salt-master服務並檢查端口

[root@master ~]# systemctl start salt-master.service 
[root@master ~]# netstat -natp | egrep ‘4505|4506‘
tcp        0      0 192.168.88.13:4505      0.0.0.0:*               LISTEN      3316/python         
tcp        0      0 192.168.88.13:4506      0.0.0.0:*               LISTEN      3338/python

1.6配置兩臺被監控端配置文件/etc/salt/minion(註意默認的minion文件全部也是註釋的)

master:192.168.88.13            //16行,指定主控端IP
id:web01.saltstack.com          //72行,指定被控主機名,另一臺是web02.saltstack.com

1.7分別啟動兩臺被控端服務,並在主控端上簡單測試一下主控端和被控端的通信狀態,如果返回都是True,則說明正常。

[root@web01 salt]# systemctl start salt-minion.service
[root@web02 ~]# systemctl start salt-minion.service
[root@master ~]# salt ‘*‘ test.ping
web02.saltstack.com:
    True
web01.saltstack.com:
    True

2.SaltStack批量部署Apache

2.1 在主控端上創建入口文件top.sls

[root@master salt]# vim top.sls
base:
 ‘*‘:
   - apache

2.2定義被控機執行狀態,安裝apache軟件,配置文件並啟動

[root@master salt]# vim apache.sls
apache-service:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
  service.running:
      - name: httpd
      - enable: True

2.3重啟服務後,在主控端執行刷新state命令,讓兩臺被控端去執行安裝apache並配置

[root@master salt]# systemctl restart salt-master.service 
[root@master salt]# salt ‘*‘ state.highstate 
web02.saltstack.com:
----------
          ID: apache-service
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: The following packages were installed/updated: httpd
     Started: 15:19:03.880968
    Duration: 47422.538 ms
     Changes:   
              ----------
              apr:
                  ----------
                  new:
                      1.4.8-3.el7_4.1
                  old:
              apr-util:
                  ----------
                  new:
                      1.5.2-6.el7
                  old:
              httpd:
                  ----------
                  new:
                      2.4.6-80.el7.centos.1
                  old:
              httpd-tools:
                  ----------
                  new:
                      2.4.6-80.el7.centos.1
                  old:
...省略部分內容

2.4去被控端查看apache是否成功安裝,並查看端口

[root@web01 salt]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
[root@web01 salt]# netstat -natp | grep 80
tcp        0      0 192.168.88.14:42808     192.168.88.13:4505      ESTABLISHED 3487/python         
tcp6       0      0 :::80                   :::*                    LISTEN      4186/httpd          
[root@web02 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
[root@web02 ~]# netstat -natp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      4316/httpd

這樣就完成了通過SaltStack批量部署配置Apache!

自動化運維之SaltStack(概述及簡單配置實例)