【Nginx】Nginx-keepalived + Nginx 实现高可用集群

红太狼 2023-02-17 14:51 141阅读 0赞

Keepalived + Nginx 高可用集群 (主从模式)

集群架构图

在这里插入图片描述

搭建

所需环境































HOSTNAME IP 说明
LB-01 192.168.145.135 Keepalived 主服务器(Nginx 主负载均衡器)
LB-02 192.168.145.136 Keepalived 备服务器(Nginx 备负载均衡器)
WEB-01 192.168.145.137 Web 服务器节点1
WEB-02 192.168.145.138 Web 服务器节点2

安装 Nginx

在 LB-01,LB-02 分别安装 Nginx

Linux 安装 Nginx

安装 Tomcat

在 WEB01, WEB02 分别安装 Tomcat

Linux 安装 Tomcat

配置 Nginx LB-01

  1. upstream backserver {
  2. server 192.168.145.137:8080;
  3. server 192.168.145.138:8080;
  4. }
  5. server {
  6. listen 80;
  7. server_name LB-01;
  8. location / {
  9. proxy_pass http://backserver;
  10. }
  11. }

配置 Nginx LB-02

  1. upstream backserver {
  2. server 192.168.145.137:8080;
  3. server 192.168.145.138:8080;
  4. }
  5. server {
  6. listen 80;
  7. server_name LB-02;
  8. location / {
  9. proxy_pass http://backserver;
  10. }
  11. }

安装 Keepalived

在两台 Nginx 服务器都安装 Keepalived

  1. yum install keepalived -y

配置主 keepalived

配置文件在 /etc/keepalived

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. acassen@firewall.loc
  5. failover@firewall.loc
  6. sysadmin@firewall.loc
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc
  9. smtp_server 192.168.145.135
  10. smtp_connect_timeout 30
  11. router_id LVS_DEVEL # 通过这个名字能访问到主机,需要修改 /etc/hosts 文件添加 127.0.0.1 LVS_DEVEL
  12. }
  13. vrrp_script chk_http_port {
  14. script "/usr/local/nginx/nginx_check.sh" # 脚本文件位置,监听 Nginx 状态
  15. interval 2 # 检测脚本执行的间隔
  16. weight 2
  17. }
  18. vrrp_instance VI_1 {
  19. state MASTER # 备份服务器上将 MASTER 改为 BACKUP
  20. interface ens33 # 网卡,通过 ifconfig 命令查看网卡名称
  21. virtual_router_id 51 # 主、备机的 virtual_router_id 须相同
  22. priority 100 # 主、备机取不同的优先级,主机值较大,备机值较小
  23. advert_int 1
  24. authentication {
  25. auth_type PASS
  26. auth_pass 1111
  27. }
  28. virtual_ipaddress {
  29. 192.168.145.110 # VRRP H 虚拟地址,网段要一致
  30. }
  31. }

配置脚本文件,监听 nginx 状态

  1. vi /usr/local/nginx/nginx_check.sh
  2. #!/bin/bash
  3. A=`ps -C nginx ¨Cno-header |wc -l`
  4. if [ $A -eq 0 ];then
  5. /usr/local/nginx/sbin/nginx
  6. sleep 2
  7. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  8. killall keepalived
  9. fi
  10. fi

配置从 Keepalived

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. acassen@firewall.loc
  5. failover@firewall.loc
  6. sysadmin@firewall.loc
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc
  9. smtp_server 192.168.145.142
  10. smtp_connect_timeout 30
  11. router_id LVS_DEVEL # 通过这个名字能访问到主机,需要修改 /etc/hosts 文件添加 127.0.0.1 LVS_DEVEL
  12. }
  13. vrrp_script chk_http_port {
  14. script "/usr/local/nginx/nginx_check.sh" # 脚本文件位置
  15. interval 2 # 检测脚本执行的间隔
  16. weight 2
  17. }
  18. vrrp_instance VI_1 {
  19. state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
  20. interface ens33 # 网卡
  21. virtual_router_id 51 # 主、备机的 virtual_router_id 须相同
  22. priority 90 # 主、备机取不同的优先级,主机值较大,备机值较小
  23. advert_int 1
  24. authentication {
  25. auth_type PASS
  26. auth_pass 1111
  27. }
  28. virtual_ipaddress {
  29. 192.168.145.110 # VRRP H 虚拟地址
  30. }
  31. }

配置脚本文件,监听 nginx 状态

  1. vi /usr/local/nginx/nginx_check.sh
  2. #!/bin/bash
  3. A=`ps -C nginx ¨Cno-header |wc -l`
  4. if [ $A -eq 0 ];then
  5. /usr/local/nginx/sbin/nginx
  6. sleep 2
  7. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  8. killall keepalived
  9. fi
  10. fi

启动 Nginx

  1. ./nginx

启动 Keepalived

  1. systemctl start keepalived.service

测试

访问配置的虚拟IP:192.168.145.110
在这里插入图片描述

访问成功,这时关闭主服务器的 nginx 和 keepalived

  1. ./nginx -s stop
  2. systemctl stop keepalived.service

再次访问虚拟IP:192.168.145.110,还是能访问成功
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读

    相关 搭建nginx可用

    一、背景 我们都知道nginx有负载均衡的功能,我们在学习的时候,练手的话,一般请求交给一个nginx,然后使用nginx自带的upstream指令把请求转发到其他web