saltstack 自动化运维管理
一、簡介
saltstack是一個配置管理系統,能夠維護預定義狀態的遠程節點。
saltstack是一個分布式遠程執行系統,用來在遠程節點上執行命令和查詢數據。
saltstack是運維人員提高工作效率、規范業務配置與操作的利器。
Salt的核心功能
- 使命令發送到遠程系統是并行的而不是串行的
- 使用安全加密的協議
- 使用最小最快的網絡載荷
- 提供簡單的編程接口
Salt同樣引入了更加細致化的領域控制系統來遠程執行,使得系統成為目標不止可以通過主機名,還可以通過系統屬性。
SaltStack 采用 C/S模式,minion與master之間通過ZeroMQ消息隊列通信,默認監聽4505端口。
Salt Master運行的第二個網絡服務就是ZeroMQ REP系統,默認監聽4506端口
二、安裝
官網
1.設置官方YUM倉庫:
從官方網站下載yum源 倉庫地址
[root@server1~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm注意:由于官網下載速度太慢了,所以我將地址換成了阿里云的,下載速度快
[salt-3000] name=SaltStack 3000 Release Channel for Python 2 RHEL/Centos $releasever baseurl=https://mirrors.aliyun.com/saltstack/yum/redhat/7/$basearch/3000 failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/saltstack-signing-key, file:///etc/pki/rpm-gpg/centos7-signing-key2.安裝salt-master
這里我用server1作為master
[root@server1 ~]# yum install salt-master.noarch -y #安裝master端 [root@server1 ~]# systemctl enable --now salt-master.service #設置master自啟動3.安裝并配置salt-minion
server2和server3作為minion
[root@server2 salt]# yum install -y salt-minion.noarch -y #安裝minion端 [root@server2 ~]# vim /etc/salt/minion 指定到master的ip master 172.25.3.1 [root@server2 salt]# systemctl enable --now salt-minion.service [root@server3 ~]# yum install salt-minion.noarch -y [root@server2 ~]# vim /etc/salt/minion 指定到master的ip master 172.25.3.1 [root@server3 ~]# systemctl enable --now salt-minion.service4.master端執行命令允許minion連接
[root@server1 yum.repos.d]# salt-key -L 查詢 [root@server1 yum.repos.d]# salt-key -A 給兩個minion key
- 查看端口連接情況
- 詳細查看進程信息
- 查看端口連接情況
5.master端測試與minion端的連接
[root@server1 ~]# salt '*' test.ping [root@server1 ~]# salt '*' cmd.run hostname [root@server1 ~]# salt '*' cmd.run "ip addr"三、saltstack遠程執行
1.遠程執行shell命令
-
Salt命令由三個主要部分構成:
salt ‘’ [arguments]
target: 指定哪些minion, 默認的規則是使用glob匹配minion id.
salt ‘*’ test.ping
Targets也可以使用正則表達式:
salt -E ‘server[1-3]’ test.ping
Targets也可以指定列表:
salt -L ‘server2,server3’ test.ping -
funcation是module提供的功能,Salt內置了大量有效的functions.
salt ‘*’ cmd.run ‘uname -a’
arguments通過空格來界定參數:
salt ‘server2’ sys.doc pkg #查看模塊文檔
salt ‘server2’ pkg.install httpd
salt ‘server2’ pkg.remove httpd
salt內置的執行模塊列表:
執行模塊網址
按Ctrl+F搜索你需要的模塊
-
命令行執行
查看server2是否成功安裝上
開啟服務
2.配置管理
編輯master配置文件:
[root@server1 ~]# vim /etc/salt/master默認位置,不用修改
因為沒有salt目錄,所以需要手動創建
創建一個sls文件:
注意縮進
- 下載服務,編寫發布文件,啟動服務
- 指定主機執行:
- 執行過程
查看是否執行成功
- 在受控主機查看剛才的執行緩存信息
查看文件內容是否發生變化
3.同時修改兩個配置文件
- 第一種書寫方式
注意 watch 為觸發,監控當配置文件發生改變時,會重啟服務
- 第二種編寫方式
執行
[root@server1 apache]# salt 'server2' state.sls apache.install
Salt 狀態系統的核心是SLS,或者叫SaLt State 文件。
SLS表示系統將會是什么樣的一種狀態,而且是以一種很簡單的格式來包含這些數據,常被叫做配置管理。
sls文件命名:
sls文件以”.sls”后綴結尾,但在調用是不用寫此后綴。
使用子目錄來做組織是個很好的選擇。
init.sls 在一個子目錄里面表示引導文件,也就表示子目錄本身, 所以apache/init.sls 就是表示apache.
如果同時存在apache.sls 和 apache/init.sls,則 apache/init.sls 被忽略,apache.sls將被用來表示 apache.
4.創建模塊目錄:
[root@server1 salt]# mkdir /srv/salt/_modules [root@server1 salt]# cd _modules/5.編寫模塊文件:
[root@server1 _modules]# vim mydisk.py def df():return __salt__['cmd.run']('df -h') [root@server1 _modules]# salt server2 saltutil.sync_modules ## 同步模塊- 在受控主機上查看模塊是否同步成功
- 執行測試模塊
四、grains
1.簡介
Grains是SaltStack的一個組件,存放在SaltStack的minion端。
當salt-minion啟動時會把收集到的數據靜態存放在Grains當中,只有當minion重啟時才會進行數據的更新。
由于grains是靜態數據,因此不推薦經常去修改它。
應用場景:
- 信息查詢,可用作CMDB。
- 在target中使用,匹配minion。
- 在state系統中使用,配置管理模塊。
(一)信息查詢
[root@server1 _modules]# salt server2 grains.ls
(二)查看每一項的值:
(三)取單項的值:
2.自定義grains項
第一種方法
- 在minion 端 /etc/salt/minion中定義:
重啟salt-minion,否則數據不會更新:
第二種方法
- 在minion 端/etc/salt/grains中定義:
- 查看grains項
- 同步數據:
3.編寫grains模塊
在salt-master端創建_grains目錄:
[root@server1 ~]# mkdir /srv/salt/_grains [root@server1 ~]# cd /srv/salt/ [root@server1 salt]# cd _grains/ [root@server1 _grains]# ls [root@server1 _grains]# vim mygrains.py def my_grain():grains = {}grains['salt'] = 'stack'grains['hello'] = 'world'return grains測試 [root@server1 _grains]# salt '*' grains.item salt [root@server1 _grains]# salt '*' grains.item hello [root@server1 _grains]# salt '*' saltutil.sync_grains #同步grains到minion端
在minion端查看緩存,查看grains是否生效
4.grains匹配運用
- 在target中匹配minion:
- 在top文件中匹配
在serve2部署apache在server3部署nginx
一步一步來
鏈接:nginx包 提取碼: 6kk2
- 批量執行:
驗證:
在server3:/mnt 上查看是否有nginx包
- 配置兩個服務完整版的運行腳本
- 下載服務部分
- 修改配置文件部分
鏈接: nginx.server提取碼: s6w7
- 批量執行:
查看服務是否成功安裝并運行
五、Jinja模板
1.簡介
Jinja是一種基于python的模板引擎,在SLS文件里可以直接使用jinja模板來做一些操作。
通過jinja模板可以為不同服務器定義各自的變量。
兩種分隔符: {% … %} 和 {{ … }},前者用于執行諸如 for 循環 或賦值的語句,后者把表達式的結果打印到模板上。
2.jinja模板的適用方法
Jinja最基本的用法是使用控制結構包裝條件:
[root@server1 salt]# vim test.sls /mnt/testfile:file.append:{% if grains['fqdn'] == 'server2' %}- text: server2{% elif grains['fqdn'] == 'server3' %}- text: server3{% endif %}- 執行測試
驗證:去查看/mnt 下有沒有文件生成
2.使用jinja模板實現apache的配置
- 編寫默認發布文件 內含系統版本,主機名
- 修改httpd配置文件端口號
- 編寫執行文件
- 執行
驗證:curl 172.25.3.2:80
六、pillar
1.pillar簡介
pillar和grains一樣也是一個數據系統,但是應用場景不同。
pillar是將信息動態的存放在master端,主要存放私密、敏感信息(如用戶名密碼等),而且可以指定某一個minion才可以看到對應的信息。
pillar更加適合在配置管理中運用。
2.聲明pillar
- 默認就是此目錄,不用做任何修改
- 需要自己手動建立目錄
3.自定義pillar項
[root@server1 pillar]# vim top.sls base:'*':- package [root@server1 pillar]# vim package.sls {% if grains['fqdn'] == 'server3' %} package: nginx {% elif grains['fqdn'] == 'server2' %} paceage: apache {% endif %}- 刷新pillar數據:
- 查詢pillar數據:
測試
加入pillar
- 修改執行文件,引用pillar
- 執行
import方式,可在state文件之間共享:
加到配置文件最上面
- 執行
七、自動部署keepalived
1.定義pillar值
[root@server1 pillar]# vim package.sls {% if grains['fqdn'] == 'server3' %} package: nginx state: BACKUP vrid: 54 pri: 50 {% elif grains['fqdn'] == 'server2' %} port: 80 bind: 172.25.3.2 state: MASTER vrid: 54 pri: 100 {% endif %}2.創建sls文件
[root@server1 salt]# mkdir keepalived/files/ -p [root@server1 salt]# cd keepalived/ [root@server1 keepalived]# vim init.sls kp-install:pkg.installed:- name: keepalivedfile.managed:- name: /etc/keepalived/keepalived.conf- source: salt://keepalived/files/keepalived.conf- template: jinja- context:STATE: {{ pillar['state'] }}VRID: {{ pillar['vrid'] }}PRI: {{ pillar['pri'] }}service.running:- name: keepalived- enable: true- reload: true- watch:- file: kp-install3.修改jinja模板
[root@server1 keepalived]# cd files/ [root@server1 files]# ls keepalived.conf [root@server1 files]# vim keepalived.conf ! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0 }vrrp_instance VI_1 {state {{ STATE }}interface eth0virtual_router_id {{ VRID }}priority {{ PRI }}advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.3.100} }4.準備Top文件:
[root@server1 salt]# vim top.sls base:'roles:apache':- match: grain- apache- keepalived'roles:nginx':- match: grain- nginx- keepalived注意需要將干剛才模板httpd的配置文件中的[bind]去掉,要不然訪問不到結果
5.批量執行:
[root@server1 apache]# salt '*' state.highstate運行結果
vip已經成功加上
測試:
在真機上訪問vip,查看返回值
測試高可用
當server2的keepalived關了之后,再次訪問172.25.3.100,就會跳到備用server3的nginx的默認發布頁面
八、自動化部署zabbix
1.server3上安裝 mariadb
[root@server1 salt]# mkdir mysql/files/ -p [root@server1 salt]# cd mysql/ [root@server1 mysql]# vim init.sls mysql-install:pkg.installed:- pkgs:- mariadb-server- MySQL-pythonfile.managed:- name: /etc/my.cnf- source: salt://mysql/files/my.cnfservice.running:- name: mariadb- enable: true- watch:- file: mysql-installmysql-config:mysql_database.present:- name: zabbixmysql_user.present:- name: zabbix- host: '%'- password: "westos"mysql_grants.present:- grant: all privileges- database: zabbix.*- user: zabbix- host: '%'file.managed:- name: /mnt/create.sql- source: salt://mysql/files/create.sqlcmd.run:- name: mysql zabbix < /mnt/create.sql && touch /mnt/zabbix.lock- creates: /mnt/zabbix.lockfile 目錄下需要的兩個配置文件
2.server2上安裝zabbix-server zabbix-agent zabbix-web
[root@server1 salt]# mkdir zabbix-server/ [root@server1 salt]# cd zabbix-server/ [root@server1 zabbix-server]# vim init.sls zabbix-server:pkgrepo.managed:- name: zabbix- humanname: zabbix 4.0- baseurl: http://172.25.254.250/pub/docs/zabbix/4.0- gpgcheck: 0pkg.installed:- pkgs:- zabbix-server-mysql- zabbix-agent- zabbix-web-mysqlfile.managed:- name: /etc/zabbix/zabbix_server.conf- source: salt://zabbix-server/files/zabbix_server.confservice.running:- name: zabbix-server- enable: true- watch:- file: zabbix-serverzabbix-agent:service.runningzabbix-web:file.managed:- name: /etc/httpd/conf.d/zabbix.conf- source: salt://zabbix-server/files/zabbix.confservice.running:- name: httpd- enable: true- watch:- file: zabbix-web/etc/zabbix/web/zabbix.conf.php:file.managed:- source: salt://zabbix-server/files/zabbix.conf.php圈出來的文件在初始化完成之后才會出現,不用修改
/etc/zabbix/web zabbix.conf.php cd /usr/share/doc/zabbix-server-mysql-4.0.5/ create.sql.gz [root@server2 conf.d]# scp zabbix.conf server1:/srv/salt/zabbix-server/fileszabbix.conf修改時區
zabbix_server.conf 修改DBHost DBpassword
執行完之后會出現一個報錯,這是因為缺少一個文件,初始化完成之后才會生成
172.25.3.2/zabbix
從server2中拿到
當我們再次執行之后就不會出現報錯,到這個zabbix安裝配置完成
九、JOB管理
1.Job簡介
master在下發指令任務時,會附帶上產生的jid。
minion在接收到指令開始執行時,會在本地的/var/cache/salt/minion/proc目錄下產生該jid命名的文件,用于在執行過程中master查看當前任務的執行情況。
指令執行完畢將結果傳送給master后,刪除該臨時文件。
2.默認JOB CACHE
Job緩存默認保存24小時:
#vim /etc/salt/master keep_jobs: 24master端Job緩存目錄: /var/cache/salt/master/jobs3.把Job存儲到數據庫
[root@server1 salt]# yum install mariadb-server.x86_64 -y [root@server1 salt]# systemctl start mariadb.service [root@server1 salt]# yum install -y MySQL-python.x86_64 ##需要的依賴性(一)老版本,需要從minion端傳到master,不推薦使用
[root@server1 ~]# salt ‘server3’ mydisk.df
[root@server1 ~]# mysql MariaDB [(none)]> grant all on salt.* to salt@'%' identified by 'westos'; MariaDB [(none)]> use salt; MariaDB [salt]> select * from salt_returns;(二)新版本,直接從master端傳到數據庫
往數據庫中導入sql語句
[root@server1 ~]# mysql < salt.sql測試: 執行一條命令,進入數據庫查看是否記錄在數據庫
[root@server1 ~]# salt '*' mydisk.df進入數據庫查看是否有剛才執行的命令
[root@server1 ~]# mysql MariaDB [(none)]> grant all on salt.* to salt@'localhost' identified by 'westos'; MariaDB [(none)]> use salt; MariaDB [salt]> select * from salt_returns;十、salt-ssh 備用
1.salt-ssh簡介
salt-ssh可以獨立運行的,不需要minion端。
salt-ssh 用的是sshpass進行密碼交互的。
以串行模式工作,性能下降。
2.安裝配置salt-ssh
[root@server1 ~]# yum install salt-ssh.noarch -y [root@server1 ~]# cd /etc/salt/ [root@server1 salt]# vim roster server2:host: 172.25.3.2user: rootpasswd: westos [root@server2 web]# systemctl stop salt-minion.service測試:
十一、salt-syndic
1.salt-syndic簡介
如果大家知道zabbix proxy的話那就很容易理解了,syndic其實就是個代理,隔離master與minion。
Syndic必須要運行在master上,再連接到另一個topmaster上。
Topmaster 下發的狀態需要通過syndic來傳遞給下級master,minion傳遞給master的數據也是由syndic傳遞給topmaster。
topmaster并不知道有多少個minion。
syndic與topmaster的file_roots和pillar_roots的目錄要保持一致。
2.salt-syndic配置
這里我們需要配置一臺新的虛擬機:server4作為頂級master
[root@server4 ~]# yum install -y salt-master [root@server4 ~]# vim /etc/salt/master order_masters: True [root@server4 ~]# systemctl enable --now salt-master.service- server1安裝配置
測試:
總結
以上是生活随笔為你收集整理的saltstack 自动化运维管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zabbix的安装与部署(proxy、睿
- 下一篇: salt-api配置