RedHat 7配置keepalived+LVS实现高可用的Web负载均衡

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介:

上一篇博文中我们使用keepalived实现了haproxy的高可用,但keepalived问世之初却是为LVS而设计,与LVS高度整合,LVS与haproxy一样也是实现负载均衡,结合keepalived可以实现LVS的高可用架构,这一篇主要介绍RedHat 7配置keepalived+LVS实现高可用的Web负载均衡,架构图如下:

         wKioL1jRRPeiDbASAABlB8iS-po529.png


一、测试环境

计算机名

操作系统

IP地址

VIP

安装的软件

RH7-LVS01

Redhat  7.2

192.168.10.31

192.168.10.30

ipvsadm 1.27keepalived 1.2.13

RH7-LVS02

Redhat  7.2

192.168.10.32

ipvsadm 1.27keepalived 1.2.13

RH7-Web-01

Redhat  7.2

192.168.10.33

     ——

Apache  httpd 2.4

RH7-Web-02

Redhat  7.2

192.168.10.34

     ——

Apache  httpd 2.4


二、安装配置lvs与keepalived
1、分别在两台lvs服务器rh7-lvs01和rh7-lvs02上安装ipvsadm和keepalived
[root@rh7-lvs01 ~]# yum install ipvsadm keepalived -y

wKioL1jP4O6SqLI7AAHB8sNfDV0042.png

[root@rh7-lvs02 ~]# yum install ipvsadm keepalived -y

wKioL1jP4O-iDOezAAEd6Dm9V78700.png

2、修改rh7-lvs01上的keepalived配置文件,按以下内容进行修改,将rh7-lvs01配置为MASTER节点,并设置LVS的负载均衡模式为DR模式
[root@rh7-lvs01 ~]# vi /etc/keepalived/keepalived.conf

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 Filefor keepalived
  
global_defs {
    notification_email {
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc
    }
    notification_email_fromAlexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL
}
  
vrrp_instance VI_1 {
     state MASTER  #MASTER
     interface eno16777736
     virtual_router_id 52
     priority 100  #必须比BACKUP的值大
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         192.168.10.30  #VIP
     }
}
  
virtual_server192.168.10.30 80 {
     delay_loop 6
     lb_algo rr  #轮询算法
     lb_kind DR  #DR模式
     #persistence_timeout 50
     protocol TCP
  
     real_server 192.168.10.33 80 {
         weight 1
             TCP_CHECK {
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
         }
     }
  
     real_server 192.168.10.34 80 {
         weight 1
             TCP_CHECK {
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
         }
     }
}


3、修改rh7-lvs02上的keepalived配置文件,按以下内容进行修改,其实只有2处地方与主节点的配置文件不同,即state 要修改为Backup,priority数值要比master的小
[root@rh7-lvs02 ~]# vi /etc/keepalived/keepalived.conf

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 Filefor keepalived
  
global_defs {
    notification_email {
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc
    }
    notification_email_fromAlexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL
}
  
vrrp_instance VI_1 {
     state BACKUP  #BACKUP
     interface eno16777736
     virtual_router_id 52
     priority 90  #必须比MASTER的值小
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         192.168.10.30  #VIP
     }
}
  
virtual_server192.168.10.30 80 {
     delay_loop 6
     lb_algo rr  #轮询算法
     lb_kind DR  #DR模式
     #persistence_timeout 50
     protocol TCP
  
     real_server 192.168.10.33 80 {
         weight 1
             TCP_CHECK {
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
         }
     }
  
     real_server 192.168.10.34 80 {
         weight 1
             TCP_CHECK {
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
         }
     }
}


4、在rh7-lvs01上设置keepalived开机自动启动,并启动keepalived服务
[root@rh7-lvs01 keepalived]# systemctl enable keepalived
[root@rh7-lvs01 keepalived]# systemctl start keepalived

wKiom1jP4PCzPsd6AABme0eQNdg621.png


5、观察rh7-lvs01的日志可观察到keepalived启动后所发生的一连串动作,根据配置文件的参数进入了MASTER状态,并绑定了VIP地址

[root@rh7-lvs01 ~]#tail -f /var/log/messages

wKioL1jP4PKSc5YpAARkxWQhapk227.png

6、查看rh7-lvs01的IP地址,可以看到VIP已经绑定到网卡上

