saltstack 自动化运维管理
一、簡(jiǎn)介
saltstack是一個(gè)配置管理系統(tǒng),能夠維護(hù)預(yù)定義狀態(tài)的遠(yuǎn)程節(jié)點(diǎn)。
saltstack是一個(gè)分布式遠(yuǎn)程執(zhí)行系統(tǒng),用來(lái)在遠(yuǎn)程節(jié)點(diǎn)上執(zhí)行命令和查詢數(shù)據(jù)。
saltstack是運(yùn)維人員提高工作效率、規(guī)范業(yè)務(wù)配置與操作的利器。
Salt的核心功能
- 使命令發(fā)送到遠(yuǎn)程系統(tǒng)是并行的而不是串行的
- 使用安全加密的協(xié)議
- 使用最小最快的網(wǎng)絡(luò)載荷
- 提供簡(jiǎn)單的編程接口
Salt同樣引入了更加細(xì)致化的領(lǐng)域控制系統(tǒng)來(lái)遠(yuǎn)程執(zhí)行,使得系統(tǒng)成為目標(biāo)不止可以通過(guò)主機(jī)名,還可以通過(guò)系統(tǒng)屬性。
SaltStack 采用 C/S模式,minion與master之間通過(guò)ZeroMQ消息隊(duì)列通信,默認(rèn)監(jiān)聽(tīng)4505端口。
Salt Master運(yùn)行的第二個(gè)網(wǎng)絡(luò)服務(wù)就是ZeroMQ REP系統(tǒng),默認(rèn)監(jiān)聽(tīng)4506端口
二、安裝
官網(wǎng)
1.設(shè)置官方Y(jié)UM倉(cāng)庫(kù):
從官方網(wǎng)站下載yum源 倉(cāng)庫(kù)地址
[root@server1~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm注意:由于官網(wǎng)下載速度太慢了,所以我將地址換成了阿里云的,下載速度快
[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 #設(shè)置master自啟動(dòng)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端執(zhí)行命令允許minion連接
[root@server1 yum.repos.d]# salt-key -L 查詢 [root@server1 yum.repos.d]# salt-key -A 給兩個(gè)minion key
- 查看端口連接情況
- 詳細(xì)查看進(jìn)程信息
- 查看端口連接情況
5.master端測(cè)試與minion端的連接
[root@server1 ~]# salt '*' test.ping [root@server1 ~]# salt '*' cmd.run hostname [root@server1 ~]# salt '*' cmd.run "ip addr"三、saltstack遠(yuǎn)程執(zhí)行
1.遠(yuǎn)程執(zhí)行shell命令
-
Salt命令由三個(gè)主要部分構(gòu)成:
salt ‘’ [arguments]
target: 指定哪些minion, 默認(rèn)的規(guī)則是使用glob匹配minion id.
salt ‘*’ test.ping
Targets也可以使用正則表達(dá)式:
salt -E ‘server[1-3]’ test.ping
Targets也可以指定列表:
salt -L ‘server2,server3’ test.ping -
funcation是module提供的功能,Salt內(nèi)置了大量有效的functions.
salt ‘*’ cmd.run ‘uname -a’
arguments通過(guò)空格來(lái)界定參數(shù):
salt ‘server2’ sys.doc pkg #查看模塊文檔
salt ‘server2’ pkg.install httpd
salt ‘server2’ pkg.remove httpd
salt內(nèi)置的執(zhí)行模塊列表:
執(zhí)行模塊網(wǎng)址
按Ctrl+F搜索你需要的模塊
-
命令行執(zhí)行
查看server2是否成功安裝上
開(kāi)啟服務(wù)
2.配置管理
編輯master配置文件:
[root@server1 ~]# vim /etc/salt/master默認(rèn)位置,不用修改
因?yàn)闆](méi)有salt目錄,所以需要手動(dòng)創(chuàng)建
創(chuàng)建一個(gè)sls文件:
注意縮進(jìn)
- 下載服務(wù),編寫發(fā)布文件,啟動(dòng)服務(wù)
- 指定主機(jī)執(zhí)行:
- 執(zhí)行過(guò)程
查看是否執(zhí)行成功
- 在受控主機(jī)查看剛才的執(zhí)行緩存信息
查看文件內(nèi)容是否發(fā)生變化
3.同時(shí)修改兩個(gè)配置文件
- 第一種書寫方式
注意 watch 為觸發(fā),監(jiān)控當(dāng)配置文件發(fā)生改變時(shí),會(huì)重啟服務(wù)
- 第二種編寫方式
執(zhí)行
[root@server1 apache]# salt 'server2' state.sls apache.install
Salt 狀態(tài)系統(tǒng)的核心是SLS,或者叫SaLt State 文件。
SLS表示系統(tǒng)將會(huì)是什么樣的一種狀態(tài),而且是以一種很簡(jiǎn)單的格式來(lái)包含這些數(shù)據(jù),常被叫做配置管理。
sls文件命名:
sls文件以”.sls”后綴結(jié)尾,但在調(diào)用是不用寫此后綴。
使用子目錄來(lái)做組織是個(gè)很好的選擇。
init.sls 在一個(gè)子目錄里面表示引導(dǎo)文件,也就表示子目錄本身, 所以apache/init.sls 就是表示apache.
如果同時(shí)存在apache.sls 和 apache/init.sls,則 apache/init.sls 被忽略,apache.sls將被用來(lái)表示 apache.
4.創(chuàng)建模塊目錄:
[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 ## 同步模塊- 在受控主機(jī)上查看模塊是否同步成功
- 執(zhí)行測(cè)試模塊
四、grains
1.簡(jiǎn)介
Grains是SaltStack的一個(gè)組件,存放在SaltStack的minion端。
當(dāng)salt-minion啟動(dòng)時(shí)會(huì)把收集到的數(shù)據(jù)靜態(tài)存放在Grains當(dāng)中,只有當(dāng)minion重啟時(shí)才會(huì)進(jìn)行數(shù)據(jù)的更新。
由于grains是靜態(tài)數(shù)據(jù),因此不推薦經(jīng)常去修改它。
應(yīng)用場(chǎng)景:
- 信息查詢,可用作CMDB。
- 在target中使用,匹配minion。
- 在state系統(tǒng)中使用,配置管理模塊。
(一)信息查詢
[root@server1 _modules]# salt server2 grains.ls
(二)查看每一項(xiàng)的值:
(三)取單項(xiàng)的值:
2.自定義grains項(xiàng)
第一種方法
- 在minion 端 /etc/salt/minion中定義:
重啟salt-minion,否則數(shù)據(jù)不會(huì)更新:
第二種方法
- 在minion 端/etc/salt/grains中定義:
- 查看grains項(xiàng)
- 同步數(shù)據(jù):
3.編寫grains模塊
在salt-master端創(chuàng)建_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測(cè)試 [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匹配運(yùn)用
- 在target中匹配minion:
- 在top文件中匹配
在serve2部署apache在server3部署nginx
一步一步來(lái)
鏈接:nginx包 提取碼: 6kk2
- 批量執(zhí)行:
驗(yàn)證:
在server3:/mnt 上查看是否有nginx包
- 配置兩個(gè)服務(wù)完整版的運(yùn)行腳本
- 下載服務(wù)部分
- 修改配置文件部分
鏈接: nginx.server提取碼: s6w7
- 批量執(zhí)行:
查看服務(wù)是否成功安裝并運(yùn)行
五、Jinja模板
1.簡(jiǎn)介
Jinja是一種基于python的模板引擎,在SLS文件里可以直接使用jinja模板來(lái)做一些操作。
通過(guò)jinja模板可以為不同服務(wù)器定義各自的變量。
兩種分隔符: {% … %} 和 {{ … }},前者用于執(zhí)行諸如 for 循環(huán) 或賦值的語(yǔ)句,后者把表達(dá)式的結(jié)果打印到模板上。
2.jinja模板的適用方法
Jinja最基本的用法是使用控制結(jié)構(gòu)包裝條件:
[root@server1 salt]# vim test.sls /mnt/testfile:file.append:{% if grains['fqdn'] == 'server2' %}- text: server2{% elif grains['fqdn'] == 'server3' %}- text: server3{% endif %}- 執(zhí)行測(cè)試
驗(yàn)證:去查看/mnt 下有沒(méi)有文件生成
2.使用jinja模板實(shí)現(xiàn)apache的配置
- 編寫默認(rèn)發(fā)布文件 內(nèi)含系統(tǒng)版本,主機(jī)名
- 修改httpd配置文件端口號(hào)
- 編寫執(zhí)行文件
- 執(zhí)行
驗(yàn)證:curl 172.25.3.2:80
六、pillar
1.pillar簡(jiǎn)介
pillar和grains一樣也是一個(gè)數(shù)據(jù)系統(tǒng),但是應(yīng)用場(chǎng)景不同。
pillar是將信息動(dòng)態(tài)的存放在master端,主要存放私密、敏感信息(如用戶名密碼等),而且可以指定某一個(gè)minion才可以看到對(duì)應(yīng)的信息。
pillar更加適合在配置管理中運(yùn)用。
2.聲明pillar
- 默認(rèn)就是此目錄,不用做任何修改
- 需要自己手動(dòng)建立目錄
3.自定義pillar項(xiàng)
[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數(shù)據(jù):
- 查詢pillar數(shù)據(jù):
測(cè)試
加入pillar
- 修改執(zhí)行文件,引用pillar
- 執(zhí)行
import方式,可在state文件之間共享:
加到配置文件最上面
- 執(zhí)行
七、自動(dòng)部署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.創(chuàng)建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.準(zhǔn)備Top文件:
[root@server1 salt]# vim top.sls base:'roles:apache':- match: grain- apache- keepalived'roles:nginx':- match: grain- nginx- keepalived注意需要將干剛才模板httpd的配置文件中的[bind]去掉,要不然訪問(wèn)不到結(jié)果
5.批量執(zhí)行:
[root@server1 apache]# salt '*' state.highstate運(yùn)行結(jié)果
vip已經(jīng)成功加上
測(cè)試:
在真機(jī)上訪問(wèn)vip,查看返回值
測(cè)試高可用
當(dāng)server2的keepalived關(guān)了之后,再次訪問(wèn)172.25.3.100,就會(huì)跳到備用server3的nginx的默認(rèn)發(fā)布頁(yè)面
八、自動(dòng)化部署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 目錄下需要的兩個(gè)配置文件
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圈出來(lái)的文件在初始化完成之后才會(huì)出現(xiàn),不用修改
/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修改時(shí)區(qū)
zabbix_server.conf 修改DBHost DBpassword
執(zhí)行完之后會(huì)出現(xiàn)一個(gè)報(bào)錯(cuò),這是因?yàn)槿鄙僖粋€(gè)文件,初始化完成之后才會(huì)生成
172.25.3.2/zabbix
從server2中拿到
當(dāng)我們?cè)俅螆?zhí)行之后就不會(huì)出現(xiàn)報(bào)錯(cuò),到這個(gè)zabbix安裝配置完成
九、JOB管理
1.Job簡(jiǎn)介
master在下發(fā)指令任務(wù)時(shí),會(huì)附帶上產(chǎn)生的jid。
minion在接收到指令開(kāi)始執(zhí)行時(shí),會(huì)在本地的/var/cache/salt/minion/proc目錄下產(chǎn)生該jid命名的文件,用于在執(zhí)行過(guò)程中master查看當(dāng)前任務(wù)的執(zhí)行情況。
指令執(zhí)行完畢將結(jié)果傳送給master后,刪除該臨時(shí)文件。
2.默認(rèn)JOB CACHE
Job緩存默認(rèn)保存24小時(shí):
#vim /etc/salt/master keep_jobs: 24master端Job緩存目錄: /var/cache/salt/master/jobs3.把Job存儲(chǔ)到數(shù)據(jù)庫(kù)
[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端傳到數(shù)據(jù)庫(kù)
往數(shù)據(jù)庫(kù)中導(dǎo)入sql語(yǔ)句
[root@server1 ~]# mysql < salt.sql測(cè)試: 執(zhí)行一條命令,進(jìn)入數(shù)據(jù)庫(kù)查看是否記錄在數(shù)據(jù)庫(kù)
[root@server1 ~]# salt '*' mydisk.df進(jìn)入數(shù)據(jù)庫(kù)查看是否有剛才執(zhí)行的命令
[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簡(jiǎn)介
salt-ssh可以獨(dú)立運(yùn)行的,不需要minion端。
salt-ssh 用的是sshpass進(jìn)行密碼交互的。
以串行模式工作,性能下降。
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測(cè)試:
十一、salt-syndic
1.salt-syndic簡(jiǎn)介
如果大家知道zabbix proxy的話那就很容易理解了,syndic其實(shí)就是個(gè)代理,隔離master與minion。
Syndic必須要運(yùn)行在master上,再連接到另一個(gè)topmaster上。
Topmaster 下發(fā)的狀態(tài)需要通過(guò)syndic來(lái)傳遞給下級(jí)master,minion傳遞給master的數(shù)據(jù)也是由syndic傳遞給topmaster。
topmaster并不知道有多少個(gè)minion。
syndic與topmaster的file_roots和pillar_roots的目錄要保持一致。
2.salt-syndic配置
這里我們需要配置一臺(tái)新的虛擬機(jī):server4作為頂級(jí)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安裝配置
測(cè)試:
總結(jié)
以上是生活随笔為你收集整理的saltstack 自动化运维管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: zabbix的安装与部署(proxy、睿
- 下一篇: salt-api配置