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

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

經過部署SaltStack環境,能夠在成千上萬臺服務器上批量執行命令。對於不一樣的業務進行集中管理、分發文件、採集數據、軟件包管理等,有利於運維人員提升工做效率,規範業務配置和操做。python

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端請求註冊鏈接。web

SaltStack經常使用模塊

SaltStack提供了很是多的功能模塊,以便於對操做系統的基礎功能和經常使用工具的操做。 apache

  • (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,和域名同樣的形式,否則在主控端執行遠程執行命令或者配置的時候,等待的時間會很是長,甚至還會出現其餘不可控的問題。vim

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服務端和客戶端,也包括後面的Apachecentos

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目錄tcp

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

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

[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!

相關文章
相關標籤/搜索