您的位置:首页技术文章

centos环境下nginx高可用集群的搭建指南

【字号: 日期:2023-03-28 17:34:36浏览:2作者:猪猪
目录
  • 1.概述
  • 2.CentOS中nginx集群搭建
    • 2.1 集群架构图
    • 2.2 Keepalived
    • 2.3 集群搭建准备
    • 2.4 集群搭建
      • 2.4.1 安装keepalived
      • 2.4.2 配置keepalived.conf
      • 2.4.3 编写nginx监测脚本
      • 2.4.4 启动keepalived
      • 2.4.5 启动nginx
      • 2.4.6 测试
  • 3.小结
    • 4.参考文献
      • 总结

        1.概述

        nginx单机部署时,一旦宕机就会导致整个服务的不可用,导致雪崩式效应。集群式部署是解决单点式雪崩效应的有效方案,本文将在centos环境下,结合Keepalived搭建高可用的nginx集群。

        2.CentOS中nginx集群搭建

        2.1 集群架构图

        当客户端请求服务器时,若利用nginx作为代理,则会首先访问nginx服务器,再通过nginx服务器转发到对应的服务器上。上述架构图的原理是:nginx-01和nginx-02是两台nginx服务器,其中nginx-01作为主服务器,通过keepalived与nginx-02形成一个小集群,同时还可以与nginx-03、nginx-04…nginx-n等多台服务器构成集群。当nginx-01因为某些原因宕机而停止服务时,其它nginx服务器会选举一个进行替代,使整个服务保持正常的运行。

        2.2 Keepalived

        Keepalived是一款基于vrrp协议的高可用集群软件,通过虚拟IP(VIP)对外提供服务,能够实时监控集群中服务器的运行状态并自动进行故障隔离,这些服务器都启动着相同的服务,当主服务器发生故障时,会自动将虚拟IP漂移到备份服务器,从而实现业务高可用。

        2.3 集群搭建准备

        1.需要两台nginx服务器

        2.需要keepalived

        3.需要虚拟ip

        2.4 集群搭建

        2.4.1 安装keepalived

        分别在了两台虚拟机上,利用yum指令安装keepalived,指令如下:

        yum install keepalived

        可以利用下述指令确认是否安装成功,成功的话则会显示版本号,具体如下:

        rpm -q -a keepalived 

        若非特别指定安装目录,则在centos的安装路径如下:

        /etc/keepalived

        2.4.2 配置keepalived.conf

        由于是主从配置,在主服务器中,找到keepalived.conf的文件,进行替换,该文件存储于/etc/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.129
        	smtp_connect_timeout 30
        	router_id LVS_DEVEL	# LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
        }
        
        vrrp_script chk_http_ port {
        	script "/usr/local/src/nginx_check.sh"
        	interval 2   # (检测脚本执行的间隔)2s
        	weight 2  #权重,如果这个脚本检测为真,服务器权重+2
        }
        
        vrrp_instance VI_1 {
        	state MASTER   # 备份服务器上将MASTER 改为BACKUP
        	interface ens33 #网卡名称,可查看对应服务器的网卡
        	virtual_router_id 51 # 主、备机的virtual_router_id必须相同
        	priority 100   #主、备机取不同的优先级,主机值较大,备份机值较小
        	advert_int 1	#每隔1s发送一次心跳
        	authentication {	# 校验方式, 类型是密码,密码1111
                auth type PASS
                auth pass 1111
            }
        	virtual_ipaddress { # 虛拟ip
        		192.168.200.50 // VRRP H虛拟ip地址
        	}
        }
        

        备份服务器的keepalived.conf替换为:

        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.129
        	smtp_connect_timeout 30
        	router_id LVS_DEVEL	# LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
        }
        
        vrrp_script chk_http_ port {
        	script "/usr/local/src/nginx_check.sh"
        	interval 2   # (检测脚本执行的间隔)2s
        	weight 2  #权重,如果这个脚本检测为真,服务器权重+2
        }
        
        vrrp_instance VI_1 {
        	state MASTER   # 备份服务器上将MASTER 改为BACKUP
        	interface ens33 #网卡名称,可查看对应服务器的网卡
        	virtual_router_id 51 # 主、备机的virtual_router_id必须相同
        	priority 10   #主、备机取不同的优先级,主机值较大,备份机值较小
        	advert_int 1	#每隔1s发送一次心跳
        	authentication {	# 校验方式, 类型是密码,密码1111
                auth type PASS
                auth pass 1111
            }
        	virtual_ipaddress { # 虛拟ip
        		192.168.200.50 // VRRP H虛拟ip地址
        	}
        }
        

        2.4.3 编写nginx监测脚本

        文件保存为bash类型,命名为:nginx_check.sh,也可以自定义文件名称,脚本内容如下:

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

        脚本可根据喜好来自定义文件夹存放,我这里存放于/usr/local/src/nginx_check.sh,注意一点的是,脚本存放的路径必须与keepalived.conf中配置的脚本文件路径一致。脚本路径更改,则keepalived.conf中的路径也要修改。

        2.4.4 启动keepalived

        分别在两台服务器上执行如下指令:

        systemctl start keepalived.service
        

        查看keepalived进程是否运行,

        ps -ef|grep keepalived
        

        若运行成功,则会出现以下界面:

        2.4.5 启动nginx

        在主服务器和从服务器上,分别利用nginx启动命令启动nginx服务,在nginx安装目录下执行如下指令:

        ./nginx

        2.4.6 测试

        1测试方案如下

        (1)关闭主服务器上的nginx

        在nginx安装目录下执行如下指令:

        ./nginx -s stop

        (2)访问虚拟ip

        在外部浏览器输入:

        192.168.200.50:80

        若能正常弹出nginx欢迎页面,则表明集群搭建成功,主服务器nginx宕机后,从服务器会代替服务。

        3.小结

        1.本文利用两台服务器模拟nginx集群状态,当nginx master宕机后,从服务器会代替服务;

        2.模拟集群关键三要素:keepalived、监测脚本、虚拟ip;

        3.在某些情况下,需要为脚本添加可执行权限,指令如下:

        chmod +x /usr/local/src/nginx_check.sh #脚本地址根据实际情况而定
        

        4.参考文献

        1.https://www.bilibili.com/video/BV1zJ411w7SV?t=85&p=1

        2.https://juejin.cn/post/6844903956192182285

        3.https://juejin.cn/post/6844903929738854413

        4.https://juejin.cn/post/6844903585449246733

        总结

        到此这篇关于centos环境下nginx高可用集群搭建的文章就介绍到这了,更多相关nginx高可用集群搭建内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

        标签: Nginx