Nginx+Keepalived

本文介绍了如何在CentOS服务器集群上通过Nginx实现负载均衡,配置子配置文件,并结合Keepalived实现VIP漂移和故障切换,确保网站服务的高可用性。

1.  规划环境:

主机名称
服务器名称
IP
用途
centosnode1
Nginx_Master
192.168.188.223
提供负载均衡
centosnode2
Nginx_Backup
192.168.188.226
提供负载均衡
VIP
192.168.188.100
网站的VIP地址
centosnode3
Web1服务器
192.168.188.227
提供Web服务
centosnode4
Web2服务器
192.168.188.228
提供Web服务

2.  配置Nginx负载均衡,这里通过子配置文件进行配置:

        1>.  Nginx_Master服务器Nginx是通过源码安装,配置文件在/usr/local/nginx/conf/nginx.conf

        2>.  Nginx_Backup服务器Nginx使用过yum源安装,配置文件在/etc/nginx/nginx.conf

##Nginx_Master服务器Nginx配置
[root@centosnode1 ~]# vim /usr/local/nginx/conf.d/lb2.conf 

upstream websrvs {
        server 192.168.188.227:80 weight=1;
        server 192.168.188.228:80 weight=1;
}
 
server {
        location / {
                proxy_pass http://websrvs;
                index index.html;
        }
}
##Nginx_Backup服务器Nginx配置
[root@centosnode2 ~]# vim /etc/nginx/conf.d/lb2.conf

upstream websrvs {
        server 192.168.188.227:80 weight=1;
        server 192.168.188.228:80 weight=1;
}
 
server {
        location / {
                proxy_pass http://websrvs;
                index index.html;
        }
}

 3.  启动Nginx服务,测试负载均衡是否成功:

##启动主,从Nginx服务
[root@centosnode1 ~]# systemctl start nginx.service
[root@centosnode2 ~]# systemctl start nginx.service

##设置Web1服务器的简单web页面
[root@centosnode3 ~]# echo "this is page ip : 192.168.188.227" > /var/www/html/index.html

##启动Web1服务器的httpd服务
[root@centosnode3 ~]# systemctl start httpd

##设置Web2服务器的简单web页面
[root@centosnode4 ~]# echo "this is page ip : 192.168.188.228" > /var/www/html/index.html

##启动Web2服务器的httpd服务
[root@centosnode4 ~]# systemctl start httpd

##测试Nginx服务负载均衡
[root@centosnode5 ~]# curl 192.168.188.223
this is page ip : 192.168.188.227 
[root@centosnode5 ~]# curl 192.168.188.223
this is page ip : 192.168.188.228

4.  配置Nginx_Master服务器Keepalived服务:

[root@centosnode1 ~]# vim /etc/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 NODE1_MASTER
}

vrrp_script chk_nginx {
        script "killall -0 nginx"  ##判断nginx服务是否运行,若不运行,则返回状态码非0
        interval 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 
    track_script {  ##调用vrrp_script中定义的脚本
        chk_nginx
    }
 
    virtual_ipaddress {
        192.168.188.100
    }
}

5.  配置Nginx_Backup服务器Keepalived服务:

[root@centosnode2 ~]# vim /etc/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 NODE2_BACKUP
}

vrrp_script chk_nginx {
        script "killall -0 nginx"  ##判断nginx服务是否运行,若不运行,则返回状态码非0
        interval 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 
    track_script {  ##调用vrrp_script中定义的脚本
        chk_nginx
    }
 
    virtual_ipaddress {
        192.168.188.100
    }
}

6.  启动Keepalived服务:

[root@centosnode1 ~]# systemctl start keepalived.service

[root@centosnode2 ~]# systemctl start keepalived.service

7.  测试Nginx负载均衡是否正常,访问VIP:

