keepalived 热备 +LVS

  • keepalived用于实现高可用集群

  • 它的工作原理就是VRRP(虚拟冗余路由协议)

在两台web服务器上安装keepalived

修改配置文件

[root@web1 ~]# vim /etc/keepalived/keepalived.conf

12 router_id web1 # 设置本机在集群中的唯一识别符

13 vrrp_iptables # 自动配置iptables放行规则

... ...

20 vrrp_instance VI_1 {

21 state MASTER # 状态,主为MASTER,备为BACKUP

22 interface eth0 # 网卡

23 virtual_router_id 51 # 虚拟路由器地址

24 priority 100 # 优先级

25 advert_int 1 # 发送心跳消息的间隔

26 authentication {

27 auth_type PASS # 认证类型为共享密码

28 auth_pass 1111 # 集群中的机器密码相同,才能成为集群

29 } 30 virtual_ipaddress {

31 192.168.88.80/24 # VIP地址

32 } 33 }

删除下面所有行

web 2

修改12行 名字

21 行 备 BACKUP

在web服务上

systemctl enable keepalived.service --now 开机自启动现在启动服务

监控本机80端口,实现主备切换

  • 配置高可用的web集群时,Keepalived只为服务器提供了VIP

  • Keepalived不知道服务器上运行了哪些服务

  • MASTER服务器可以通过跟踪脚本监视本机的80端口,一旦本机80端口失效,则将VIP切换至BACKUP服务器

  • Keepalived对脚本的要求是,退出码为0表示访问成功;退出码为1表示失败。

在vim中

:! 输入命令可以复制查看

:r !(执行) 想要的命令

修改MASTER配置文件,使用脚本

[root@web1 ~]# vim /etc/keepalived/keepalived.conf

1 ! Configuration File for keepalived

2

3 global_defs {

...略...

18 }

19

20 vrrp_script chk_http_port { # 定义监视脚本

21 script "/etc/keepalived/check_http.sh"

22 interval 2 # 脚本每隔2秒运行一次

23 }

24

25 vrrp_instance VI_1 {

26 state MASTER

27 interface eth0

28 virtual_router_id 51

29 priority 100

30 advert_int 1

31 authentication {

32 auth_type PASS

33 auth_pass 1111

34 }

35 virtual_ipaddress {

36 192.168.88.80/24

37 }

38 track_script { # 引用脚本

39 chk_http_port

40 }

41 }

关闭web1的nginx后,VIP将会切换至web2

当MASTER的nginx修复后,VIP将会切换回至web1

配置高可用、负载均衡的web集群

使用 ansible 改主机清单名

ansible -a "hostnamectl set-hostname {{inventory_hostname}}" 使用inventory_hostname变量

1 配置网络参数

2 配置yum

3 web服务器配置agin

4 web服务器上配置内核参数

5 web服务器配置vip

6 在lvs上安装keepalived和ipvsadm

7 修改keepalived配置文件

8 启服务

9 测试

  1. 在2台web服务器的lo上配置vip

  2. 在2台web服务器上配置内核参数

  3. 删除lvs1上的eth0上的VIP地址。因为vip将由keepalived接管

vim 09-del-lvs1-vip.yml

---

- name: del lvs1 vip

hosts: lvs1

tasks:

   - name: rm vip

  lineinfile: # 在指定文件中删除行

   path: /etc/sysconfig/network-scripts/ifcfg-eth0

   regexp: 'IPADDR2=' # 正则匹配

   state: absent

  notify: restart system

handlers:

- name: restart system

shell: reboot

上传yum

安装ipvsadm keepalived

---

- name: install lvs keepalived

hosts: lb

tasks:

   - name: install pkgs # 安装软件包

  yum:

   name: ipvsadm,keepalived

   state: present

vim /etc/keepalived/keepalived.conf

12 router_id lvs1 # 为本机取一个唯一的id

13 vrrp_iptables # 自动开启iptables放行规则

... ...

20 vrrp_instance VI_1 {

21 state MASTER

22 interface eth0

23 virtual_router_id 51

24 priority 100

25 advert_int 1

26 authentication {

27 auth_type PASS

28 auth_pass 1111

29 } 30 virtual_ipaddress {

31 192.168.88.15 # vip地址,与web服务器的vip一致

32 }

33 }

以下为keepalived配置lvs的规则

