案例和zabbix(十一)
案例
项目了解
项目部署原则:先核心再扩展,从后向前
了解项目的基本思路:
业务实施
站在数据流转的维度,从前往后梳理
为每台模拟主机上对应IP
运维实施
堆叠
实施的方式
手工部署环境
--了解实际情况和具体操作具体细节
接入层
1、流量入口|四层负载:Keepalived + 双 LVS
用户浏览器通过DNS 域名解析,指向 LVS 集群的虚拟 VIP。
Keepalived 做两台 LVS 主备,一台宕机自动漂移 VIP;LVS 四层转发,把访问请求轮询分给后端两台 Nginx。
反向代理层
2、七层负载:双 Nginx
流量进到 Nginx:
图片、JS、CSS 静态资源,Nginx 本机直接返回用户;
登录、发帖、提交表单这类动态请求,Nginx 反向代理转发到两台 Tomcat 服务器。
应用层
3、双 Tomcat(Discuz、JPress、WordPress 三套站点)
Tomcat 运行网站程序,分 3 条数据链路:
走 Redis 缓存:用户登录信息、热门帖子优先查 Redis,查到数据直接原路返回,不用碰数据库;
走 MyCat+MySQL:缓存没数据,Tomcat 连接MyCat 中间件;MyCat 实现读写分离、分库分表,读分流从库、写落主库,对接下方 3 台 MySQL;
走 NFS 文件存储:用户上传头像、附件,直接存入两台 NFS 共享服务器,两台 Tomcat 共用一套文件。
4、存储备份:Redis(数据缓冲层)、NFS、MySQL、Backup
两台 NFS 依靠rsync定时同步全部文件数据到 Backup 备份机,防止附件丢失;MySQL 由 MyCat 统一代理管理。
运维层
5、底层运维管控:Zabbix、Ansible、Bash,DNS
Zabbix 全集群监控所有服务器(LVS/Nginx/Tomcat/MyCat/MySQL/NFS/Redis)负载、端口异常;
Ansible+Playbook+Bash 脚本:批量部署整套环境、下发配置、自动执行定时备份脚本。
脚本方式部署
-- 自动化
-- 脚本
-- ansible
eg:高可用环境
keepalived主机部署
master基础环境部署
更新软件源
apt update
keepalived 安装
apt install keepalived -y
准备主配置文件
cd /etc/keepalived/
ls
cp keepalived.conf.sample keepalived.conf
定制子配置目录
mkdir conf.d
ls
定制主配置
cat keepalived.conf
global_defs {
router_id LVS_master
}
include /etc/keepalived/conf.d/*.conf
入口 vip 配置 定制专属的入口配置文件
cp keepalived.conf.sample conf.d/vip.yang.com.conf
cat conf.d/vip.yang.com.conf
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.130
}
}
virtual_server 10.0.0.130 80 {
delay_loop 6
lb_algo sh
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 10.0.0.105 80 {
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.0.0.106 80 {
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
重启服务
systemctl restart keepalived
确认效果
hostname -I
backup 环境配置
子配置部署
准备主配置文件
cd /etc/keepalived/
ls
cp keepalived.conf.sample keepalived.conf
定制子配置目录
mkdir conf.d
ls
定制主配置
scp root@10.0.0.125:/etc/keepalived/keepalived.conf ./
cat keepalived.conf
global_defs {
router_id LVS_backup
}
include /etc/keepalived/conf.d/*.conf
入口 vip 配置定制专属的入口配置文件
scp root@10.0.0.125:/etc/keepalived/conf.d/vip.yang.com.conf conf.d/
cat conf.d/vip.yang.com.conf
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.130
}
}
virtual_server 10.0.0.130 80 {
delay_loop 6
lb_algo sh
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 10.0.0.105 80 {
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.0.0.106 80 {
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
重启服务
systemctl restart keepalived
确认效果
hostname -I
验证 vip 飘移 关闭 master 主机的 keepalived
systemctl stop keepalived
hostname -I
确认 backup 主机效果
hostname -I
启动 master 主机的 keepalived
systemctl start keepalived
hostname -I
结果显示: keepalived 基础环境正常
定制专属的入口配置文件
cp keepalived.conf.sample conf.d/vip.yang.com.conf
cat conf.d/vip.yang.com.conf
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.130
}
}
virtual_server 10.0.0.130 80 {
delay_loop 6
lb_algo sh
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 10.0.0.105 80 {
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.0.0.106 80 {
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
重启服务
systemctl restart keepalived
确认效果
hostname -I
zabbix7.0安装和基础管理
安装Zabbix Server包
访问链接:https://www.zabbix.com/download找到仓库的源
#Ubuntu24.04安装Zabbix7.0
https://www.zabbix.com/cn/download?
zabbix=7.0&os_distribution=ubuntu&os_version=24.04&components=server_frontend_ag
ent&db=mysql&ws=apache
在ubuntu24.04安装Zabbix Server 7.0
官网下载
#wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-
release_latest_7.0+ubuntu24.04_all.deb
镜像加速
sed -i
's#https://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#'
/etc/apt/sources.list.d/*
apt update
安装包
apt -y install zabbix-server-mysql zabbix-frontend-php
zabbix-apache-conf zabbix-agent zabbix-get
安装MySQL
apt -y install mysql-server
开放端口
vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address=0.0.0.0
重启
systemctl restart mysql.service
准备数据库和用户
mysql -uroot
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
初始化数据库的表
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456 zabbix
修改Zabbix Server 连接MySQL
vim /etc/zabbix/zabbix_server.conf
DBPassword=123456
修改PHP配置
vim /etc/zabbix/apache.conf
php_value date.timezone Asia/Shanghai
systemctl restart zabbix-server zabbix-agent apache2
systemctl is-active zabbix-server zabbix-agent apache2
active
active
active
systemctl enable zabbix-server zabbix-agent apache2
安装中文包
apt -y install language-pack-zh-hans
浏览器访问
#浏览器访问
http://server_ip_or_name/zabbix
准备数据库和数据表
安装MySQL并开机自启
apt -y install mysql-server
systemctl enable --now mysql
登录MySQL
mysql -uroot -p
Enter password:
创建zabbix数据库、本地账号并授权
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
MySQL与Zabbix服务端分离时,创建远程账号(网段10.0.0.%)
mysql> create user zabbix@'%' identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@'10.0.0.%';
导入zabbix初始化数据表
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456 zabbix
验证表是否导入成功
mysql -uzabbix -p123456 zabbix -e 'show tables;'
修改zabbix的配置文件
编辑zabbix服务端配置
vim /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=123456
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
启动并设置开机自启全套服务
systemctl enable --now zabbix-server zabbix-agent httpd php-fpm
查看监听端口验证服务
ss -ntl
访问Zabbix的Web管理页面完成配置向导
基于Apache
http://server_ip_or_name/zabbix
zabbix核心管理
触发器:表达式判定指标异常,生成告警
滞后:持续故障才告警,过滤瞬时抖动
触发器依赖:底层故障屏蔽上层业务告警
模板:批量复用告警规则
CPU 告警案例
Web 创建触发器 配置→模板→Linux 模板→触发器→创建 表达式:{Linux by Zabbix agent:system.cpu.util[,idle].last()}<10 滞后 5m,启用保存
压测模拟故障
apt install stress -y
stress --cpu 4 --timeout 600
校验采集数据
zabbix_get -s 192.168.1.30 -k system.cpu.util[,idle]
配置依赖抑制告警风暴 新建主机离线触发器{Linux by Zabbix agent:agent.ping.last()}=0,CPU 触发器绑定该依赖,主机断连后仅显示主机故障。
排错命令
tail -f /var/log/zabbix/zabbix_agent2.log
tail -f /var/log/zabbix/zabbix_server.log | grep trigger
超限无告警:触发器未启用、表达式错误
所有触发器统一滞后 3~5 分钟,核心主机配置主机离线依赖
触发器判定故障,滞后防抖,依赖抑制告警风暴,模板批量统一管控。
模板图形:模板内创建多指标曲线,绑定模板的主机自动继承,无需单台重复配置。
仪表盘:全局总览大屏、模板专属业务大屏,快速查看故障与负载。
用户 & 角色管理:区分开发只读、运维全操作账号,按业务分组隔离主机权限。
案例
模板自定义图形
配置→模板→图形→创建图形,添加 CPU、内存两项监控指标,保存后所有关联主机自动生成趋势图。
模板仪表盘
模板内新建仪表盘组件,添加主机故障、内存使用率图表,业务主机自动展示专属监控面板。
只读开发账号配置
管理→角色→新建只读角色,仅开放查看权限;创建用户归属只读组,仅分配测试机房主机访问权限。
排错命令
systemctl restart apache2 php-fpm
tail -f /var/log/apache2/error.log
问题:开发看不到主机 → 用户组未分配对应主机分组权限 问题:
仪表盘无数据 → 模板未正确关联主机
业务统一使用模板图形,禁止单主机单独创建图表 开发账号统一分配只读角色,禁止修改监控配置 核心业务配置独立模板仪表盘,便于故障快速定位
邮件:依托邮箱 SMTP 服务发送故障通知,QQ/163 需授权码登录。
企业微信:自定义脚本调用企业微信 API 推送消息。
- 邮箱开启 POP3/SMTP,获取 16 位授权码;
- Zabbix 媒介类型新建 Email,参数:smtp.qq.com:465 SSL;
- 用户绑定收件邮箱,触发器动作配置故障、恢复消息模板。
微信
mkdir -p /usr/lib/zabbix/alertscripts
vim /usr/lib/zabbix/alertscripts/wechat.sh
#!/bin/bash
CorpID="ww644a0d95807e476b"
Secret="cGp4gHUpHLL1KQZY5abM3panGp-uCrEZyrgDvOT0OZA"
agentid=1000003
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpID&corpsecret=$Secret"
Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}'|awk -F\" '{print $2}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token"
function body(){
local userid=$1
local subject=$2
local msg=$(echo "$@" | cut -d" " -f3-)
printf '{\n'
printf '\t"touser": "'"$userid"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'"$agentid"\"",\n'
printf '\t"text": {\n'
printf '\t\t"content": "'"$subject\n\n$msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $*)" $PURL
chmod +x /usr/lib/zabbix/alertscripts/wechat.sh
chown zabbix:zabbix /usr/lib/zabbix/alertscripts/wechat.sh
邮件
mkdir -p /usr/lib/zabbix/alertscripts
vim /usr/lib/zabbix/alertscripts/send_email.sh
#!/bin/bash
email_send='lbtooth@163.com'
email_passwd='xxxxxxxxxxxxx'
email_smtp_server='smtp.163.com'
. /etc/os-release
msg_error() {
echo -e "\033[1;31m$1\033[0m"
}
msg_info() {
echo -e "\033[1;32m$1\033[0m"
}
msg_warn() {
echo -e "\033[1;33m$1\033[0m"
}
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
install_sendemail () {
if [[ $ID =~ rhel|centos|rocky ]];then
rpm -q sendemail &> /dev/null || yum install -y sendemail
elif [ $ID = 'ubuntu' ];then
dpkg -l |grep -q sendemail || { apt update && apt install -y libio-socket-ssl-perl libnet-ssleay-perl sendemail ; }
else
color "不支持此操作系统,退出!" 1
exit
fi
}
send_email () {
local email_receive="$1"
local email_subject="$2"
local email_message="$3"
sendemail -f $email_send -t $email_receive -u $email_subject -m $email_message -s $email_smtp_server -o message-charset=utf-8 -o tls=yes -xu $email_send -xp $email_passwd -o message-content-type=html
[ $? -eq 0 ] && color "邮件发送成功!" 0 || color "邮件发送失败!" 1
}
if [ $# -ne 3 ];then
color "脚本参数不正确!" 1
msg_info "Usage: `basename $0` <mail_address> <subject> <message>"
exit 1
fi
install_sendemail
send_email "$1" "$2" "$3"
chmod +x /usr/lib/zabbix/alertscripts/send_email.sh
chown zabbix:zabbix /usr/lib/zabbix/alertscripts/send_email.sh
媒介类型选脚本,脚本名send_email.sh,入参顺序:收件邮箱、告警标题、告警内容。
本地测试发送
bash /usr/lib/zabbix/alertscripts/send_email.sh test@shturl. "CPU高负载告警" "服务器192.168.1.30 CPU使用率95%"
主动模式和被动模式
Zabbix 的主动和被动模式
从Agent角度相对于Zabbix Server来看:
主动模式:Agent 主动向 Zabbix Server 发送指标,Zabbix Server 性能更好,推 push
被动模式:Zabbix Server 主动向 Agent 请求指标,默认,拉数据 pull
更多推荐
所有评论(0)