当前位置: 首页 > news >正文

负载均衡深度实践:基于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 配置

配置模版

设置宏

主机配置

测试

配置完成

相关文章:

  • archlinux wine 运行windows程序
  • Python学习笔记(第三部分)
  • 人工智能对未来工作的影响
  • 三生原理的离散生成逻辑如何与复分析结合?
  • Python字典(dict)详解:从创建到操作全掌握
  • 产品设计三板斧与抓住事物本质的关键意义
  • 前端面试每日三题 - Day 21
  • 三元运算符与扩展运算符
  • 正则表达式:精准匹配,高效处理文本
  • (C题|社交媒体平台用户分析问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合
  • jupyterlab建议安装的两个插件
  • 《软件设计师》复习笔记(11.1)——生命周期、CMM、开发模型
  • react学习笔记3——基于React脚手架
  • 数字智慧方案6166丨智慧医养结合大数据平台方案(50页PPT)(文末有下载方式)
  • yum源配置文件CentOS-Base.repo完整内容
  • Python数据分析课程实验-1
  • pycharm安装的插件怎么显示在右侧
  • 深入解析三大查找算法:线性查找、二分查找与哈希查找的原理与应用
  • windows安装conda
  • 数值求解Eikonal方程的方法及开源实现
  • 辽宁男篮被横扫这一晚,中国篮球的一个时代落幕了
  • 乌美矿产协议文本公布,明确乌收益及协议优先级
  • “80后”蒋美华任辽宁阜新市副市长
  • 4月译著联合书单|心爱之物:热爱如何联结并塑造我们
  • 招商蛇口:一季度营收约204亿元,净利润约4.45亿元
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日