百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Nginx主备以及高可用架构

off999 2025-01-17 12:34 40 浏览 0 评论


一、双机主备模式

1、准备

主机

IP

作用

主机1

10.100.1.10

Nginx1

主机2

10.100.1.11

Nginx2

10.100.1.5

VIP


2、主备模式架构



3、keepalived

3.1、keppalived安装

[root@nginx1 ~]# yum install -y keepalived

[root@nginx2 ~]# yum install -y keepalived

3.2、修改keepalived配置

配置文件路径:
/etc/keepalived/keepalived.conf

nginx1配置(主节点)

global_defs { #全局配置

router_id lb01 #标识身份->名称

}


vrrp_instance VI_1 {

state MASTER #标识角色状态(主节点)

interface ens33 #网卡绑定接口

virtual_router_id 50 #虚拟路由id

priority 150 #优先级

advert_int 1 #监测间隔时间

authentication { #认证

auth_type PASS #认证方式

auth_pass 1111 #认证密码

}

virtual_ipaddress {

10.100.1.5 #虚拟的VIP地址

}

}


nginx2配置(备节点)


global_defs { #全局配置

router_id lb02 #标识身份->名称

}


vrrp_instance VI_1 {

state BACKUP #标识角色状态(备节点)

interface ens33 #网卡绑定接口

virtual_router_id 50 #虚拟路由id

priority 100 #优先级

advert_int 1 #监测间隔时间

authentication { #认证

auth_type PASS #认证方式

auth_pass 1111 #认证密码

}

virtual_ipaddress {

10.100.1.5 #虚拟的VIP地址

}

}

3.3、启动keepalived服务

[root@nginx1 ~]# systemctl start keepalived

[root@nginx1 ~]# systemctl enable keepalived


[root@nginx2 ~]# systemctl start keepalived

[root@nginx2 ~]# systemctl enable keepalived

3.4、测试

在nginx1上查看是否有VIP

[root@nginx1 ~]# ip addr | grep ens33

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

inet 10.100.1.10/8 brd 10.255.255.255 scope global ens33

inet 10.100.1.5/32 scope global ens33


关闭nginx1的keeplived,查看VIP是否会主动飘到nginx2

[root@nginx1 ~]# systemctl stop keepalived

[root@nginx2 ~]# ip addr | grep ens33

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

inet 10.100.1.11/8 brd 10.255.255.255 scope global ens33

inet 10.100.1.5/32 scope global ens33


启动nginx1的keepalived,查看nginx1是否会抢占VIP

[root@nginx1 ~]# systemctl start keepalived

[root@nginx1 ~]# ip addr | grep ens33

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

inet 10.100.1.10/8 brd 10.255.255.255 scope global ens33

inet 10.100.1.5/32 scope global ens33

3.5、配置nginx检测脚本

配置完keepalived之后,存在一个问题,就是如果挂的不是keepalived而是这台电脑上的Nginx的话,keepalived的转发就不会生效,因为它无法识别Nginx服务是否正常


解决方法:在keepalived.conf文件中配置对Nginx的定时检查,如果发现Nginx挂了,调用脚本重启Nginx

3.5.1、编辑脚本

vim /etc/keepalived/check_nginx.sh

#!/bin/bash

A=`ps -C nginx --no-header | wc -l`#判断nginx是否为启动,否,则启动nginx

if [ $A -eq 0 ];then


/usr/local/nginx/sbin/nginx #启动nginx

sleep 3 #等待3秒

if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then #启动失败的话,则停止keepalived服务

systemctl stop keepalived

fi

fi

3.5.2、增加运行权限

[root@nginx1 ~]# chmod a+x /etc/keepalived/check_nginx.sh

3.5.3、在keepalived配置文件中写入监听nginx脚本

vrrp_script check_nginx {

script "
/etc/keepalived/check_nginx.sh" #脚本

interval 2 #每隔两秒运行上一行的脚本

weight 10 #如果脚本运行失败,则升级权重+10

}




在vrrp_instance中新增监控的脚本

track_script {

check_nginx #追踪nginx脚本

}



4、nginx

4.1、nginx安装

安装依赖包

[root@nginx1 ~]# yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel

上传源码包到tmp目录



解压该源码文件

[root@nginx1 tmp]# tar -zxvf nginx-1.20.0.tar.gz



进入到nginx-1.12.0目录,指定安装目录/usr/local/nginx