35 virtual_server 192.168.88.15 80 { # 声明虚拟服务器地址

36 delay_loop 6 # 健康检查延迟6秒开始

37 lb_algo wrr # 调度算法为wrr

38 lb_kind DR # 工作模式为DR

39 persistence_timeout 50 # 50秒内相同客户端调度到相同服务器

40 protocol TCP # 协议是TCP

41

42 real_server 192.168.88.100 80 { # 声明真实服务器

43 weight 1 # 权重

44 TCP_CHECK { # 通过TCP协议对真实服务器做健康检查

8 dd 删掉中间的SSL健康检测

45 connect_timeout 3 # 连接超时时间为3秒

46 nb_get_retry 3 # 3次访问失败则认为真实服务器故障

47 delay_before_retry 3 # 两次检查时间的间隔3秒

48 }

49 }

8yy p 复制 web2的配置

50 real_server 192.168.88.200 80 {

51 weight 2

52 TCP_CHECK {

53 connect_timeout 3

54 nb_get_retry 3

55 delay_before_retry 3

56 }

57 }

58 }

以下部分删除

启动keepalived服务

[root@lvs1 ~]# systemctl start keepalived

验证

[root@lvs1 ~]# ip a s eth0 | grep 88

inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0

inet 192.168.88.15/32 scope global eth0

[root@lvs1 ~]# ipvsadm -Ln # 出现规则

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.88.15:80 wrr persistent 50

-> 192.168.88.100:80 Route 1 0 0 -> 192.168.88.200:80 Route 2 0 0

客户端连接测试

