Docker 容器化部署zabbix server和web server

Use docker containerization to deploy zabbix server and web server.

1 前言

Zabbix 功能强大、应用广泛,但部署、维护、升级一直是很繁琐的事情,不仅是zabbix组件多,依赖也很多;
在这里插入图片描述
现在容器化部署广泛应用,可以大大优化部署架构和提升维护效率,把部署复杂和维护量大的server和前端使用容器部署,与数据库、proxy、agent分离,维护和升级互不影响。
在这里插入图片描述
当server和前端出现漏洞、需要升级时,变更docker容器即可。

2 如何做(How)

  1. 物理主机环境部署数据库(本文使用 mysql 5.7.31),创建数据库和用户;
  2. 容器部署zabbix server和前端(web server);在 docker hub中找到server和前端镜像(zabbix/zabbix-server-mysql)和(zabbix/zabbix-web-nginx-mysql),zabbix版本:6.4.4。
    在这里插入图片描述
    在这里插入图片描述
  3. 在需要采集数据的节点部署proxy和agent,proxy按需要部署。

3 部署细节(Do)

3.1 数据库部署和配置

数据库部署参考:安装和部署mysql,安装完成后创建zabbix数据库和用户,并授权;

create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@'%' identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@'%';
flush privileges;

3.2 部署zabbix server

使用基于centos 的zabbix 6.4.4 版本镜像,拉取zabbix-server-mysql镜像;

[root@lx-sywu ~]# docker pull zabbix/zabbix-server-mysql:centos-6.4.4
centos-6.4.4: Pulling from zabbix/zabbix-server-mysql
4ddc186d6578: Already exists 
baab6923c8da: Pull complete 
54ac192de6a0: Pull complete 
cc799623e812: Pull complete 
284d3a354f54: Pull complete 
e3c35d5594aa: Pull complete 
8ac0e0a7a67f: Pull complete 
4f4fb700ef54: Pull complete 
8c0dd113966f: Pull complete 
Digest: sha256:4cb5ce39d418c99560d87fe5230db3a969f65cf72d9d2759fae97b6777be2c78
Status: Downloaded newer image for zabbix/zabbix-server-mysql:centos-6.4.4

创建容器;

docker create --name zabbix-server-mysql -t \
	-e DB_SERVER_HOST="192.168.2.6" \
	-e MYSQL_DATABASE="zabbix" \
	-e MYSQL_USER="zabbix" \
	-e MYSQL_PASSWORD="zabbix" \
	-e ZBX_DBTLSCONNECT="required" \
	-e ZBX_LISTENPORT="19051" \
	-e ZBX_LISTENIP=192.168.1.20 \
	-e ZBX_ALLOWUNSUPPORTEDDBVERSIONS=1 \
	-p 19051:19051 \
	--restart unless-stopped \
	--net=host \
	--privileged \
    zabbix/zabbix-server-mysql:centos-6.4.4
参数名描述
DB_SERVER_HOST数据库服务器地址
MYSQL_DATABASE数据库名
MYSQL_USER数据库用户名
MYSQL_PASSWORD数据库密码
ZBX_LISTENPORTzabbix server监听端口
ZBX_LISTENIPzabbix server监听地址,docker容器宿主机地址
ZBX_ALLOWUNSUPPORTEDDBVERSIONS由于zabbix 6.0开始最低支持mysql 8.0版本,我用了5.7.31版本不在支持范围,需要设置该参数

更多参数参考docker hub上的说明。

由于容器运行会连接数据库检查数据表是否存在,存在则跳过,不存在则自动创建,可能会出现很多异常,容器会停止,再重启又执行相同的操作,非常耗时;我建议创建容器,但先不要运行,从容器中拷贝出创建数据表和数据的脚本手工执行,遇到异常及时解决。 创建数据表和数据的脚本放在/usr/share/doc/zabbix-server-mysql目录下,从容器中拷贝出来,手工在数据库执行脚本;

[root@lx-sywu tmp]# docker cp zabbix-server-mysql:/usr/share/doc/zabbix-server-mysql /tmp
[root@lx-sywu zabbix-server-mysql]# ll /tmp/zabbix-server-mysql/
total 3760
-rw-r--r--. 1 root root 3847548 Jun 27 20:32 create.sql.gz

zcat /tmp/zabbix-server-mysql/create.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix -h 192.168.2.6

数据库执行完脚本,可以查询users表是否有数据来验证;

MySQL [zabbix]> select * from zabbix.users;
+--------+----------+--------+---------------+--------------------------------------------------------------+-----+-----------+------------+---------+---------+---------+----------------+------------+---------------+---------------+----------+--------+-----------------+----------------+
| userid | username | name   | surname       | passwd                                                       | url | autologin | autologout | lang    | refresh | theme   | attempt_failed | attempt_ip | attempt_clock | rows_per_page | timezone | roleid | userdirectoryid | ts_provisioned |
+--------+----------+--------+---------------+--------------------------------------------------------------+-----+-----------+------------+---------+---------+---------+----------------+------------+---------------+---------------+----------+--------+-----------------+----------------+
|      1 | Admin    | Zabbix | Administrator | $2y$10$92nDno4n0Zm7Ej7Jfsz8WukBfgSS/U0QkIuu8WkJPihXBb2A1UrEK |     |         1 | 0          | default | 30s     | default |              0 |            |             0 |            50 | default  |      3 |            NULL |              0 |
|      2 | guest    |        |               | $2y$10$89otZrRNmde97rIyzclecuk6LwKAsHN0BcvoOKGjbT.BwMBfm7G06 |     |         0 | 15m        | default | 30s     | default |              0 |            |             0 |            50 | default  |      4 |            NULL |              0 |
+--------+----------+--------+---------------+--------------------------------------------------------------+-----+-----------+------------+---------+---------+---------+----------------+------------+---------------+---------------+----------+--------+-----------------+----------------+
2 rows in set (0.00 sec)

