一.saltstack简介
saltstack中文文档:http://docs.saltstack.cn/topics/installation/rhel.html
1.1 saltstack简介
SaltStack可以在成千万台服务器上做到批量执行命令
,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等
.
- saltstack是 一个
配置管理系统
,python语言开发的,能够维护预定义状态的远程节点,预定义的文件很小(控制一万台机器可能也就100M左右) 。 - saltstack是一个
分布式远程执行系统,用来在远程节点上执行命令和查询数据 。
- saltstack是运维人员提高工作效率、规范业务配置与操作的利器 。
- Salt的核心功能
- 使命令发送到远程系统是并行的而不是串行的
- 使用安全加密的协议
- 使用最小最快的网络载荷,使用ZMQ:消息队列
- 提供简单的编程接口
Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。
1.2saltstack通信机制
1.3.saltstack工作机制
- SaltStack 采用 C/S模式,即master/minion,minion与master通信方式是
ZeroMQ消息队列
,默认监听4505端口。 - minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信
- 下图是SaltStack发布和订阅的结构,每个节点上安装minion端,通过消息队列传输给master;master发布数据时,minion节点都能接收到数据。
- 4506端口做请求响应的,当客户端请求响应后,server通过4506得到反馈
Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口。
Puppet、Chef、Ansible、Salt对比
二.saltstack部署
实验环境:三台虚拟机server1(master端)、server2(minion端)、server3(minion端)。
1.安装和启动
- saltstack是一个配置管理系统,能够维护预定义状态的远程节点。是一个分布式远程执行系统,用来在远程结点上执行命令和查询数据。并行的。
- 运维的核心是降低成本和提高效率
- 准备三个纯净的虚拟机server1,2,3;server1是master,server2,3是minion
- 包括安装、配置、管理
1)准备yum源
[root@server11 yum.repos.d]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm
#阿里云镜像:https://developer.aliyun.com/mirror/saltstack?spm=a2c6h.13651102.0.0.3e221b118vroAq
[root@server11 yum.repos.d]# vim salt-3000.repo #改成阿里云的源http://mirrors.aliyun.com/saltstack
[salt-3000]
name=SaltStack 3000 Release Channel for Python 2 RHEL/Centos $releasever
baseurl=http://mirrors.aliyun.com/saltstack/yum/redhat/7/$basearch/3000
failovermethod=priority
enabled=1
gpgcheck=0
2)master和minion安装包
[root@server11 yum.repos.d]# yum install -y salt-master.noarch
[root@server11 yum.repos.d]# systemctl enable --now salt-master
[root@server12 salt]# yum install -y salt-minion.noarch
[root@server12 ~]# cd /etc/salt/
[root@server12 salt]# ls
[root@server12 salt]# vim minion
改:
master:192.168.100.241 #都要顶格写
[root@server12 salt]# systemctl enable --now salt-minion.service
%server13也弄minion
[root@server13 salt]# yum install -y salt-minion.noarch
[root@server13 ~]# cd /etc/salt/
[root@server13 salt]# ls
[root@server13 salt]# vim minion
改:
master:192.168.100.241 #都要顶格写
[root@server13 salt]# systemctl enable --now salt-minion.service
3)master端执行命令允许minion连接
master端有安全认证,需要同意连接
[root@server11 yum.repos.d]# salt-key -L
Accepted Keys:
server12
server13
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@server11 yum.repos.d]# salt-key -A#a是指定节点,A是指定所有
The following keys are going to be accepted:
Unaccepted Keys:
server12 server13
Proceed? [n/Y] y
Key for minion server12 server13 accepted.
4)master端测试与minion端的连接:
[root@server11 yum.repos.d]# yum install lsof -y
[root@server11 yum.repos.d]# lsof -i :4505
[root@server11 yum.repos.d]# salt '*' test.ping#*是指—L列出来的所有主机,检测一下是否有响应
[root@server11 yum.repos.d]# yum install python-setproctitle.x86_64 -y #安装后重起salt-master
[root@server11 yum.repos.d]# systemctl restart salt-master.service
[root@server12 salt]# pwd
/etc/salt
[root@server12 salt]# ls#在启动一个minion端时会产生一个minion_id文件,来记录主机名
cloud cloud.deploy.d cloud.profiles.d master minion minion_id proxy roster
cloud.conf.d cloud.maps.d cloud.providers.d master.d minion.d pki proxy.d
[root@server12 salt]# cat minion_id #如果要改主机名。则改完主机名后要删掉该文件,重新生成
server12
saltstack的工作原理: 每个文件都有自己的md5sum(md5码)。saltstack通过发布订阅系统,将sls文件推送到远程主机的本地(saltstack有自己的缓存目录/var/cache/salt),在本地执行sls文件。
三.Saltstack一键部署zabbix监控平台
-
上面已经部署好saltstack环境,下面基于saltstack环境部署zabbix监控
-
使用Saltstack部署zabbix,主要包括zabbix-server、zabbix-agent、zabbix-web以及mysql。其中,zabbix的版本使用4.0,使用本地自己搭建的zabbix仓库,加快部署效率。
-
server1 作为saltstack服务器,server2用来做zabbix-server(数据库mariadb), server3用来做zabbix-agent
1)部署zabbix-server
物理机搭建的zabbix仓库
[root@zhenji ~# cd /var/www/html/zabbix
[root@zhenji zabbix]# ls
apache-tomcat-8.5.24.tar.gz
fping-3.10-1.el7.x86_64.rpm
jdk-8u121-linux-x64.rpm
oneitsm_zabbix_release-1.2.0.tar.gz
percona-zabbix-templates-1.1.8-1.noarch.rpm
php-5.4.16-46.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-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.4.1-1.el7.x86_64.rpm
zabbix-get-4.4.1-1.el7.x86_64.rpm
zabbix-java-gateway-4.4.1-1.el7.x86_64.rpm
zabbix-proxy-mysql-4.4.1-1.el7.x86_64.rpm
zabbix-sender-4.4.1-1.el7.x86_64.rpm
zabbix-server-mysql-4.4.1-1.el7.x86_64.rpm
zabbix-web-4.4.1-1.el7.noarch.rpm
zabbix-web-mysql-4.4.1-1.el7.noarch.rpm
[root@foundation8 4.4]# pwd
/mnt/zabbix/4.4
[root@foundation8 4.4]#
[root@server11 ~]# vim /etc/yum.repo.d/zabbix.repo
[zabbix]
name=zabbix
baseurl=http://192.168.100.250/zabbix/
enanled=1
gpgcheck=0
[root@server11 ~]# cd /srv/
[root@server11 salt]# mkdir zabbix-server
[root@server11 zabbix-server]# vim init.sls
zabbix-server:
pkgrepo.managed:
- name: zabbix
- humanname: zabbix 4.0
- baseurl: http://192.168.100.141/zabbix/4.0##真机里先下载好zabbix依赖
- gpgcheck: 0
pkg.installed:
- pkgs:
- zabbix-server-mysql
- zabbix-agent
[root@server11 mysql]# salt server12 state.sls zabbix-server
2)zabbix数据库
配置mysq文件
[root@server11 salt]]# mkdir -p mysql/files
[root@server11 mysql]# cd files/
[root@server11 mysql]# scp server13:/etc/my.cnf .
[root@server11 mysql]# vim files/my.cnf
添加
log-bin=mysql-bin
character-set-server=utf8
[root@server11 mysql]# salt server13 state.sls mysql
[root@server11 mysql]# vim init.sls
mysql-install:
pkg.installed:
- pkgs:
- mariadb-server
- MySQL-python
file.managed:
- name: /etc/my.cnf
- source: salt://mysql/files/my.cnf
service.running:
- name: mariadb
- enable: true
- watch:
- file: mysql-install
mysql-config:
mysql_database.present:
- name: zabbix
mysql_user.present:
- name: zabbix
- host: '%'
- password: "westos"
[root@server11 mysql]# salt server13 state.sls mysql
[root@server12 yum.repos.d]# cd /usr/share/doc/zabbix-server-mysql-4.0.5/
[root@server12 zabbix-server-mysql-4.0.5]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
[root@server12 zabbix-server-mysql-4.0.5]# scp create.sql.gz server11:/srv/salt/mysql/files
[root@server11 mysql]# cd files/
[root@server11 files]# ls
create.sql.gz my.cnf
[root@server11 files]# gunzip create.sql.gz
[root@server11 files]# ls
create.sql my.cnf
[root@server11 mysql]# vim init.sls
[root@server11 mysql]# cat init.sls
mysql-install:
pkg.installed:
- pkgs:
- mariadb-server
- MySQL-python
file.managed:
- name: /etc/my.cnf
- source: salt://mysql/files/my.cnf
service.running:
- name: mariadb
- enable: true
- watch:
- file: mysql-install
##创建数据库、用户、授权、导入数据
mysql-config:
mysql_database.present:
- name: zabbix
mysql_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.sql
cmd.run:
- name: mysql zabbix < /mnt/create.sql && touch /mnt/zabbix.lock
- creates: /mnt/zabbix.lock
[root@server11 mysql]# salt server13 state.sls mysql
3)配置zabbix-server文件
[root@server11 files]# vim /srv/salt/zabbix-server/init.sls
zabbix-server:
pkgrepo.managed:
- name: zabbix
- humanname: zabbix 4.0
- baseurl: http://192.168.100.141/zabbix/4.0
- gpgcheck: 0
pkg.installed:
- pkgs:
- zabbix-server-mysql
- zabbix-agent
- zabbix-web-mysql
file.managed:
- name: /etc/zabbix/zabbix_server.conf
- source: salt://zabbix-server/files/zabbix_server.conf
service.running:
- name: zabbix-server
- enable: true
- watch:
- file: zabbix-server
zabbix-agent:
service.running
[root@server11 files]# cd /srv/salt/zabbix-server/
[root@server11 zabbix-server]# mkdir files
[root@server11 zabbix-server]# cd files/
[root@server11 files]# scp server12:/etc/zabbix/zabbix_server.conf .
[root@server11 files]# vim zabbix_server.conf
#更改:
DBHost=192.168.100.243
DBPassword=westos
[root@server11 files]# salt server12 state.sls zabbix-server
[root@server12 ~]# yum install mariadb.x86_64 -y
[root@server12 conf.d]# cd /etc/httpd/conf.d/
[root@server12 conf.d]# scp zabbix.conf server11:/srv/salt/zabbix-server/files
[root@server11 zabbix-server]# vim files/zabbix.conf
php_value date.timezone Asis/Shanghai
[root@server11 zabbix-server]# vim init.sls
[root@server11 zabbix-server]# cat init.sls
#添加:
zabbix-web:
file.managed:
- name: /etc/httpd/conf.d/zabbix.conf
- source: salt://zabbix-server/files/zabbix.conf
service.running:
- name: httpd
- enable: true
- watch:
- file: zabbix-web
[root@server11 zabbix-server]# salt server12 state.sls zabbix-server
4)网页访问192.168.100.242/zabbix,把初始化做完,然后移到server11中
Database host:192.168.100.243
[root@server12 conf.d]# cd /etc/zabbix/web/
[root@server12 web]# ls
maintenance.inc.php zabbix.conf.php
[root@server12 web]# mv zabbix.conf.php /mnt/
[root@server12 web]# scp /mnt/zabbix.conf.php server11:/src/salt/zabbix-server/files
[root@server11 files]# cd ..
[root@server11 zabbix-server]# vim init.sls
[root@server11 zabbix-server]# cat init.sls
#添加
/etc/zabbix/web/zabbix.conf.php:
file.managed:
- source: salt://zabbix-server/files/zabbix.conf.php
[root@server11 zabbix-server]# salt server12 state.sls zabbix-server
5)高级推
[root@server11 zabbix-server]# vim /srv/salt/top.sls
[root@server11 zabbix-server]# cat /srv/salt/top.sls
base:
'roles:apache':
- match: grain
- apache
- keepalived
- zabbix-server
'roles:nginx':
- match: grain
- nginx
- keepalived
- mysql
[root@server11 zabbix-server]# salt '*' state.highstate
四.该项目相关问题
1.为什么选择zabbix
- 开源:社区支持,模板分享
- 免费:无商业版和社区版之分,无license授权费用
- 全栈级:从上层应用,到操作系统,以及底层硬件都可实现统一监控;支持Agent,WMI,SNMP,IPMI,JMX等监控方式
- 可扩展:用户可自定义监控项、丰富的API接口可被其他平台调用
- 分布式:通过Proxy以支持跨区域、跨地域的分布式监控
- 企业级:每秒可以收集上万个指标,未来的4.0版本在极限的情况下每秒可以收集40万个指标。
- Zabbix的一些特性,也大大提升了系统监控的效率。
2.mysql数据库监控是怎么做的?
- 创建监控用户
- 编写监控脚本,取出需要监控资源的状态值
#!/bin/sh
#Function:check mysql master-slave replication is ok or not ok.
declare -a slave_is
slave_is=($(/usr/local/mysql/bin/mysql -h 127.0.0.1 -umpm -p'mpm' -e "show slave status \G"|grep Running |awk '{print $2}'))
if [ "${slave_is[0]}" = "Yes" -a "${slave_is[1]}" = "Yes" ]
then
echo '2' #代表正常两个yes
else
echo '-1' #代表不正常
fi
执行以上脚本,如果主从复制正常,返回状态0,否则返回状态2。
- Agentd配置文件中声明key
- 重启agentd服务并进行测试,然后到zabbix server上看看能否获取到key的监控值:
- zabbix web端添加监控内容:
1)创建监控项(item)
2)创建触发器
3)查看监控效果:这时可以分别停止和启动主从复制查看具体的监控效果。
3.zabbix监控项怎么定义,如何写数据库的监控监本?
4.ansible和saltstack的区别
zabbix监控数据库、proxy配置及报警
参考:https://blog.csdn.net/qiao_qing/article/details/112828190?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162684899416780264079320%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=162684899416780264079320&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-5-112828190.pc_v2_rank_blog_default&utm_term=zabbix&spm=1018.2226.3001.4450添加链接描述