[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done

Welcome from web2

Welcome from web2

Welcome from web2

Welcome from web2

Welcome from web2

Welcome from web2

为了效率相同的客户端在50秒内分发给同一台服务器。为了使用同一个客户端可以看到轮询效果,可以注释配置文件中相应的行后,重启keepavlied。

[root@lvs1 ~]# vim +39 /etc/keepalived/keepalived.conf

...略...

# persistence_timeout 50

...略...

[root@lvs1 ~]# systemctl restart keepalived.service

在客户端验证

[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done

Welcome from web2

Welcome from web1

Welcome from web2

Welcome from web2

Welcome from web1

Welcome from web2

配置LVS2

[root@lvs1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.6:/etc/keepalived/

[root@lvs2 ~]# vim /etc/keepalived/keepalived.conf

12 router_id lvs2

21 state BACKUP

24 priority 80

[root@lvs2 ~]# systemctl start keepalived

[root@lvs2 ~]# ipvsadm -Ln # 出现规则

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.88.15:80 wrr

-> 192.168.88.100:80 Route 1 0 0 -> 192.168.88.200:80 Route 2 0 0

验证

验证真实服务器健康检查

[root@web1 ~]# systemctl stop nginx

[root@lvs1 ~]# ipvsadm -Ln # web1在规则中消失

[root@lvs2 ~]# ipvsadm -Ln

[root@web1 ~]# systemctl start nginx

[root@lvs1 ~]# ipvsadm -Ln # web1重新出现在规则中

[root@lvs2 ~]# ipvsadm -Ln

2. 验证lvs的高可用性

[root@lvs1 ~]# shutdown -h now # 关机

[root@lvs2 ~]# ip a s | grep 88 # 可以查看到vip

inet 192.168.88.6/24 brd 192.168.88.255 scope global noprefixroute eth0

inet 192.168.88.15/32 scope global eth0

客户端访问vip依然可用

HAProxy

  • 也是一款实现负载均衡的调度器

  • 适用于负载特别大的web站点

  • HAProxy的工作模式:

    • mode http:只适用于web服务

    • mode tcp:适用于各种服务

    • mode health:仅做健康检查,很少使用

安装 haproxy yum -y install haproxy

修改配置文件

vim /etc/haproxy/haproxy.cfg

配置文件中,global是全局配置;default是缺省配置,如果后续有和default相同的配置,default配置将会被覆盖。

配置文件中,frontend描述haproxy怎么和用户交互;backend描述haproxy怎么和后台应用服务器交互。这两个选项,一般不单独使用,而是合并到一起,名为listen。

将64行之后全部删除,写入以下内容

64 #---------------------------------------------------------------------

65 listen myweb # 定义虚拟服务器

66 bind 0.0.0.0:80 # 监听在所有可用地址的80端口

67 balance roundrobin # 定义轮询调度算法

对web服务器做健康检查,2秒检查一次,如果连续2次检查成功,认为服务器是健康的,如果连续5次检查失败,认为服务器坏了

68 server web1 192.168.88.100:80 check inter 2000 rise 2 fall 5

69 server web2 192.168.88.200:80 check inter 2000 rise 2 fall 5

70

71 listen stats # 定义虚拟服务器

72 bind 0.0.0.0:1080 # 监听在所有可用地址的1080端口

73 stats refresh 30s # 设置监控页面自动刷新时间为30秒

74 stats uri /stats # 定义监控地址是/stats

75 stats auth admin:admin # 监控页面的用户名和密码都是admin

时间 地点 人物 PID

启服务

[root@haproxy1 ~]# systemctl start haproxy.service

使用firefox访问监控地址 http://192.168.88.5:1080/stats

客户端访问测试

[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.5/; done

Welcome from web2

Welcome from web1

Welcome from web2

Welcome from web1

Welcome from web2

Welcome from web1

client1上使用ab访问

[root@client1 ~]# yum install -y httpd-tools

[root@client1 ~]# ab -n1000 -c200 http://192.168.88.5/

1-1023 建议使用1024以上到65535

listen stats # 定义虚拟服务器

72 bind 0.0.0.0:1080 # 监听在所有可用地址的1080端口

73 stats refresh 30s # 设置监控页面自动刷新时间为30秒

74 stats uri /stats # 定义监控地址是/stats

75 stats auth admin:admin # 监控页面的用户名和密码都是admin

client1上使用ab访问

[root@client1 ~]# yum install -y httpd-tools

[root@client1 ~]# ab -n1000 -c200 http://192.168.88.5/

Queue:

cur:当前队列长度,即正在等待处理的请求数量。

max:队列最大长度,即队列中最多可以容纳的请求数量。

Limit:队列限制数。

Session rate:

cur:当前会话数,即当前已经建立的会话数量。

max:会话最大数,即同时存在的最大会话数量。

Limit:会话限制数,即haproxy配置文件中backend中定义的maxconn参数。

Total:总会话数,即从haproxy启动到现在已经建立的会话总数。

Bytes:

in:从客户端到haproxy的流量,即接收到的字节数。

out:从haproxy到后端服务器的流量,即发送的字节数。

Denied:

req:已经发出但未收到响应的请求数量。

resp:已经收到但未发出响应的响应数量。

Errors:

req:请求错误数量,即由于客户端断开连接或者超时等原因导致的请求失败数量。

con:连接错误数量,即由于后端服务器连接失败导致的请求失败数量。

resp:响应错误数量,即由于后端服务器响应错误导致的请求失败数量。

Warnings:

retr:重试请求的数量,即由于后端服务器返回错误码或者超时等原因导致的请求重试数量。

redis:重试请求失败的数量,即由于后端服务器返回错误码或者超时等原因导致。

rpm包 详情

名称 版本 发布号 适用于版本 适用于架构

yum install -y httpd-tools

ab -n1000 -c200 http://192.168.88.5/

负载均衡调度器比较

LVS适用于需要高并发性和稳定性的场景,Nginx适用于静态文件服务和反向代理等应用层负载均衡场景,HAProxy则具备较为丰富的功能和灵活性,适用于多种负载均衡场景。

LVS(Linux Virtual Server)

优点:

  • 高性能:LVS使用Linux内核中的IP负载均衡技术,能够实现非常高的并发处理能力。

  • 稳定性:LVS经过长时间的实践应用,成熟稳定,被广泛使用。

  • 可用性:支持高可用性的配置,可以实现故障自动切换,提供无中断的服务。

  • 灵活性:可根据需要采用多种负载均衡算法,如轮询、加权轮询、哈希等。

缺点:

  • 配置复杂:相对于其他两个技术,LVS的配置相对较为复杂,需要更深入的了解和配置。

  • 功能相对局限:LVS主要是一种传输层负载均衡技术,无法像Nginx和HAProxy那样对应用层协议进行处理。

Nginx

优点:

  • 高性能:Nginx采用了基于事件驱动的异步非阻塞架构,能够处理大量并发连接。

  • 负载均衡:Nginx具备内置的负载均衡功能,可以根据配置进行请求的转发。

  • 丰富的功能:Nginx支持反向代理、静态文件服务、缓存、SSL等,在Web服务器领域有很广泛的应用。

缺点:

  • 功能相对较少:相对于LVS和HAProxy,Nginx在负载均衡算法和健康检查等方面的功能相对较少。

  • 限制于应用层协议:Nginx只能对HTTP和HTTPS等应用层协议进行处理,无法处理其他协议。

HAProxy

优点:

  • 灵活性:HAProxy支持丰富的负载均衡算法和会话保持方式,可以根据需求进行灵活配置。

  • 完整的功能:HAProxy支持高可用性配置、健康检查、故障恢复、SSL等功能,在负载均衡领域应用广泛。

  • 高性能:HAProxy性能优良,能够处理大量并发连接,并且支持异步IO模型。

缺点:

  • 内存占用:相对于Nginx和LVS,HAProxy在处理大量连接时消耗的内存稍高一些。

  • 高可用性:HAProxy需要借助额外的工具来实现高可用性,例如Keepalived。

当keepalived与lvs连用时,keepalived可以替lvs做哪些工作?

keepalived 与 lvs 连用时,keepalived 可以替 lvs 做以下工作:

实现高可用性:keepalived 可以监控 lvs 集群中的各个节点,当某个节点出现故障时,keepalived 可以自动将该节点从集群中剔除,从而保证整个集群的高可用性。

实现负载均衡:keepalived 可以根据一定的负载均衡算法,将客户端请求分发到 lvs 集群中的各个节点上,从而实现负载均衡。

实现健康检查:keepalived 可以定期对 lvs 集群中的各个节点进行健康检查,当某个节点出现故障时,keepalived 可以自动将该节点从集群中剔除,从而保证整个集群的高可用性。

实现虚拟 IP:keepalived 可以为 lvs 集群提供虚拟 IP,客户端请求都发送到虚拟 IP 上,然后由 keepalived 将请求分发到 lvs 集群中的各个节点上,从而实现负载均衡和高可用性。

实现故障转移:当 lvs 集群中的某个节点出现故障时,keepalived 可以自动将该节点从集群中剔除,并将虚拟 IP 转移到其他正常节点上,从而实现故障转移。

实现状态同步:当 lvs 集群中的某个节点出现故障时,keepalived 可以将该节点的状态同步到其他正常节点上,从而保证整个集群的状态一致性。

总之,keepalived 可以为 lvs 集群提供高可用性、负载均衡、健康检查、虚拟 IP、故障转移和状态同步等功能。

Keepalived中track_script的的作用是什么?

在keepalived配置文件中,track_script用于检查一个脚本的返回值,如果返回值为0,则认为当前主机处于正常状态,如果返回值为1,则认为当前主机处于异常状态,需要将VIP地址切换到另一台备用机器上。

track_script配置项可以放在vrrp_instance或vrrp_script块中,其中vrrp_instance是用于定义一个VRRP实例配置,vrrp_script是定义一个脚本名称和执行脚本的配置项。

通过配置track_script来检测应用程序或服务是否正常,可以增加VIP地址更准确、可靠的自动切换功能,提高系统的可用性和可靠性。

haproxy属于哪种集群?其工作原理是什么?

haproxy属于L4和L7负载均衡器,可以在TCP和HTTP层面上进行负载均衡。

其工作原理是将客户端请求转发到后端服务器,从而实现负载均衡。具体来说

haproxy会根据预先定义的负载均衡算法(如轮询、加权轮询、最少连接数等)将请求分配给后端服务器,并且会根据后端服务器的健康状况进行动态调整

同时,haproxy还支持会话保持、SSL终止、请求重定向等高级功能,可以满足各种负载均衡场景的需求。

配置高可用的web集群

使用tomcat创建两台web服务器

配置web服务器实现高可用集群

VIP地址是192.168.88.80

配置web1为master,web2为backup

当master节点的tomcat出现故障,则切换VIP到web2

不要使用ansible配置

创建虚拟机,并配置IP地址

骤二:配置yum

骤三:安装tomcat

在web服务器上配置keepalived

web1上的配置

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

[root@web1 ~]# vim /etc/keepalived/keepalived.conf

1 ! Configuration File for keepalived

2

3 global_defs {

4 notification_email {

5 acassen@firewall.loc

6 failover@firewall.loc

7 sysadmin@firewall.loc

8 }

9 notification_email_from Alexandre.Cassen@firewall.loc

10 smtp_server 192.168.200.1

11 smtp_connect_timeout 30

12 router_id web1

13 vrrp_iptables

14 vrrp_skip_check_adv_addr

15 vrrp_strict

16 vrrp_garp_interval 0

17 vrrp_gna_interval 0

18 }

19

20 vrrp_instance VI_1 {

21 state MASTER

22 interface eth0

23 virtual_router_id 51

24 priority 100

25 advert_int 1

26 authentication {

27 auth_type PASS

28 auth_pass 1111

29 }

30 virtual_ipaddress {

31 192.168.88.80

32 }

33 }

[root@web1 ~]# systemctl start keepalived.service

[root@web1 ~]# ip a s | grep 192

inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0

inet 192.168.88.80/32 scope global eth0

web2的配置

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

[root@web2 ~]# vim /etc/keepalived/keepalived.conf

1 ! Configuration File for keepalived

2

3 global_defs {

4 notification_email {

5 acassen@firewall.loc

6 failover@firewall.loc

7 sysadmin@firewall.loc

8 }

9 notification_email_from Alexandre.Cassen@firewall.loc

10 smtp_server 192.168.200.1

11 smtp_connect_timeout 30

12 router_id web1

13 vrrp_iptables

14 vrrp_skip_check_adv_addr

15 vrrp_strict

16 vrrp_garp_interval 0

17 vrrp_gna_interval 0

18 }

19

20 vrrp_instance VI_1 {

21 state BACKUP

22 interface eth0

23 virtual_router_id 51

24 priority 50

25 advert_int 1

26 authentication {

27 auth_type PASS

28 auth_pass 1111

29 }

30 virtual_ipaddress {

31 192.168.88.80

32 }

33 }

[root@web2 ~]# systemctl start keepalived.service

[root@web2 ~]# ip a s | grep 192

inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0

客户端访问VIP,web1响应

在web1创建跟踪脚本

ss -ntulp | grep :8080 &> /dev/null && exit 0 || exit 1

修改配置文件

[root@web1 ~]# vim /etc/keepalived/keepalived.conf

1 ! Configuration File for keepalived

2

3 global_defs {

4 notification_email {

5 acassen@firewall.loc

6 failover@firewall.loc

7 sysadmin@firewall.loc

8 }

9 notification_email_from Alexandre.Cassen@firewall.loc

10 smtp_server 192.168.200.1

11 smtp_connect_timeout 30

12 router_id web1

13 vrrp_iptables

14 vrrp_skip_check_adv_addr

15 vrrp_strict

16 vrrp_garp_interval 0

17 vrrp_gna_interval 0

18 }

19

20 vrrp_script track_tomcat {

21 script "/etc/keepalived/track_tomcat.sh"

22 interval 2

23 }

24

25 vrrp_instance VI_1 {

26 state MASTER

27 interface eth0

28 virtual_router_id 51

29 priority 100

30 advert_int 1

31 authentication {

32 auth_type PASS

33 auth_pass 1111

34 }

35 virtual_ipaddress {

36 192.168.88.80

37 }

38 track_script {

39 track_tomcat

40 }

41 }

重启服务

[root@web1 ~]# systemctl restart keepalived.service

验证跟踪脚本

停止web1的tomcat程序

[root@web1 ~]/usr/local/tomcat/bin/shutdown.sh

[root@web1 ~]ss-tlnp | grep :8080无输出

[root@web1 ~]ip a s| grep 192 # VIP消失

inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0

查看web2的VIP

[root@web2 ~]ip a s| grep 192

inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0

inet 192.168.88.80/32 scope global eth0

客户端访问VIP,则由web2响应

[root@myhost ~]curl http://192.168.88.80:8080

tomcat web site2

配置haproxy负载均衡集群

骤一:准备web服务器

配置yum

安装haproxy

yum install -y haproxy

:配置haproxy实现负载均衡集群

修改配置文件

[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg # 删除65行以后部分,再添加以下内容

65 listen tomcat

66 bind *:8080

67 balance roundrobin

68 server web1 192.168.88.100:8080 check inter 2000 rise 2 fall 5

69 server web2 192.168.88.200:8080 check inter 2000 rise 2 fall 5

启动服务

[root@haproxy1 ~]# systemctl start haproxy.service

在客户端进行验证

for i in {1..4}

do

curl http://192.168.88.5:8080/

done

:配置监控页

在配置文件最后增加以下内容:

[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg

71 listen monitor

72 bind *:80

73 stats refresh 30s

74 stats uri /monitor

75 stats auth root:123

[root@haproxy1 ~]# systemctl restart haproxy

访问http://192.168.88.5/monitor,填入用户名root,密码123

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值