负载均衡深度实践:基于Nginx+Keepalived的高可用方案与Zabbix监控设计
目录
综合实践-部署负载均衡
1 环境准备
2 zabbix监控nginx和keeplive
2.1 nginx安装
2.2 安装keepalived
2.3 部署vue
2.4 安装agent
2.5 zabbix监控nginx配置
2.6 zabbix监控keeplived
3 zabbix监控jar
3.1 安装agent
3.2 安装jdk
3.3 部署jar包
3.4 配置web
4 zabbix 监控mysql
4.1 部署agent
4.2 安装mysql
4.3 zabbix监控mysql配置
综合实践-部署负载均衡
1 环境准备
类型 | ip | os | hostname |
zabbix-server | 10.1.1.12 | docker | zbx-server4G 100G |
nginx1 | 10.1.1.22 | centos7 | zabbix-agent 1G 1cpu 20G |
nginx2 | 10.1.1.33 | centos7 | zabbix-agent 1G 1cpu 20G |
web1 | 10.1.1.44 | centos7 | zabbix-agent 1G 1cpu 20G |
web2 | 10.1.1.11 | centos7 | zabbix-agent 1G 1cpu 20G |
mysql | 10.1.1.7 | centos7 | zabbix-agent 1G 1cpu 20G |
2 zabbix监控nginx和keeplive
2.1 nginx安装
配置yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
安装
yum install -y nginx --enablerepo=nginx-stable
测试
rpm -qa | grep nginx
2.2 安装keepalived
yum install keepalived –y
测试
rpm -qa | grep keepalived
配置
vim /etc/keepalived/keepalived.conf
完成高可用配置(主从配置)
global_defs {
router_id nginx_master # 唯一标识(自定义)
}
# 定义健康检查脚本(检测 Nginx 是否存活)
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx" # 通过检查 Nginx 进程是否存在
interval 2 # 每 2 秒检查一次
weight 2 # 优先级增减值(失败时降权)
}
vrrp_instance VI_1 {
state MASTER # 主节点
interface ens33 # 绑定网卡(需根据实际网卡名修改,如 ens160)
virtual_router_id 51 # 虚拟路由 ID(主备节点必须相同,范围 0-255)
priority 90 # 优先级(主节点 > 备节点)
advert_int 1 # 主备节点通信间隔(秒)
# 认证配置(主备节点必须一致)
authentication {
auth_type PASS
auth_pass 1111 # 密码(自定义)
}
# 虚拟 IP(VIP),客户端通过该 IP 访问服务
virtual_ipaddress {
10.1.1.6/24 # 格式:IP/子网掩码
}
# 绑定健康检查脚本
track_script {
chk_nginx
}
}
备机
global_defs {
router_id nginx_master
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 10
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.6/24
}
track_script {
chk_nginx
}
}
启动
nginx -t
systemctl start nginx
systemctl enable nginx
systemctl start keepalived.service
systemctl enable keepalived.service
测试
2.3 部署vue
vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost; # 替换为实际域名或IP
# 托管 Vue 前端
root /var/www/vue-app;
index index.html;
# 处理 Vue Router 的 history 模式
location / {
try_files $uri $uri/ /index.html;
}
# 代理后端 API 请求
location /api/ {
proxy_pass http://backend_cluster/; # 指向后端集群
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 静态资源缓存
location /static/ {
expires 365d;
add_header Cache-Control "public";
}
}
# 后端服务集群负载均衡
upstream backend_cluster {
# 配置负载均衡策略(如轮询、IP哈希)
least_conn;
server 10.1.1.44:8011; # 后端实例1
server 10.1.1.11:8011; # 后端实例2
keepalive 32; # 保持长连接
}
2.4 安装agent
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.2/rhel/7/x86_64/zabbix-agent-5.2.6-1.el7.x86_64.rpm
配置
vim /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.1.1.12
ServerActive=127.0.0.1
Hostname=zabbix-nginx-1
Include=/etc/zabbix/zabbix_agentd.d/*.conf
启动
systemctl start zabbix-agent && systemctl enable zabbix-agent
测试
2.5 zabbix监控nginx配置
启用 stub_status 模块
修改 Nginx 配置文件(如 /etc/nginx/conf.d/default.conf 或站点配置文件)
server {
listen 80;
server_name localhost;
# 启用状态监控接口
location /nginx_status {
stub_status on;
access_log off;
allow 10.1.1.12; # 允许本地访问(Zabbix Agent 所在 IP)
deny all; # 禁止其他 IP 访问
}
}
重启 Nginx 服务
systemctl restart nginx
验证状态接口
使用 curl 检查状态接口是否生效:
curl http://127.0.0.1/nginx_status
输出结果:
Active connections: 3
server accepts handled requests
100 100 200
Reading: 0 Writing: 1 Waiting: 2
配置web端
设置宏
配置主机
测试
2.6 zabbix监控keeplived
创建监控项脚本
vi /etc/zabbix/zabbix_agentd.d/keepalived.conf
UserParameter=keepalived.process,ps aux | grep -v grep | grep -c keepalived
web端配置
创建主机Template Keepalive
创建应用集
创建监控项
创建触发器
报警表达式
{Template Keepalived:keepalived.process.last()}<1
恢复表达式
{Template Keepalived:keepalived.process.last()}>=1
绑定主机
测试
另外一条nginx同样这样安装
3 zabbix监控jar
3.1 安装agent
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.2/rhel/7/x86_64/zabbix-agent-5.2.6-1.el7.x86_64.rpm
配置
vim /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.1.1.12
ServerActive=127.0.0.1
Hostname=zabbix-nginx-2
Include=/etc/zabbix/zabbix_agentd.d/*.conf
启动
systemctl start zabbix-agent && systemctl enable zabbix-agent
3.2 安装jdk
检查是否安装java
java -vesion
卸载以前的包
# 查询已安装的 JDK 包
rpm -qa | grep 'java\|jdk\|gcj\|jre'
# 卸载指定包(替换为实际查询结果)
yum -y remove java-1.7.0-openjdk*
安装jdk
sudo yum install java-1.8.0-openjdk-devel
查看安装路径
ls /usr/lib/jvm
配置环境变量
sudo vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk #填写自己的jdk路径
export PATH=$JAVA_HOME/bin:$PATH
环境生效
source /etc/profile
3.3 部署jar包
上传jar
anzhidian-1.0-SNAPSHOT.jar
运行jar 添加zabbix监控
//开jmx
nohup java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=50999 \
-Dcom.sun.management.jmxremote.rmi.port=50999 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=10.1.1.22 \
-jar anzhidian-1.0-SNAPSHOT.jar > ./anzhidian.log 2>&1 &
//命令没有开启jmx
nohup java -jar anzhidian-1.0-SNAPSHOT.jar > ./anzhidian.log 2>&1 &
测试一:
通过网盘分享的文件:张家界学院
链接: https://pan.baidu.com/s/1fnXA14o2jb_wTNFqxlN_cw?pwd=nahj 提取码: nahj
使用:cmdline-jmxclient-0.10.3.jar 测试
java -jar cmdline-jmxclient-0.10.3.jar - 192.168.157.152:50999 java.lang:type=Memory NonHeapMemoryUsage
测试结果
3.4 配置web
另外一台同样部署
4 zabbix 监控mysql
4.1 部署agent
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.2/rhel/7/x86_64/zabbix-agent-5.2.6-1.el7.x86_64.rpm
配置
vi /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.1.1.12
ServerActive=127.0.0.1
Hostname=zabbix-nginx-1
Include=/etc/zabbix/zabbix_agentd.d/*.conf
启动
systemctl start zabbix-agent && systemctl enable zabbix-agent
4.2 安装mysql
卸载旧版本
# 查看已安装的 MariaDB/MySQL 包
sudo rpm -qa | grep mariadb
sudo rpm -qa | grep mysql
# 卸载相关包(根据实际查询结果替换包名)
sudo yum remove mariadb-libs-* mysql-*
添加 MySQL 8.0 Yum 仓库
sudo yum install -y wget
wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
安装仓库 RPM 包:
sudo rpm -ivh mysql80-community-release-el7-6.noarch.rpm
验证仓库是否添加成功:
yum repolist enabled | grep "mysql.*-community.*"
安装 MySQL 服务:
导入GPG密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
安装
sudo yum install -y mysql-community-server
出现异常
获取 GPG 密钥失败:[Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022"
禁用秘钥
sudo yum install mysql-community-server --nogpgcheck
用后再次安装
sudo yum install -y mysql-community-server
验证版本
mysqld --version
启动 MySQL 服务
sudo systemctl start mysqld # 启动服务
sudo systemctl enable mysqld # 设置开机自启
sudo systemctl status mysqld # 检查服务状态
获取临时 root 密码
sudo grep 'temporary password' /var/log/mysqld.log
dd3+kve,u(sC
运行安全配置向导
sudo mysql_secure_installation
新密码:Passw@rd123
配置远程访问(可选)
CREATE USER 'root'@'%' IDENTIFIED BY 'Passw@rd123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
修改配置文件(可选)
编辑 MySQL 配置文件 /etc/my.cnf,按需调整参数(如字符集、最大连接数):
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-authentication-plugin=mysql_native_password # 兼容旧版认证方式
max_connections=1000
重启
sudo systemctl restart mysqld
4.3 zabbix监控mysql配置
创建 Zabbix 监控用户
CREATE USER 'zabbix'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'Zabbix@123';
GRANT SELECT, PROCESS, REPLICATION CLIENT, SHOW DATABASES ON *.* TO 'zabbix'@'%';
FLUSH PRIVILEGES;
注意:MySQL 8.0 默认使用 caching_sha2_password,若 Zabbix Agent 不支持此插件,可改用 mysql_native_password
配置 Zabbix Agent
下载官方 MySQL 模板:Template DB MySQL。
sudo vim /etc/zabbix/zabbix_agentd.d/template_mysql.conf
创建 MySQL 专用配置文件:
UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH + INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
新建目录/var/lib/zabbix
mkdir /var/lib/zabbix
新建.my.cnf
vi .my.cnf
[client]
user='zabbix'
password='Zabbix@123'
重启
sudo systemctl restart zabbix-agent
检查
zabbix_get -s 127.0.0.1 -k "mysql.version" 版本
zabbix_get -s 127.0.0.1 -k "mysql.status[Threads_connected]" 链接数
zabbix web 配置
配置模版
设置宏
主机配置
测试
配置完成