关于使用Keepalived实现Nginx的自动重启及双主热备高可用问题

2025-05-26 0 42

1、概述

之前我们使用Keepalived实现了Nginx服务的双机主备高可用,但是有几个问题没有解决,今天一起探讨一下。

1)在双机主备机制中,Keepalived服务如果宕了,会自动启用备机进行服务,但Nginx服务如果负载过大宕了,虚拟ip是不会指向备机的。

2)双机主备的特点是,只有1台机器在提供服务,备机在主机的Keepalived服务宕掉后才会提供服务,大大的造成了资源的浪费。

3)目前比较流行租用云服务器去运营公司的产品,那云服务器支不支持虚拟IP呢?

今天我们就上述的三个问题来讲解一下。

2、使用Keepalived实现Nginx的自动重启

2.1 借助Shell脚本,完成Nginx的重启

Keepalived不能直接启动Nginx,但可以执行shell脚本,因此这里我们需要借助Shell脚本启动Nginx。

在 /etc/keepalived 目录下,新建一个脚本 check_nginx.sh,以下是脚本的具体内容:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
#!/bin/bash

# 执行查看Nginx进程的命令,并放在变量A中

A=`ps -C nginx --no-header | wc -l`

# 判断是否宕机,如果宕机尝试重启,如果重启不成功,则停止Keepalived

if [ $A -eq 0 ];then

/usr/local/nginx/sbin/nginx

sleep 3

if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then

killall keepalived

fi

fi

脚本来源于网络

2.2 为脚本赋予运行权限

?

1
# chmod +x /etc/keepalived/check_nginx.sh

2.3 在Keepalived配置文件中增加配置

打开Keepalived配置文件,# vi /etc/keepalived/keepalived.conf

修改配置文件,增加vrrp_script 和track_script的配置,配置如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40
global_defs {

# 全局唯一的主机标识

router_id server_a

}

vrrp_script check_nginx {

script "/etc/keepalived/check_nginx.sh"

interval 3 # 每隔3秒运行一次Shell脚本

weight 10 # 脚本运行成功,权重加10

}

vrrp_instance VI_1 {

# 标识是主节点还是备用节点,值为 MASTER 或 BACKUP

state MASTER

# 绑定的网卡

interface ens33

# 虚拟路由id,保证主备节点是一致的

virtual_router_id 51

# 权重

priority 100

# 同步检查时间,间隔默认1秒

advert_int 1

# 认证授权的密码,所有主备需要一样

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

check_nginx

}

# 虚拟IP

virtual_ipaddress {

192.168.1.88

}

}

2.4 重启Keepalived服务

重启后,发现,Nginx停掉后,很快会自动启动。

3、双主热备的搭建

3.1 双主热备概述

由于双机主备机制,每次只会由一台服务器对外提供服务,且主备机的配置是相同的,因此极大地造成了资源的浪费。

双主热备则解决了这个问题,双主热备的原理是两台服务器利用Keepalived互为主备,因此需要两个虚拟IP,再利用DNS轮询的配置,让一个域名按轮询的方式分别路由到两个虚拟IP上,最终达到高可用的目的。

3.2 场景说明

虚拟IP1:192.168.1.88

虚拟IP2:192.168.1.66

A服务器IP(主):192.168.1.144

B服务器IP(备):192.168.1.22

3.3 修改A服务器配置

配置如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54
! Configuration File for keepalived

global_defs {

# 全局唯一的主机标识

router_id server_a

}

vrrp_instance VI_1 {

# 标识是主节点还是备用节点,值为 MASTER 或 BACKUP

state MASTER

# 绑定的网卡

interface ens33

# 虚拟路由id,保证主备节点是一致的

virtual_router_id 51

# 权重

priority 100

# 同步检查时间,间隔默认1秒

advert_int 1

# 认证授权的密码,所有主备需要一样

authentication {

auth_type PASS

auth_pass 1111

}

# 虚拟IP

virtual_ipaddress {

192.168.1.88

}

}

vrrp_instance VI_2 {

# 标识是主节点还是备用节点,值为 MASTER 或 BACKUP

state BACKUP

# 绑定的网卡

interface ens33

# 虚拟路由id,保证主备节点是一致的

virtual_router_id 52

# 权重

priority 80

# 同步检查时间,间隔默认1秒

advert_int 1

# 认证授权的密码,所有主备需要一样

authentication {

auth_type PASS

auth_pass 1111

}

# 虚拟IP

virtual_ipaddress {

192.168.1.66

}

}

3.4 修改B服务器配置

配置如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45
! Configuration File for keepalived

global_defs {

router_id server_b

}

vrrp_instance VI_1 {

# 设置为备机

state BACKUP

interface ens33

virtual_router_id 51

# 权重设置的要比主机低

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

# 虚拟IP需要主备设置成一样

virtual_ipaddress {

192.168.1.88

}

}

vrrp_instance VI_2 {

# 设置为主机

state MASTER

interface ens33

virtual_router_id 52

# 权重设置的要比主机低

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

# 虚拟IP需要主备设置成一样

virtual_ipaddress {

192.168.1.66

}

}

3.5 重启两台服务器的Keepalived

重启Keepalived即可。

3.6 设置DNS轮询

联系网络运营商解决。

4、云服务器的负载均衡

现在,很多公司都会选择租用云服务器运行自己的产品,因为更划算、更稳定,有专业人员负责运维。

但使用了云服务器,就要受云服务运营商的限制。

就拿虚拟IP这个事儿来说,一些云服务运营商就是不支持的。

如果不支持虚拟IP,则Keepalived这个方案就只能放弃了。

但即使Keepalived用不了,Nginx的高可用还是有解决方案的,很多云服务商都已经推出了自己的负载均衡服务(例如:阿里云的负载均衡 SLB 和 腾讯云的负载均衡 CLB)。我们直接租用就好了,不需要我们自己去配置。

5、综述

今天大概聊了一下KeepAlived自动重启Nginx,Keepalived的双主热备高可用的搭建,以及云服务器负载均衡的解决方案,希望能对大家有所帮助。

到此这篇关于使用Keepalived实现Nginx的自动重启及双主热备高可用的文章就介绍到这了,更多相关Keepalived实现Nginx的自动重启内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://www.cnblogs.com/w84422/p/15242407.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 关于使用Keepalived实现Nginx的自动重启及双主热备高可用问题 https://www.kuaiidc.com/53201.html

相关文章

发表评论
暂无评论