saltstack自动化部署keepalived和zabbix
1、keepalived
本文使用三台虚拟机,server1是saltstack的master端,server2和server3是saltstack的minion端,现在想让server1给server2和server3部署keepalived,使得server2为keepalived的master,server3为keepalived的backup。
先简单部署,测试成功后,再做调整。
修改keepalived配置文件如下,vip为172.25.11.100
在base中创建子目录keepalived,编写init.sls文件,,给server2推
init.sls文件内容如下,kp-install模块,安装keepalived;推送base下的keepalived下的keepalived.conf文件;运行keepalived,并监测是否有改动,有改动就重启。
在server2端可以查看到vip,执行成功
接下来考虑到,master和backup的配置文件不同,所以同时推的时候,需要变量,就要用到pillar。在/srv/pillar/编写kp.sls文件,内容如下,如果主机名是server2,状态为master,vrid为11,优先级为100;如果主机名是server3,状态为backup,vrid为11,优先级为50。
在/srv/pillar/top.sls文件中,需要添加kp模块
[root@server1 keepalived]# vim init.sls
kp-install:
pkg.installed:
- name: keepalived
file.managed:
- name: /etc/keepalived/keepalived.conf
- source: salt://keepalived/keepalived.conf
- template: jinja #添加jinja模板
- context:
STATE: {{ pillar['state'] }} #变量state赋予STATE
VRID: {{ pillar['vrid' ]}} #变量vrid赋予VRID
PRI: {{ pillar['pri'] }} #变量pri赋予PRI
service.running:
- name: keepalived
- reload: true
- watch:
- file: kp-install
修改keepalived的配置文件如下,把原来的三个定值换成了变量。
salt ‘*’ state.sls keepalived 推送,server3是backup,server2是master。
由于现在使用虚拟ip,所以以前写的apache模块中,ip的位置需要修改为虚拟ip
修改base下的top.sls文件,角色为apache的主机匹配后,执行keepalived模块;角色为nginx的主机匹配后,执行keepalived模块。
设置完毕,salt ‘*’ state.highstate 高推,curl成功
2、zabbix
server1是salt的master端,server2和server3是salt的minion端。
server2作zabbix的server端,server3作zabbix的agent端。
前面已经完成saltstack的部署(包括salt-master和salt-minion)
首先在真机上搭建zabbix的yum源
[root@foundation11 images]# cd /var/www/html/
[root@foundation11 html]# ls
3000 4.0 rhel7.6 rhel8
[root@foundation11 html]# cd 4.0/
[root@foundation11 4.0]# ls
fping-3.10-1.el7.x86_64.rpm
iksemel-1.4-2.el7.centos.x86_64.rpm
php-5.4.16-46.el7.x86_64.rpm
php-bcmath-5.4.16-42.el7.x86_64.rpm
php-bcmath-5.4.16-46.el7.x86_64.rpm
php-cli-5.4.16-46.el7.x86_64.rpm
php-common-5.4.16-46.el7.x86_64.rpm
php-gd-5.4.16-46.el7.x86_64.rpm
php-ldap-5.4.16-46.el7.x86_64.rpm
php-mbstring-5.4.16-42.el7.x86_64.rpm
php-mbstring-5.4.16-46.el7.x86_64.rpm
php-mysql-5.4.16-46.el7.x86_64.rpm
php-pdo-5.4.16-46.el7.x86_64.rpm
php-xml-5.4.16-46.el7.x86_64.rpm
repodata
zabbix-agent-4.0.5-1.el7.x86_64.rpm
zabbix-get-4.0.5-1.el7.x86_64.rpm
zabbix-java-gateway-4.0.5-1.el7.x86_64.rpm
zabbix-proxy-mysql-4.0.5-1.el7.x86_64.rpm
zabbix-sender-4.0.5-1.el7.x86_64.rpm
zabbix-server-mysql-4.0.5-1.el7.x86_64.rpm
zabbix-web-4.0.5-1.el7.noarch.rpm
zabbix-web-mysql-4.0.5-1.el7.noarch.rpm
salt的master端的整体布局如下:
[root@server1 ~]# cd /srv/
[root@server1 srv]# tree
.
├── pillar
│ ├── top.sls
│ └── zabbix.sls
└── salt
├── mariadb
│ ├── files
│ │ └── create.sql.gz
│ └── install.sls
├── repos
│ └── zabbix.sls
├── top.sls
├── zabbix-agent
│ ├── files
│ │ └── zabbix_agentd.conf
│ └── install.sls
├── zabbix-server
│ ├── files
│ │ └── zabbix_server.conf
│ └── install.sls
└── zabbix-web
├── files
│ └── zabbix.conf
└── install.sls
(1)仓库 repos目录
[root@server1 salt]# ls
mariadb repos top.sls zabbix-agent zabbix-server zabbix-web
[root@server1 salt]# cd repos/
[root@server1 repos]# ls
zabbix.sls
[root@server1 repos]# cat zabbix.sls
zabbix:
pkgrepo.managed:
- baseurl: http://172.25.11.250/4.0
- gpgcheck: 0
(2)mariadb 目录
[root@server1 salt]# ls
mariadb repos top.sls zabbix-agent zabbix-server zabbix-web
[root@server1 salt]# cd mariadb/
[root@server1 mariadb]# ls
files install.sls
[root@server1 mariadb]# cat install.sls
db-install:
pkg.installed:
- pkgs:
- mariadb-server
- mariadb
- MySQL-python
service.running:
- name: mariadb
db-configure:
file.managed:
- name: /mnt/create.sql.gz
- source: salt://mariadb/files/create.sql.gz
mysql_database.present:
- name: zabbix
- character_set: utf8
- collate: utf8_bin
- connection_user: root
- connection_pass:
mysql_user.present:
- name: zabbix
- host: localhost
- password: westos
- connection_user: root
- connection_pass:
onnection_pass:
mysql_grants.present:
- grant: all privileges
- database: zabbix.*
- user: zabbix
- connection_user: root
- connection_pass:
cmd.wait:
- name: zcat /mnt/create.sql.gz | mysql -uroot zabbix
- watch:
- mysql_database: db-configure
[root@server1 mariadb]# cd files/
[root@server1 files]# ls
create.sql.gz
(3)zabbix-server目录
[root@server1 salt]# ls
mariadb repos top.sls zabbix-agent zabbix-server zabbix-web
[root@server1 salt]# cd zabbix-server/
[root@server1 zabbix-server]# ls
files install.sls
[root@server1 zabbix-server]# cat install.sls
include:
- repos.zabbix
server-install:
pkg.installed:
- pkgs:
- zabbix-server-mysql
- zabbix-agent
file.managed:
- name: /etc/zabbix/zabbix_server.conf
- source: salt://zabbix-server/files/zabbix_server.conf
- template: jinja
- context:
dbpasswd: {{ pillar['DBPASSWD'] }}
service.running:
- name: zabbix-server
- watch:
- file: server-install
zabbix-agent:
service.running
[root@server1 zabbix-server]# cd files/
[root@server1 files]# ls
zabbix_server.conf
[root@server1 files]# cat zabbix_server.conf
124: DBPassword={{ dbpasswd }}
(4)zabbix-agent目录
[root@server1 salt]# ls
mariadb repos top.sls zabbix-agent zabbix-server zabbix-web
[root@server1 salt]# cd zabbix-agent/
[root@server1 zabbix-agent]# ls
files install.sls
[root@server1 zabbix-agent]# cat install.sls
include:
- repos.zabbix
agent-install:
pkg.installed:
- name: zabbix-agent
file.managed:
- name: /etc/zabbix/zabbix_agentd.conf
- source: salt://zabbix-agent/files/zabbix_agentd.conf
- template: jinja
- context:
zabbixserver: {{ pillar['ZABBIX-SERVER'] }}
hostname: {{ grains['fqdn'] }}
service.running:
- name: zabbix-agent
- restart: true
- watch:
- file: agent-install
[root@server1 zabbix-agent]# cd files/
[root@server1 files]# ls
zabbix_agentd.conf
[root@server1 files]# cat zabbix_agentd.conf
98: Server={{ zabbixserver }}
139: ServerActive={{ zabbixserver }}
150: Hostname={{ hostname }}
(5)zabbix-web目录
[root@server1 salt]# ls
mariadb repos top.sls zabbix-agent zabbix-server zabbix-web
[root@server1 salt]# cd zabbix-web/
[root@server1 zabbix-web]# ls
files install.sls
[root@server1 zabbix-web]# cat install.sls
include:
- repos.zabbix
web-install:
pkg.installed:
- pkgs:
- zabbix-web-mysql
- zabbix-web
- httpd
- php
- php-mysql
file.managed:
- name: /etc/httpd/conf.d/zabbix.conf
- source: salt://zabbix-web/files/zabbix.conf
service.running:
- name: httpd
- watch:
- file: web-install
[root@server1 zabbix-web]# cd files/
[root@server1 files]# ls
zabbix.conf
[root@server1 files]# cat zabbix.conf
20: php_value date.timezone Asia/Shanghai
(6)pillar目录
[root@server1 srv]# ls
pillar salt
[root@server1 srv]# cd pillar/
[root@server1 pillar]# ls
top.sls zabbix.sls
[root@server1 pillar]# cat zabbix.sls
{% if grains['fqdn'] == 'server2' %}
DBPASSWD: westos
{% else %}
ZABBIX-SERVER: 172.25.11.2
{% endif %}
[root@server1 pillar]# cat top.sls
base:
'*':
- zabbix
(7)top.sls
[root@server1 salt]# ls
mariadb repos top.sls zabbix-agent zabbix-server zabbix-web
[root@server1 salt]# cat top.sls
base:
'server2':
- mariadb.install
- zabbix-server.install
- zabbix-web.install
'server3':
- zabbix-agent.install
部署文件完成,测试salt '*' state.highstate
,浏览器打开172.25.11.2/zabbix
账号为Admin,密码为zabbix
可以成功在网页看到server端
和以前的方法一样,添加server3进入群组