Linux系统中Nginx+keepalived配置高可用集群

高可用逻辑分析示意图

一、配置高可用的准备工作

1、需要准备至少两台Linux服务器172.21.83.182和192.168.209.131

2、在两台Linux服务器上分别安装好nginx

Linux如何安装nginx可以参看我的博客地址:Linux系统中安装Nginx_梦想天涯~路在脚下的博客-CSDN博客

这里我已经在两台Linux服务器中已经安装好了nginx

第一台Linux服务器中安装的nginx

第二台Linux服务器中安装的nginx

3、在两台Linux服务器上分别安装keepalived

 两台Linux服务器分别安装keepalived

这里我们使用yum在线安装keepalived,执行命令:yum install keepalived -y

查看是否已经将keepalived安装成功,执行命令:rpm -q -a keepalived

keepalived的安装位置 /etc/keepalived 

keepalived的配置文件 keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

二、配置高可用(主从配置)

 1、分别修改两台Linux服务器中keepalived的配置文件 keepalived.conf

(1)第一台主Linux服务器172.21.83.182

修改keepalived.conf配置文件


global_defs { # 全局定义
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 172.21.83.182
   smtp_connect_timeout 30
   router_id LVS_DEVEL #router_id 全局唯一的值,也可以改为自己的ip地址
}

vrrp_script chk_http_port {

	script "/usr/local/src/nginx_check.sh"  # 检测脚本(主要用于检测Nginx服务是否还活着,如果Nginx服务宕机,则会切换到另外一台Nginx服务上去)
	
	interval 2    # 检测脚本执行间隔
	
	weight 2    # 权重
}

vrrp_instance VI_1 {
    state MASTER  # 如果是主服务器,那么这里就是MASTER(主),如果是备份服务器,那么这里就是BACKUP(备)
    interface eth0 # 网卡名称(这个可以在Linux系统中输入ifconfig查看到具体的网卡名称叫什么)
    virtual_router_id 51  # 主、备机的virtual_router_id必须相同
    priority 100     # 主、备及取不同的优先级,主机值较大,备份机值较小
    advert_int 1     # 心跳检测,默认是每个1秒钟发送一次心跳检测
    authentication { # 校验权限的方式,默认是PASS 1111
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16 # 虚拟IP地址
    }
}

rooter_id说明:

网卡说明:

修改好keepalived.conf配置文件后,将主机Linux服务器上 /etc/keepalived 目录中的keepalived.conf配置文件替换掉

将nginx_check.sh检测脚本放到对应Linux服务器 /usr/local/src/ 目录中去,注意这里的检测脚本是跟keepalived.conf配置文件中 script "/usr/local/src/nginx_check.sh" 路径一致

检测脚本位置

nginx_check.sh脚本文件

#!/bin/bash
A=`ps -C nginx ¨Cno-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

(2)第二台备份Linux服务器192.168.209.131

修改keepalived.conf配置文件


global_defs { # 全局定义
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 172.21.83.182
   smtp_connect_timeout 30
   router_id LVS_DEVEL #router_id 全局唯一的值,也可以改为自己的ip地址
}

vrrp_script chk_http_port {

	script "/usr/local/src/nginx_check.sh"  # 检测脚本(主要用于检测Nginx服务是否还活着,如果Nginx服务宕机,则会切换到另外一台Nginx服务上去)
	
	interval 2    # 检测脚本执行间隔
	
	weight 2    # 权重
}

vrrp_instance VI_1 {
    state BACKUP  # 如果是主服务器,那么这里就是MASTER(主),如果是备份服务器,那么这里就是BACKUP(备)
    interface eno16777736 # 网卡名称(这个可以在Linux系统中输入ifconfig查看到具体的网卡名称叫什么)
    virtual_router_id 51  # 主、备机的virtual_router_id必须相同
    priority 90     # 主、备及取不同的优先级,主机值较大,备份机值较小
    advert_int 1    # 心跳检测,默认是每个1秒钟发送一次心跳检测
    authentication {# 校验权限的方式,默认是PASS 1111
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16 # 虚拟IP地址
    }
}

rooter_id说明:

网卡说明:

修改好keepalived.conf配置文件后,将主机Linux服务器上 /etc/keepalived 目录中的keepalived.conf配置文件替换掉

将nginx_check.sh检测脚本放到对应Linux服务器 /usr/local/src/ 目录中去,注意这里的检测脚本是跟keepalived.conf配置文件中 script "/usr/local/src/nginx_check.sh" 路径一致

检测脚本位置

nginx_check.sh脚本文件

#!/bin/bash
A=`ps -C nginx ¨Cno-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

2、分别启动主备服务器中的nginx和keepalived

进入到 /usr/local/nginx/sbin 目录下

执行启动nginx命令:./nginx

执行启动keepalived命令:systemctl start keepalived.service   拓展:停止keepalived命令:systemctl stop keepalived.service

3、查看虚拟ip绑定情况

虚拟ip地址:192.168.200.16

172.21.83.182主服务器

192.168.209.131备服务器

三、最终测试

在浏览器中输入虚拟ip地址,192.168.200.16访问nginx首页,然后尝试停止掉一天nginx服务器和keepalived服务看是否还可以成功访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想天涯~路在脚下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值