wKiom1jP4PPxh_Z6AAEkgnoz5Hc949.png


7、在rh7-lvs02上设置keepalived开机自动启动,并启动keepalived服务
[root@rh7-lvs02 keepalived]# systemctl enable keepalived
[root@rh7-lvs02 keepalived]# systemctl start keepalived

wKioL1jP4PPCPNh-AAB1fb6ZCrk188.png


8、观察rh7-lvs02的日志可观察到keepalived启动后所发生的一连串动作,根据配置文件的参数进入了BACKUP状态

wKiom1jP4PbCgmhjAAOsbFD1Qeo952.png


9、查看rh7-lvs02的IP地址,可以看到VIP不在网卡上

wKioL1jP4Pbj1maNAAEA5C6QFvo032.png


10、查看LVS的状态,可以看到VIP和两台Realserver的相关信息

wKiom1jP4Pnxs2N7AABuOZyNQ8A848.png


11、由于DR模式是后端两台realserver在响应请求时直接将数据包发给客户端,无需再经过LVS,这样减轻了LVS的负担、提高了效率,但由于LVS分发给realserver的数据包的目的地址是VIP地址,因此必须把VIP地址绑定到realserver的回环网卡lo上,否则realserver会认为该数据包不是发给自己因此会丢弃不作响应。另外由于网络接口都会进行ARP广播响应,因此当其他机器也有VIP地址时会发生冲突,故需要把realserver的lo接口的ARP响应关闭掉。我们可以用以下脚本来实现VIP绑定到lo接口和关闭ARP响应。

wKiom1jP4PfSCEi6AACp0OKXoG8873.png


12、执行该脚本设置该脚本开机自动执行,查看IP地址,发现lo接口已经绑定了VIP地址

wKioL1jP4Pig5JL-AAFe6T48blw712.png


13、同理,在RH7-Web-02上也绑定了VIP地址到lo接口上

wKioL1jP4PnikbpxAADEmuUOL04203.png

本文出自江健龙的技术博客 http://jiangjianlong.blog.51cto.com/3735273/1909031


三、LVS负载均衡测试

1、在两台WEB上分别配置不同的默认页面,以方便区分访问到的是哪台WEB,从而看出负载均衡效果是否生效

2、使用浏览器访问VIP,先是访问到Web01,进行刷新,又访问到Web02,说明负载均衡已经生效

wKioL1jP4PqwdxZpAAA1zH--MjE610.png

wKiom1jP4PrxuuLlAAA2K6ba0cw443.png

3、查看LVS的状态,可以看到两台realserver各有2个不活动的连接,说明按1:1权重的轮询也有生效,不活动连接是因为我们只是访问一个静态页面,访问过后很快就会处于不活动状态

wKioL1jP4PvR2S-JAABNEpKsawA592.png

本文出自江健龙的技术博客 http://jiangjianlong.blog.51cto.com/3735273/1909031


四、Keepalived高可用测试

1、停止rh7-lvs01上的keepalived服务,再观察它的日志,可以发现其绑定的VIP被移除,两个realserver节点也被移除了

[root@rh7-lvs01 ~]# systemctl stop keepalived

[root@rh7-lvs01 ~]# tail -f /var/log/messages

wKiom1jP4PyjaaeqAAEvujEBx8s425.png

wKioL1jP4P2CZagZAAD_q_e7G9s069.png

wKiom1jP4P2wwI-HAABOoO4jbVA230.png


2、再看看rh7-lvs02的日志,再看看rh7-lvs02的日志,可以看到它立刻检测到主节点出现故障,马上将自己进入MASTER状态,同时接管了VIP,将VIP绑定到自己的网卡上,成功完成一次切换。
[root@rh7-lvs02 ~]# tail -f /var/log/messages

wKiom1jP4P6jvNg5AADm3YMqGcM225.png

wKioL1jP4P-zlyHDAAEtUIgV6gA021.png

wKioL1jP4QCgHzffAABv4om3GFs654.png


3、使用浏览器访问一下VIP,依然正常负载均衡地成功访问,对用户来说并未觉察到VIP刚发生过一次漂移。

wKiom1jP4QCRUoCkAAA1zH--MjE207.png

wKiom1jP4QHw0S3sAAA2K6ba0cw056.png

