Nginx系列六:Keepalived+Nginx高可用集群(主从模式)

一:Nginx高可用集群解决的问题?

在我们负载均衡配置中有一台非常关键的服务器,nginx反向代理服务器,所有的任务分发都是从他这里发出的, 如果这台反向代理服务器挂了,整个流程全部down了,所以需要对负载均衡进行监听,添加一台备份服务器做容灾。

二:Nginx高可用集群实现思路

      1:如上所述我们需要有个程序一直去监听nginx是否down,这里我们使用Keepalived来做

      2:当我们发现nginx反向代理服务器down了,我们需要找一台服务器做替代

      当nginx主服务故障,使用备份服务器的时候,对外暴露的IP会发生改变,为了减少web端的操作,我们需要统一对外的IP,这就是所谓的虚拟IP, 虚拟IP解决的问题就是当我的nginx故障切换了,对外暴露的IP始终是不变的, 不会对web层有影响。

      主要是采用 nginx负载均衡 + 监控(keepalived)来实现,keepalived来监听Nginx是否存活,同时维护 虚拟IP对外访问解决静态路由的单点故障。

三:Keepalived+Nginx高可用集群具体配置

      具体架构如下:

    192.168.8.203:nginx(主)  Vip(虚拟IP): 192.168.8.222
    192.168.8.200:nginx(备)
    
    192.168.8.201:server1
    192.168.8.202:server2

      

3.1 :主备服务器配置负载均衡

主服务器:192.168.8.203
vim /usr/local/nginx/conf/nginx.conf
http {
	....
    upstream myServer {
        ip_hash;
        server 192.168.8.201:8080 weight=1 max_fails=1 fail_timeout=10;
        server 192.168.8.202:8080 weight=1 max_fails=1 fail_timeout=10;
    }
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'  '$connection $upstream_addr '  'upstream_response_time $upstream_response_time request_time $request_time ';
    access_log  /var/log/nginx/access.log  main;
   ....
} 

在单个server块添加反向代理
vim /usr/local/nginx/conf.d/test.conf
    #access_log /var/log/nginx/test/access.log;
    ....
    location / {   # 请求全部跳转
        proxy_pass http://myServer;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    ....
}

备份slave服务器配置步骤和主服务器一样
ps: 配置完记得重启nginx

3.2 :主备服务器安装配置keepalived

    1:安装keepalived

yum install keepalived –y

     2:配置主服务器keepalived

vim /etc/keepalived/keepalived.conf
global_defs {
    notification_email {
	iwester@163.com
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    script_user root
    enable_script_security
    router_id LVS_01
}

vrrp_script chk_nginx_port {
    script "/usr/local/nginx/src/nginx_check.sh"
    interval 5
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    unicast_src_ip 192.168.8.203
    unicast_peer {
        192.168.8.203
        192.168.8.200
    }
    virtual_ipaddress {
	192.168.8.222/24
    }  
    track_script
    {
        chk_nginx_port
    }
}

   3:配置备份服务器keepalived

vim /etc/keepalived/keepalived.conf
global_defs {
    notification_email {
	iwester@163.com
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    script_user root
    enable_script_security
    router_id LVS_02
}

vrrp_script chk_nginx_port {
    script "/usr/local/nginx/src/nginx_check.sh"
    interval 5
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    unicast_src_ip 192.168.8.200
    unicast_peer {
        192.168.8.203
        192.168.8.200
    }
    virtual_ipaddress {
         192.168.8.222/24
    } 
    track_script
    {
        chk_nginx_port
    }
}

 4:主备库都要创建nginx的监控脚本, 如果不适用keepalived自带的vrrp_script也可以自己写一个脚本,常驻后台去判断nginx是否存活!

mkdir -p /usr/local/nginx/src
vim /usr/local/nginx/src/nginx_check.sh

#!/bin/sh
nginxpid=$(ps -C nginx --no-header|wc -l)
#判断Nginx是否存活
if [ $nginxpid -eq 0 ];then
    systemctl stop keepalived
    exit 1
fi


chmod -R 744 /usr/local/nginx/src/nginx_check.sh

配置说明:判断nginx是否存活,如果nginx挂了,就把keepalived停掉,备库的keepalived就会争抢主库的虚拟IP变成主库, 因为keepalived是服务器级别的监控,nginx挂掉并不会有什么反应,所以用脚本关闭keepalived让备库去抢占虚拟IP

  5:启动keepalived

systemctl start keepalived

   查看主服务器虚拟ip

   查看主服务器广播

sudo tcpdump -i ens33 vrrp -n
通过keepalived的vrrp通信发布存活信息给备库

6:测试高可用

 

关闭主服务器nginx
systemctl stop nginx

监控日志tail -f /var/log/messages
发现异常:
1:Unsafe permissions found for script /usr/local/nginx/src/nginx_check.sh
解决:chmod -R 744 /usr/local/nginx/src/nginx_check.sh

2:default user 'keepalived_script' for script execution does not exist - please create.
解决:
global_def{
    ...  
    #添加配置
    script_user root
    enable_script_security
    ...
}
 3: /usr/local/nginx/src/nginx_check.sh exited with status 1
 解决:一般是由seliunx防火墙导致
 setenforce 0 #临时关闭
 vi /etc/sysconfig/selinux
 SELINUX=disabled
 
 4: /usr/local/nginx/src/nginx_check.sh exited due to signal 15
 解决:vrrp_script{}中的interval时间需大于脚本中的sleep时间

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
nginx是一款开源的高性能HTTP服务器和反向代理服务器。它通过处理客户端的请求,并将其转发到后端的多个服务器上以实现负载均衡,提高系统的稳定性和可扩展性。 而要实现nginx高可用性,可以使用keepalived和LVS(Linux Virtual Server)。 keepalived可以将多台服务器组成一个虚拟的高可用集群,其中一台服务器作为主服务器(Master),其他服务器作为备份服务器(Backup)。keepalived通过监控主服务器的状态,当主服务器宕机时,会自动将备份服务器切换为主服务器,确保服务的持续可用。这种方式实现了高可用性,提高了系统的稳定性。 而LVS则是一种软件负载均衡解决方案,它将多个服务器组成一个虚拟服务器,利用IP负载均衡技术将客户端请求平均分发到后端的多台服务器上,实现了负载均衡和高可用性。LVS可以通过不同的调度算法(如RR、WRR、DR等)来选择合适的后端服务器,以提高系统的性能和可扩展性。 结合keepalived和LVS,我们可以搭建一个高可用nginx集群。通过keepalived的主备切换机制,以及LVS的负载均衡技术,可以确保即使其中一台服务器发生故障,整个系统仍然可以正常运行,从而提高了系统的可靠性和可用性。 总之,nginx可以通过结合keepalived和LVS来实现高可用性和负载均衡,这对于保障系统的稳定运行和提升用户体验具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iwester

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

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

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

打赏作者

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

抵扣说明:

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

余额充值