米狗

  • kubernets
  • docker
  • AWS
  • linux
  • nginx
Kratos
  1. 首页
  2. 监控
  3. zabbix
  4. 正文

Zabbix 4快速升级Zabbix 5.4

2021年7月16日 1113点热度 2人点赞 0条评论

最近看docker相关文章,考虑到原有zabbix使用的是zabbix 4.5版本,想着就将zabbix 4.5升级到5.4。原有zabbix是采用rpm安装在linux服务器,本次采用docker进行快速升级。

1、安装docker环境

yum -y install docker-ce docker-ce-cli containerd.io

2、修改docker文件以便可以加速docker下载。

vi /etc/docker/daemon.json

{
"registry-mirrors": ["https://tsfugp9u.mirror.aliyuncs.com"]
}

重启服务生效

systemctl daemon-reload

systemctl restart docker

3、拉取zabbix相关镜像,由于mysql采用原来的mysql,本次就不拉取mysql的镜像。

docker pull zabbix/zabbix-server-mysql:alpine-5.4-latest

docker pull zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest

docker pull zabbix/zabbix-java-gateway:alpine-5.4-latest

运行一下命令可以看到镜像都已经拉取到本地。

[root@zabbix ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
zabbix/zabbix-java-gateway alpine-5.4-latest 2552b7f42e42 2 weeks ago 84.4MB
zabbix/zabbix-web-nginx-mysql alpine-5.4-latest c75fcde05a14 4 weeks ago 166MB
zabbix/zabbix-server-mysql alpine-5.4-latest 856abc12b012 4 weeks ago 69MB

4、由于zabbix新版本支持时间高精度存储,需要对原有数据执行更新,脚本如下:

ALTER TABLE trends MODIFY value_min DOUBLE PRECISION DEFAULT '0.0000' NOT NULL, MODIFY value_avg DOUBLE PRECISION DEFAULT '0.0000' NOT NULL, MODIFY value_max DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;

ALTER TABLE history MODIFY value DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;

附上官方zabbix使用docker安装文档,包括不同数据库的方式,其中以下部分参考。

https://www.zabbix.com/documentation/current/manual/installation/containers

5、创建docker使用的网络

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

6、启动zabbix服务端

启动zabbix服务端,具体命令如下,其中DB服务器地址修改成了当前主机的IP地址。

docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="172.17.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="22222" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--env=”ZBX_VMWARECACHESIZE=128M“ \
--env="ZBX_VALUECACHESIZE=2048M" \
--env="ZBX_CACHESIZE=4096M" \
--env="ZBX_HISTORYCACHESIZE=256M" \
-v /usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-5.4-latest

刚开始启动过程中遇到内存分配的问题,通过多次查询资料在启动docker镜像的时候设置zabbix cachesize值,实际未从zabbix_server.conf继承文件,报错信息如下:

后将内存配置文件增加上去启动正常启动,具体zabbix相关的docker参数可以参考官方链接。

zabbix/zabbix-server-mysql - Docker Image | Docker Hub

启动过程中,可以看到zabbix数据库进行架构升级。

同时我们也会看到zabbxi有报错信息,具体为query failed,经过排查是因为zabbix用户无数据库权限,进行赋权进行修复。

grant all privileges on *.* to zabbix@'%';

flush privileges

7、启动zabbix 前端,数据库服务器地址修改为原有数据库地址
docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="172.17.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="2222@0!9" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest

8、启动zabbix javagateway,实际其实未用到这块,根据实际情况启动。

docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-5.4-latest

9、以上启动完成可以通过docker ps -a 查看docker运行状态。

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6243c6487f40 zabbix/zabbix-server-mysql:alpine-5.4-latest "/sbin/tini -- /usr/…" 2 days ago Up 12 hours 0.0.0.0:10051->10051/tcp zabbix-server-mysql
8df408791da4 zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest "docker-entrypoint.sh" 2 days ago Up 2 days 8443/tcp, 0.0.0.0:80->8080/tcp zabbix-web-nginx-mysql
ac11c4ad1bfc zabbix/zabbix-java-gateway:alpine-5.4-latest "docker-entrypoint.s…" 2 days ago Up 2 days 10052/tcp zabbix-java-gateway

至此,完成zabbix的升级,可以通过原有连接打开zabbix界面。

10、其他解决问题

无法执行python脚本

由于原有告警通过python发送到钉钉群进行告警,升级有docker镜像无法执行python脚本,通过网上查询,改成shell脚本进行。

shell脚本内容如下:

#!/bin/bash
to=$1
subject=$2
text=$3
curl 'https://oapi.dingtalk.com/robot/send?access_token=d09356cabc8fde0cb5886ce3db765c799556f1d8e9aee56910640bda02e35e53' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "'"$text"'"
},
"at":{
"atMobiles": [ "'"$1"'" ],
"isAtAll": false
}
}'

修改完成后,修改zabbix中告警命令,我这里是用的send.sh,做完以上操作发现执行命令时提示无法执行curl命令,没办法得继续解决,需要在docker上安装curl命令。

登陆docker中执行curl安装。

docker exec -it 6243c6487f40 /bin/bash

执行以下命令,但是提示无权限。

bash-5.1$ apk add curl
ERROR: Unable to lock database: Permission denied
ERROR: Failed to open apk database: Permission denied

继续查找问题所在,由于docker权限过低无法执行以上命令,需要运行以下命令进行。

[root@zabbix ~]# docker exec -it --user=root 6243c6487f40 /bin/bash
bash-5.1# apk add curl
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
(1/1) Installing curl (7.77.0-r1)
Executing busybox-1.32.1-r6.trigger
OK: 61 MiB in 50 packages
bash-5.1# curl
curl: try 'curl --help' or 'curl --manual' for more information

至此解决了curl安装,告警也可以正常发送。

但是以上只是临时解决了此问题,若将docker删除后重新启动新的docker依然无curl命令,可以考虑将docker镜像导出在导入的方式进行。

导出images

docker export 19a9ce28b4b3 > /tmp/zabbix.tar

导入images,以下都可以

cat /tmp/nginx.tar | docker import  - zabbix/zabbix-server-curl

docker import - test/nginx_1 /tmp/nginx.tar

标签: 暂无
最后更新:2021年7月16日

duhongjun

这个人很懒,什么都没留下

点赞
下一篇 >

文章评论

您需要 登录 之后才可以评论

归档

  • 2024 年 10 月
  • 2024 年 4 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2024 年 1 月
  • 2023 年 11 月
  • 2023 年 4 月
  • 2023 年 2 月
  • 2023 年 1 月
  • 2022 年 11 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 8 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 8 月
  • 2021 年 7 月
  • 2021 年 6 月
  • 2021 年 2 月
  • 2020 年 1 月
  • 2019 年 12 月
  • 2019 年 11 月
  • 2019 年 10 月
  • 2019 年 9 月
  • 2019 年 8 月

分类目录

  • AWS
  • docker
  • elasticsearch
  • Jenkins
  • kubernets
  • linux
  • mysql
  • nginx
  • Oracle
  • php
  • redis
  • zabbix
  • 个人
  • 中间件
  • 公有云
  • 大数据
  • 安全工具
  • 微软
  • 操作系统
  • 数据库
  • 未分类
  • 监控
  • 科技
  • 网络技术
  • 资讯
  • 阿里云

COPYRIGHT © 2024 米狗. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

沪ICP备2021019346号-1