一、Saltstack多节点推送实现zabbix监控的自动安装部署
实验环境:
主机名 | ip | 服务 |
---|---|---|
server1 | 172.25.1.1 | salt-master、salt-minion、mariadb数据库 |
server2 | 172.25.1.2 | salt-minion、zabbix-server服务端、zabbix-agent客户端 |
server3 | 172.25.1.3 | salt-minion、zabbix-web前端 |
思路:server1做数据库,server2做zabbix服务端与客户端,server3做前端。创建三个目录及一个top.sls文件:
三个目录:
实验:
步骤一:在/srv/salt目录下创建三个目录zabbix-server、zabbix-web、mariadb。
[root@server1 salt]# cd /srv/salt/
[root@server1 salt]# mkdir zabbix-server
[root@server1 salt]# mkdir zabbix-web
[root@server1 salt]# mkdir mariadb
步骤二:在zabbix-server目录中编写服务安装配置文件并传入相应配置文件
(1)编写服务安装文件install.sls
zabbix-server-install:
pkg.installed:
- pkgs:
- zabbix-server-mysql
- zabbix-agent
cmd.run: #此模块的调用是为了配置阿里云仓库,为了下载所需安装包及依赖项
- name: cd /etc/yum.repos.d/ && echo -e "[zabbix]\nname= zabbix\nbaseurl= https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/ \ngpgcheck= no " > 4.0.repo && echo -e "[update] \nname= update \nbaseurl= https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/ \ngpgcheck= no" > update.repo && yum clean all > /dev/null
- creates: /etc/yum.repos.d/update.repo
file.managed:
- name: /etc/zabbix/zabbix_server.conf
- source: salt://zabbix-server/files/zabbix_server.conf
- template: jinja #调用jinja模板
- context:
dbhost: {{ pillar['dbhost'] }}
dbuser: {{ pillar['dbuser'] }}
dbpass: {{ pillar['dbpass'] }}
service.running: #服务重启
- name: zabbix-server
- reload: true
- watch: #监控zabbix-server-install模块是否有变动
- file: zabbix-server-install
zabbix-agent:
service.running
(2)在/srv/pillar目录下定义pillar数据变量并将文件关联到top.sls文件
pillar变量:
[root@server1 pillar]# vim zabbix.sls
{% if grains['fqdn'] == 'server2' %} #如果匹配到server2主机,则可使用以下变量
dbhost: 172.25.1.1 #我在这里定义好数据库主机
dbuser: zabbix
dbpass: zabbix
{% elif grains['fqdn'] == 'server3' %}
dbhost: 172.25.1.1
dbuser: zabbix
dbpass: zabbix
{% endif %}
关联到top.sls文件
[root@server1 pillar]# vim top.sls
base:
'*':
- zabbix
(3)在/srv/salt/zabbix-server/files目录下导入服务配置文件
做法:提前在某台主机上安装zabbix-server-mysql服务,将生成的配置文件/etc/zabbix/zabbix_server.conf拷贝到/srv/salt/zabbix-server/files目录下。并做如下配置:
91 DBHost={{ dbhost }}
100 DBName=zabbix
116 DBUser={{ dbuser }}
124 DBPassword={{ dbpass }}
install.sls文件中使用了模板,调用了pillar模板变量,通过context参数,传递给source中定义的此文件中。
步骤二:在zabbix-web目录中编写服务安装配置文件并传入相应配置文件
(1)编写服务安装文件install.sls
zabbix-web-install:
pkg.installed: #要下载的包
- pkgs:
- httpd
- zabbix-web-mysql
cmd.run: #配置yum源
- name: cd /etc/yum.repos.d/ && echo -e "[centos] \nname=centos \nbaseurl= https://mirrors.aliyun.com/centos/7/os/x86_64/ \ngpgcheck=0" > centos.repo && echo -e "[zabbix]\nname= zabbix\nbaseurl= https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/ \ngpgcheck= no " > 4.0.repo && echo -e "[update] \nname= update \nbaseurl= https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/ \ngpgcheck= no" > update.repo && yum clean all > /dev/null
- creates: /etc/yum.repos.d/update.repo
file.managed: #传送配置文件
- name: /etc/httpd/conf.d/zabbix.conf
- source: salt://zabbix-web/files/zabbix.conf
service.running: #重启httpd服务
- name: httpd
- reload: true
- watch:
- file: zabbix-web-install
(2)在/srv/salt/zabbix-server/files目录下导入服务配置文件
做法:提前在某台主机上安装zabbix-web-mysql及httpd服务,将生成的配置文件/etc/httpd/conf.d/zabbix.conf拷贝到/srv/salt/zabbix-web/files目录下。并做如下配置:
php_value date.timezone Asia/Shanghai
步骤三:在mariadb目录中编写服务安装配置文件并传入相应配置文件
(1)编写服务安装文件install.sls
mariadb-install:
pkg.installed:
- pkgs:
- mariadb-server
- MySQL-python
file.managed:
- name: /etc/my.cnf
- source: salt://mariadb/files/my.cnf
service.running:
- name: mariadb
- watch:
- file: mariadb-install
(2)编写服务配置文件service.sls文件
include:
- mariadb.install
database-init:
cmd.run: #【1】数据库安全初始化
- name: mysql -e "DELETE FROM mysql.user WHERE User='';" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');" -e "DROP DATABASE IF EXISTS test;" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" -e "create database zabbix;" -e "UPDATE mysql.user SET Password=PASSWORD('westos') WHERE User='root';" -e "FLUSH PRIVILEGES;" && touch /var/lib/mysql/init.lock
- creates: /var/lib/mysql/init.lock
zabbix-init:
file.managed:
- name: /mnt/create.sql.gz #zabbix数据库初始化
- source: salt://mariadb/files/create.sql.gz
cmd.run:
- name: zcat /mnt/create.sql.gz | mysql -uroot -pwestos zabbix && touch /var/lib/mysql/zabbix-init.lock
- creates: /var/lib/mysql/zabbix-init.lock
mysql_user.present: #创建远程登陆用户zabbix
- host: '%'
- name: zabbix
- password: zabbix
mysql_grants.present: #对zabbix用户授于zabbix数据库所有权限
- grant: all privileges
- database: zabbix.*
- user: zabbix
- host: '%'
【1】数据库安全初始化及创建数据库zabbix
在某台主机上安装mariadb-server后,手动安全初始化,会生成文件/usr/bin/mysql_secure_installation文件,里边含有数据库安全初始化的 SQL操作语句,可将其复制粘贴过来。
(3)在/srv/salt/mariadb/files目录下导入服务配置文件
在某台主机上安装mariadb-server,拷贝配置文件/etc/my.cnf到此目录下,并做如下修改:
在某台主机上安装zabbix-server-mysql,将/usr/share/doc/zabbix-server-mysql-4.0.15/create.sql.gz zabbix数据库初始化信息拷贝到server1主机/srv/salt/mariadb/files/目录下
(4)在你要作为数据库的minion主机上,将minion端与数据库连接
在配置文件/etc/salt/minion后面追加:
mysql.host: 'localhost'
mysql.port: 3306
mysql.user: 'root'
mysql.pass: 'westos'
mysql.db: 'zabbix'
mysql.unix_socket: '/var/lib/mysql/mysql.sock'
mysql.charset: 'utf8'
注意:如果你之前在mariadb主机上安装过mariadb-server,则需要删除数据。
rm -fr /var/lib/mysql
步骤四:编写多节点推送文件/srv/salt/top.sls文件并推送
base:
'server1':
- mariadb.service
'server2':
- zabbix-server.install
'server3':
- zabbix-web.install
salt '*' state.highstate