[root@nginx1 nginx-1.20.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module


编译安装

[root@nginx1 nginx-1.20.0]# make && make install

进入到/usr/local/nginx/sbin,执行./nginx启动nginx服务

[root@nginx1 sbin]# /usr/local/nginx/sbin/nginx

查看nginx是否启动成功

[root@nginx1 sbin]# ps -ef | grep nginx



4.2、测试

4.2.1、关闭nginx服务

关闭nginx服务,查看keepalived是否会将nginx启动

1)、执行命令/usr/local/nginx/sbin -s stop停止nginx服务

[root@nginx1 keepalived]# /usr/local/nginx/sbin/nginx -s stop



2)、执行命令ps -ef | grep nginx查看nginx服务是否启动

[root@nginx1 keepalived]# ps -ef | grep nginx



4.2.2、修改nginx配置

修改nginx配置,让nginx服务启动失败,查看keepalived是否会切换到备节点

1)、修改nginx配置



2)、执行命令停止nginx服务

[root@nginx1 keepalived]# ps -ef | grep nginx | grep -v nginx | awk '{print "kill -9",$2}' | sh

3)、执行命令ps -ef | grep nginx查看nginx服务是否启动,否,查看keepalived的状态



4)、查看keepalived的服务状态

[root@nginx1 keepalived]# systemctl status keepalived



5)、登录nginx2查看VIP是否飘到该服务器

[root@nginx2 ~]# ip addr | grep ens33



4.2.3、重新启动nginx服务

修改为正确的nginx配置,重新启动nginx服务,启动keepalived服务,查看VIP是否会重新飘到nginx1上面

1)、修改为正确的nginx配置后,启动nginx服务

[root@nginx1 keepalived]# /usr/local/nginx/sbin/nginx

2)、启动keepalived服务

[root@nginx1 keepalived]# systemctl start keepalived

3)、查看VIP是否重新飘到原先的服务器

[root@nginx1 keepalived]# ip addr | grep ens33



二、LVS+Keepalived+Nginx高可用

1、准备

主机

IP

作用

主机1

10.100.1.10

Keepalived Master

主机2

10.100.1.11

Keepalived Backup

主机3

10.100.1.12

Nginx1

主机4

10.100.1.13

Nginx2

10.100.1.5

VIP


2、高可用架构



3、keepalived

3.1、keppalived安装

[root@nginx1 ~]# yum install -y keepalived

[root@nginx2 ~]# yum install -y keepalived

3.2、修改keepalived配置

配置文件路径:
/etc/keepalived/keepalived.conf

lvs1配置(主节点)

global_defs { #全局配置

router_id lb01 #标识身份->名称

}


vrrp_instance VI_1 {

state MASTER #标识角色状态(主节点)

interface ens33 #网卡绑定接口

virtual_router_id 50 #虚拟路由id

priority 150 #优先级

advert_int 1 #监测间隔时间

authentication { #认证

auth_type PASS #认证方式

auth_pass 1111 #认证密码

}

virtual_ipaddress {

10.100.1.5 #虚拟的VIP地址

}

}

# 定义对外提供服务的LVS的VIP以及port