##测试Nginx服务负载均衡
[root@centosnode5 ~]# curl 192.168.188.100
this is page ip : 192.168.188.227 
[root@centosnode5 ~]# curl 192.168.188.100
this is page ip : 192.168.188.228

8.  测试故障检查是否正常,停掉一台web后端的web服务,访问VIP是否可以正常访问:

##停掉centosnode3的httpd服务
[root@centosnode3 ~]# systemctl stop httpd

##访问vip
[root@centosnode5 ~]# for ((i=1;i<=5;i++))
> do
> curl 192.168.188.100
> done
this is page ip : 192.168.188.228
this is page ip : 192.168.188.228
this is page ip : 192.168.188.228
this is page ip : 192.168.188.228
this is page ip : 192.168.188.228

由此可见,当centosnode3节点的httpd故障时,会自动将其从集群中去除;而且访问vip可以正常访问。当centosnode3节点的httpd恢复时,会自动将其加入到集群中。

9.  测试Keepalived故障转换是否正常,是否会发生ip飘移:

由此可见当前vip地址在centosnode1主机上,然后模拟服务器故障,停掉Nginx服务。

[root@centosnode1 ~]# systemctl stop nginx.service

 

再次查看vip,发现vip飘移到了centosnode2主机上。可以将centosnode1主机的Nginx服务再次开启,会发现vip又会飘移到了centosnode1主机上,因为keepalived默认配置抢占主服务器,优先级高的服务器,将抢占到vip。

[root@centosnode1 ~]# systemctl start nginx.service

##监控日志文件
tail -f 日志文件目录

### 配置方法 - **LVS+Keepalived配置**:在LVS和Keepalived的配置中,需要定义对外提供服务的LVS的VIP以及port,还可以设置健康检查时间、负载调度算法、LVS实现负载的机制等参数。例如,定义VIP为192.168.10.199,端口为80,健康检查时间为5秒,负载调度算法为wlc,LVS实现负载的机制为DR模式等,配置示例如下: ```plaintext virtual_server 192.168.10.199 80 { delay_loop 5 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 300 protocol TCP } ``` - **Nginx+Keepalived配置**:NginxKeepalived结合可实现七层的负载均衡,主要是利用Keepalived的功能来保证Nginx服务的高可用性,配置时需要考虑Keepalived的三个模块(core、check和vrrp)的相关参数设置。core模块负责主进程的启动、维护以及全局配置文件的加载和解析;check负责健康检查;vrrp模块实现VRRP协议 [^2]。 ### 应用场景 - **高可用负载均衡**:在需要高可用性和负载均衡的场景中,LVS、NginxKeepalived的组合可以发挥重要作用。LVS可以实现四层负载均衡,Nginx可以实现七层负载均衡,而Keepalived可以保证整个系统的高可用性,当主节点出现故障时,能够自动切换到备用节点,确保服务不中断。 - **同类服务负载均衡**:对于同类服务的负载均衡,Nginx+Keepalived可以实现七层的负载均衡,将请求均匀地分配到多个后端服务器上,提高系统的处理能力和响应速度 [^2]。 ### 优缺点 - **优点**: - **高可用性**:Keepalived的使用可以实现节点的自动切换,当主节点出现故障时,备用节点能够迅速接管服务,保证系统的高可用性。 - **多层负载均衡**:LVS实现四层负载均衡,Nginx实现七层负载均衡,能够根据不同的需求对请求进行更细致的分配,提高系统的性能和效率。 - **健康检查**:Keepalived的check模块可以对后端服务器进行健康检查,及时发现并隔离故障节点,保证服务的稳定性。 - **缺点**: - **配置复杂**:LVS、NginxKeepalived的组合配置相对复杂,需要对各个组件的参数和功能有深入的了解,增加了运维的难度和成本。 - **脑裂问题**:在使用Keepalived时,可能会出现脑裂故障问题,即多个节点同时认为自己是主节点,导致服务异常。需要采取相应的措施来解决和预防脑裂问题 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值