最后再启动容器;

docker start  zabbix-web-nginx-mysql

** Preparing Zabbix server
** Preparing database
** Using MYSQL_USER variable from ENV
** Using MYSQL_PASSWORD variable from ENV
********************
* DB_SERVER_HOST: 192.168.2.6
* DB_SERVER_PORT: 3306
* DB_SERVER_DBNAME: zabbix
********************
** Database 'zabbix' already exists. Please be careful with database COLLATE!
** Table 'zabbix.dbversion' already exists.
** Preparing Zabbix server configuration file
** Updating '/etc/zabbix/zabbix_server.conf' parameter "ListenIP": '192.168.1.20'...added
** Updating '/etc/zabbix/zabbix_server.conf' parameter "ListenPort": '19051'...added
** Updating '/etc/zabbix/zabbix_server.conf' parameter "ListenBacklog": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "SourceIP": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "LogType": 'console'...added
** Updating '/etc/zabbix/zabbix_server.conf' parameter "LogFile": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "LogFileSize": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "PidFile": ''...removed

3.3 部署zabbix web

使用基于centos 的zabbix 6.4.4 版本镜像,拉取zabbix-web-nginx-mysql镜像;

[root@lx-sywu ~]# docker pull zabbix/zabbix-web-nginx-mysql:centos-6.4.4
centos-6.4.4: Pulling from zabbix/zabbix-web-nginx-mysql
4ddc186d6578: Pulling fs layer 
4ddc186d6578: Pull complete 
6116e8f9d9ab: Pull complete 
f98f6ca931f7: Pull complete 
fa40cd37a151: Pull complete 
4f4fb700ef54: Pull complete 
3321fe706fcb: Pull complete 
Digest: sha256:d4c07f91f5b1c7b70416be94895fcd8c1b6967062cbbc6699f475ca7d850acab
Status: Downloaded newer image for zabbix/zabbix-web-nginx-mysql:centos-6.4.4

[overview](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql)

创建容器;

docker run --name zabbix-web-nginx-mysql -t \
	-e ZBX_SERVER_HOST="192.168.1.20" \
	-e ZBX_SERVER_PORT="19051" \
	-e DB_SERVER_HOST="192.168.2.6" \
	-e MYSQL_DATABASE="zabbix" \
	-e MYSQL_USER="zabbix" \
	-e MYSQL_PASSWORD="zabbix" \
	-e ZBX_DBTLSCONNECT="required" \
	--net=host \
	-p 19080:19080 \
	--restart unless-stopped \
	--privileged \
	-d zabbix/zabbix-web-nginx-mysql:centos-6.4.4
参数名描述
ZBX_SERVER_HOSTzabbix server服务器地址
ZBX_SERVER_PORTzabbix server端口
DB_SERVER_HOST数据库服务器地址
MYSQL_DATABASE数据库名
MYSQL_USER数据库用户名
MYSQL_PASSWORD数据库密码

更多参数参考docker hub上的说明。这个前端监听端口默认是8080,没有参数配置,需要进入容器后手工修改为自定义的端口

docker exec -ti zabbix-web-nginx-mysql /bin/bash

vi /etc/zabbix/nginx.conf 
   listen 19080;
   listen [::]:19080;

到此,zabbix server和web server都部署完成了;

[root@lx-sywu ~]# docker container ls -a
CONTAINER ID        IMAGE                                        COMMAND                  CREATED             STATUS                     PORTS                                                NAMES
d707b8517c68        zabbix/zabbix-web-nginx-mysql:centos-6.4.4   "docker-entrypoint.sh"   About an hour ago   Up About an hour                                                                zabbix-web-nginx-mysql
ae453f33177a        zabbix/zabbix-server-mysql:centos-6.4.4      "/usr/bin/tini -- /u…"   About an hour ago   Up About an hour                                                                zabbix-server-mysql

打开zabbix web。
在这里插入图片描述
在采集数据的节点部署proxy和agent与常规部署相同,参考zabbix agent和zabbix proxy安装文档,此处省略。

4 总结

容器化部署zabbix server和web server需要使用(zabbix-server-mysql)和(zabbix-web-nginx-mysql)镜像,根据需要选择版本,可以在不同的物理机上的docker分别部署这两个镜像,也可以在同一个主机上的docker部署这两个镜像;容器化部署简化了很多工作,也提升了日后管理和维护(漏洞修复、版本升级)效率,最大化的减少了对操作系统和用户的影响。

5 参考资料

https://hub.docker.com/r/zabbix - zabbix in docker hub
https://www.zabbix.com/documentation/6.4/en/manual/concepts/agent - zabbix agent install
https://www.zabbix.com/documentation/6.4/en/manual/concepts/proxy - zabbix proxy install

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值