virtual_server 10.100.1.5 80 {

delay_loop 6 # 设置健康检查时间,单位是秒

lb_algo rr # 设置负载调度的算法为wlc

lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式

nat_mask 255.255.255.0

persistence_timeout 0

protocol TCP

real_server 10.100.1.12 80 { # 指定real server1的IP地址

weight 3 # 配置节点权值,数字越大权重越高

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 10.100.1.13 80 { # 指定real server2的IP地址

weight 3 # 配置节点权值,数字越大权重越高

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}


lvs2配置(备节点)

global_defs { #全局配置

router_id lb02 #标识身份->名称

}


vrrp_instance VI_1 {

state BACKUP #标识角色状态(备节点)

interface ens33 #网卡绑定接口

virtual_router_id 50 #虚拟路由id

priority 100 #优先级

advert_int 1 #监测间隔时间

authentication { #认证

auth_type PASS #认证方式

auth_pass 1111 #认证密码

}

virtual_ipaddress {

10.100.1.5 #虚拟的VIP地址

}

}

# 定义对外提供服务的LVS的VIP以及port

virtual_server 10.100.1.5 80 {

delay_loop 6 # 设置健康检查时间,单位是秒

lb_algo rr # 设置负载调度的算法为wlc

lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式

nat_mask 255.255.255.0

persistence_timeout 0

protocol TCP

real_server 10.100.1.12 80 { # 指定real server1的IP地址

weight 3 # 配置节点权值,数字越大权重越高

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 10.100.1.13 80 { # 指定real server2的IP地址

weight 3 # 配置节点权值,数字越大权重越高

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

3.3、启动keepalived服务

[root@nginx1 ~]# systemctl start keepalived

[root@nginx1 ~]# systemctl enable keepalived


[root@nginx2 ~]# systemctl start keepalived

[root@nginx2 ~]# systemctl enable keepalived

4、LVS

4.1、ipvsadm安装

[root@lvs1 ~]# yum install -y ipvsadm

[root@lvs2 ~]# yum install -y ipvsadm

5、nginx

5.1、nginx安装

安装依赖包

[root@nginx1 ~]# yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel

上传源码包到tmp目录



解压该源码文件

[root@nginx1 tmp]# tar -zxvf nginx-1.20.0.tar.gz



进入到nginx-1.12.0目录,指定安装目录/usr/local/nginx

[root@nginx1 nginx-1.20.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module


编译安装

[root@nginx1 nginx-1.20.0]# make && make install


进入到/usr/local/nginx/sbin,执行./nginx启动nginx服务

[root@nginx1 sbin]# /usr/local/nginx/sbin/nginx


查看nginx是否启动成功

[root@nginx1 sbin]# ps -ef | grep nginx



5.2、编写LVS的realserver的健康状态检测脚本

Nginx的两台机器都需要配置

1)、进入到init文件夹

[root@nginx1 ~]# cd /etc/init.d/

2)、编辑脚本realserver.sh

[root@nginx1 init.d]# vim realserver.sh

#虚拟的vip 根据自己的实际情况定义

SNS_VIP=10.100.1.5

/etc/rc.d/init.d/functions

case "$1" in

start)

ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

/sbin/route add -host $SNS_VIP dev lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p >/dev/null 2>&1

echo "RealServer Start OK"

;;

stop)

ifconfig lo:0 down

route del $SNS_VIP >/dev/null 2>&1

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

echo "RealServer Stoped"

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

esac

exit 0

3)、设置脚本权限

[root@nginx1 init.d]# chmod +x realserver.sh

[root@nginx1 init.d]# chmod +x /etc/rc.d/init.d/functions

4)、执行脚本

[root@nginx1 init.d]# service realserver.sh start

5)、查看执行结果

[root@nginx1 init.d]# ip a

如果有显示VIP,则说明成功



6、测试

6.1、nginx测试

1)、测试VIP

ping 10.100.1.5



2)、网页测试VIP



6.2、keepalived高可用测试

在lvs1上查看是否有VIP

[root@lvs1 ~]# ip addr | grep ens33

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

inet 10.100.1.10/8 brd 10.255.255.255 scope global ens33

inet 10.100.1.5/32 scope global ens33


关闭lvs1的keeplived,查看VIP是否会主动飘到nginx2

[root@lvs1 ~]# systemctl stop keepalived

[root@lvs2 ~]# ip addr | grep ens33

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

inet 10.100.1.11/8 brd 10.255.255.255 scope global ens33

inet 10.100.1.5/32 scope global ens33


启动lvs1的keepalived,查看nginx1是否会抢占VIP

[root@lvs1 ~]# systemctl start keepalived

[root@lvs1 ~]# ip addr | grep ens33

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

inet 10.100.1.10/8 brd 10.255.255.255 scope global ens33

inet 10.100.1.5/32 scope global ens33

6.3、LVS监控测试

1)、查看最新的VIP对应的realserver的情况

[root@lvs1 keepalived]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP lvs1:http rr

-> 10.100.1.12:http Route 3 0 0

-> 10.100.1.13:http Route 3 0 0



查看到10.100.1.112和10.100.1.113两台服务器都在

2)、测试停掉10.100.1.112

[root@nginx1 ~]# /usr/local/nginx/sbin/nginx -s stop

3)、查看最新的VIP对应的realserver的情况

[root@lvs1 keepalived]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP lvs1:http rr

-> 10.100.1.13:http Route 3 0 0



可以查看到10.100.1.12这台服务器已经被移除了

4)、恢复10.100.1.12

lvs又会自动监控并加入10.100.1.12

[root@nginx1 ~]# /usr/local/nginx/sbin/nginx

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP lvs1:http rr

-> 10.100.1.12:http Route 3 0 0

-> 10.100.1.13:http Route 3 0 0


相关推荐

win8家庭中文版下载(windows家庭中文版下载)