wKioL1jP4QGifXJfAABuO02BuLQ844.png


4、再将rh7-lvs01的keepalived服务启动,通过日志可以看到它启动后进入了MASTER状态,把刚才rh7-lvs02刚绑定的VIP又夺了回去,谁叫它配置为MASTER呢,天生为主呀,然王侯将相宁有种乎,我们其实也可以在主节点的keepalived配置文件中增加nopreempt参数控制它不要强行夺占VIP

[root@rh7-lvs01 ~]# systemctl start keepalived
[root@rh7-lvs01 ~]# tail -f /var/log/messages

wKioL1jP4QPwOhGMAARJLtHRdTE242.png

[root@rh7-lvs02 ~]# tail -f /var/log/messages

wKiom1jP4QTSUJkgAACMFBEaaes341.png

wKiom1jP4QXiV5DVAAEkc24Moaw230.png


五、keepalived故障监控测试

1、我们将web01的httpd服务停止,模拟web01出现故障不能提供web服务,测试keepalived能否及时监控到并将web01从LVS中剔除,不再分发请求给web01,防止用户访问到故障的web服务器

[root@RH7-Web-01 ~]# systemctl stop httpd


2、通过查看rh7-lvs01的日志可以看到keepalived检查到web01的80端口失败,于是将它从群集中移除,并尝试通过SMTP服务器发送邮件,由于我没配SMTP服务器因此连接失败报了错误

[root@rh7-lvs01 ~]# tail -f /var/log/messages

wKioL1jP4QXzTQ2UAAB9ruIr-vE195.png


3、通过查看rh7-lvs02的日志发现它作为备机也是触发了相同的操作,说明备机也是时刻在监控着后端realserver的健康状态

[root@rh7-lvs012~]# tail -f /var/log/messages

wKioL1jP4QbAVKu3AAB-O7hYGq8132.png


4、分别在rh7-lvs01和rh7-lvs02上查看LVS的状态,可以看到确实都移除了故障的web节点

wKiom1jP4QaQaQvWAABkX5Gp2n0719.png

wKioL1jP4QfwM3cqAABvjFCw8zs730.png

5、再把web01的httpd服务启动
[root@RH7-Web-01 ~]# systemctl start httpd


6、通过rh7-lvs01和rh7-lvs02的日志可以看到它们监控到web01的80端口已成功连接,便再次把web01加入到LVS中去,这个监控的方法可以是检测端口,也可以检测URL等其他方法,具体取决于keepalived配置文件中的参数设置。

[root@rh7-lvs01 ~]# tail -f /var/log/messages

wKiom1jROX2gC8eoAAB6cw2TkyY996.png

[root@rh7-lvs02 ~]# tail -f /var/log/messages

wKioL1jROX6Qyww5AAB8dh0yvqo891.png


7、分别在rh7-lvs01和rh7-lvs02上查看LVS的状态,可以看到确实都把web01节点又加了进来

wKiom1jROX-wP9kpAABwT7XHFSw932.png

wKioL1jROYCgmqmuAABxHDGCpuI804.png




本文出自江健龙的技术博客 http://jiangjianlong.blog.51cto.com/3735273/1909031



本文转自Mr大表哥jianlong1990 博客,原文链接:   http://blog.51cto.com/jiangjianlong/1909031    如需转载请自行联系原作者



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
2月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
235 4
|
5月前
|
存储 Linux Apache
在CentOS上配置SVN至Web目录的自动同步
通过上述配置,每次当SVN仓库中提交新的更改时,`post-commit`钩子将被触发,SVN仓库的内容会自动同步到指定的Web目录,从而实现代码的连续部署。
186 16
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
207 4
|
JavaScript 前端开发 开发工具
web项目规范配置(husky、eslint、lint-staged、commit)
通过上述配置,可以确保在Web项目开发过程中自动进行代码质量检查和规范化提交。Husky、ESLint、lint-staged和Commitlint共同作用,使得每次提交代码之前都会自动检查代码风格和语法问题,防止不符合规范的代码进入代码库。这不仅提高了代码质量,还保证了团队协作中的一致性。希望这些配置指南能帮助你建立高效的开发流程。
661 5
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
378 2
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
1181 0
|
7月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
222 21
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
288 2
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
711 3
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
358 1

推荐镜像

更多