可以按照以下步骤在Win8上下载和安装Word:1.通过微软官网下载购买,或者通过MicrosoftStore应用商店进行购买和下载。2.下载完成后,打开文件夹,双击setup进行安装。3.安...

教大家强制退出苹果id账号(教大家强制退出苹果id账号ipad)

1.首先将手机强制关机,并在电脑端安装iTunes并打开。2.用数据线将手机与电脑连接起来,长按手机电源键。3.当出现苹果标志时不要松开电源键,接着按Home键。4.直到屏幕黑屏,松开电源键。5.继续...

惠普官网驱动下载官网(惠普驱动官方)

在惠普官网下载系统驱动方法如下访问HP官网:www.hp.com找到支持与驱动页面(通常在顶部导航栏的支持或下载中)输入你的HP产品的序列号或选择产品类型和型号选择你的操作系统,然后下载相关的驱动。安...

电脑公司取名字大全(电脑行业公司取名)

动感网络IT狂人行鱼雷IT网PC宝宝网外有鱼超导技术网PC技术网加点分吧,不然想不出太多,呵呵绿苑计算机协会绿色代表生命,有起航的意义,苑是一个范畴,有地域的意思,是给你们一片天地的意思...

系统一键重装win7(win7一键重装系统win10)
  • 系统一键重装win7(win7一键重装系统win10)
  • 系统一键重装win7(win7一键重装系统win10)
  • 系统一键重装win7(win7一键重装系统win10)
  • 系统一键重装win7(win7一键重装系统win10)
如何卸载显卡驱动(主板驱动)
  • 如何卸载显卡驱动(主板驱动)
  • 如何卸载显卡驱动(主板驱动)
  • 如何卸载显卡驱动(主板驱动)
  • 如何卸载显卡驱动(主板驱动)
wifi怎么设置网速快(手机测wifi网速怎么测)

wifi加速设置方法步骤如下。1设置网速:浏览器中输入终端地址,输入账号和密码。找到连接设备数目并进行更改,找到信道宽度,选择更快的网速。2提高WiFi网速:进入设置中心,点击WLAN选项。点击高级设...

华硕驱动软件叫什么(华硕自带驱动管理软件)

q-installer驱动啥意思?华硕q-installer驱动能让用户更加方便地管理各种文件。将会同时显示4个Windows资源管理器的窗口,这样能让用户更加简单地对文件进行一些操作,例如复制,粘贴...

懂行的人建议买华为还是惠普电脑

华为电脑好。华为笔记本电脑主打的就是轻薄,质感,多屏协同生态,面向商务人群和学生党。目前在售的机型并不多,但每一台机子本身都不错,不过因为被制裁的缘故,定价过高,性价比打折扣。惠普笔记本好,惠普除了家...

如何把win系统换成安卓(怎么把系统改为win10)

方法/步骤分步:1首先点击打开酷安应用市场;2点击打开位于屏幕右下方的“应用游戏”选项;3选择想要下载的软件或者游戏app,点击进入;4选择“下载”按钮,点击开始下载;5APP下载完成后,系统会自动跳...

win7摄像头软件哪个好(win7摄像头软件ecap)
  • win7摄像头软件哪个好(win7摄像头软件ecap)
  • win7摄像头软件哪个好(win7摄像头软件ecap)
  • win7摄像头软件哪个好(win7摄像头软件ecap)
  • win7摄像头软件哪个好(win7摄像头软件ecap)
如何复制粘贴(如何复制粘贴excel表格内容)
如何复制粘贴(如何复制粘贴excel表格内容)

需要复制文字的时候只要先选中文字,然后同时按住Ctrl+C键,然后松手就已经复制了文字,在需要粘贴的地方同时按住:Ctrl+V就可以看到文字被粘贴了,非常的方便。扩展资料:Alt键,这个键叫做改变,很多快捷键都需要使用到这个键,矩形...

2025-11-14 05:51 off999

hotmail电子邮箱登录(hotmail邮箱在线登录)

***@hotmail.com1、其中***是你自己申请的邮箱的用户名。2、hotmail要写在符号@后面。3、最后加上.com,这样就是一个完整的hotmail邮箱的格式。4、比如:zhangj...

qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
  • qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
  • qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
  • qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
  • qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
win10iso文件(win10iso文件怎么安装)

安装Win10ISO系统文件需要以下步骤:1.首先需要从Microsoft官网下载Win10ISO系统文件,打开网站后选择Win10的版本、语言和架构(32位或64位),点击下载即可。2.下载...

取消回复欢迎 发表评论: