keepalived双机热备

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介: keepalived双机热备

      本章将实现如何使用keepalived实现双机热备,包括针对IP地址的故障切换,以及在LVS高可用群集中的热备应用。

keepalived双机热备基础知识

       keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。

keepalived概述及安装

       keepalived的官方网站位于Keepalived for Linux。在非LVS群集环境中使用时,keepalived也可以作为热备份软件使用。

  • keepalived的热备方式

       keepalived采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。

       一主 + 多备,共用同一个IP地址,但优先级不同。

       热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址。使用keepalived时,漂移地址的实现不需要手动建立虚拟接口配置文件(如 ens33:0),而是由keepalived根据配置文件自动管理。

  • keepalived的安装与服务控制

(1)安装keepalived

       在安装方式中选择YUM安装,会自动安装keepalived所需的软件包,除此之外,在LVS群集环境中也会用到ipvsadm管理工具。

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

(2)控制keepalived服务

1. [root@localhost ~]# systemctl enable keepalived
2. Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

使用keepalived实现双机热备

       主、备服务器中都需要安装keepalived。

主服务器的配置

       keepalived服务的配置目录位于/etc/keepalived/。其中,keepalived.conf是主配置文件;另外包括一个子目录samples/,提供了许多配置样例作为参考。在keepalived的配置文件中,使用“global_defs {...}”区段指定全局参数,使用“vrrp_instance 实例名称 {...}”区段指定VRRP热备参数,注释文字以“!”符号开头。

1. [root@localhost ~]# systemctl stop firewalld
2. [root@localhost ~]# cd /etc/keepalived/
3. [root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak         //备份主配文件
4. [root@localhost keepalived]# vim keepalived.conf
5. global_defs {
6. ......//省略部分内容
7.    router_id LVS_DEVEL                  //路由器(服务器)名称(建议指定不同的名称区分路由)
8. }
9. 
10. vrrp_instance VI_1 {                    //定义VRRP热备实例
11.     state MASTER                        //热备状态,MASTER表示主服务器
12.     interface ens33                     //承载VIP地址的物理接口
13.     virtual_router_id 51                //虚拟路由器的ID号,每个热备组保持一致
14.     priority 100                        //优先级,数值越大优先级越高
15.     advert_int 1                        //通告间隔秒数(心跳频率)
16.     authentication {                    //认证信息,每个热备组保持一致
17.         auth_type PASS                  //认证类型
18.         auth_pass 1111                  //密码字串
19.     }
20.     virtual_ipaddress {                 //指定漂移地址(VIP),可以是多个
21.        200.0.0.100
22.     }
23. }

       确认上述配置无误,然后启动keepalived服务。实际状态为MASTER的主服务器将为ens33接口自动添加VIP地址,通过IP命令可以查看(注意:ifconfig命令看不到)。

1. [root@localhost keepalived]# systemctl start keepalived
2. [root@localhost keepalived]# ip a show dev ens33
3. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
4.     link/ether 00:0c:29:af:af:9d brd ff:ff:ff:ff:ff:ff
5.     inet 200.0.0.1/24 brd 200.0.0.255 scope global ens33
6.        valid_lft forever preferred_lft forever
7.     inet 200.0.0.100/32 scope global ens33
8.        valid_lft forever preferred_lft forever
9.     inet6 fe80::5f65:9c3d:d218:7cea/64 scope link 
10.        valid_lft forever preferred_lft forever

备用服务器的配置

       在同一个keepalived热备组内,所有服务器的keepalived配置文件基本相同,包括虚拟路由器的ID号、认证信息、漂移地址、心跳频率等。不同之处主要在于路由器名称、热备状态、优先级。

  1. 路由器名称(router_id):建议为每个参与热备的服务器指定不同的名称。
  2. 热备状态(state):至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为BACKUP。
  3. 优先级(proiority):数值越大则取得VIP控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突。

       配置备用服务器(可以有多台)时,可以参考主服务器的keepalived.conf配置文件内容,只要修改路由器名称、热备状态、优先级就可以了。

1. [root@localhost ~]# systemctl stop firewalld
2. [root@localhost ~]# cd /etc/keepalived/
3. [root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
4. [root@localhost keepalived]# vim keepalived.conf
5. global_defs {
6. ......//省略部分内容
7.    router_id LVS_DEVEL2                 //修改备份路由名称
8. }
9. 
10. vrrp_instance VI_1 {
11.     state BACKUP                        //修改热备状态(备份)
12.     interface ens33                     //修改承载VIP地址的物理接口
13.     virtual_router_id 51
14.     priority 90                         //优先级,数值应低于主服务器
15.     advert_int 1
16.     authentication {
17.         auth_type PASS
18.         auth_pass 1111
19.     }
20.     virtual_ipaddress {
21.        200.0.0.100                     //漂移地址
22.     }
23. }

       确认配置无误,一样需要启动keepalived服务。此时主服务器仍然在线,VIP地址实际上任然由主服务器控制,其他服务器处于备份状态,因此在备份服务器中将不会为ens33接口添加VIP地址。

1. [root@localhost keepalived]# ip a show dev ens33
2. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
3.     link/ether 00:0c:29:3c:d0:8b brd ff:ff:ff:ff:ff:ff
4.     inet 200.0.0.2/24 brd 200.0.0.255 scope global ens33
5.        valid_lft forever preferred_lft forever
6.     inet6 fe80::595f:84d:a379:7b6e/64 scope link 
7.        valid_lft forever preferred_lft forever

测试双机热备功能

       keepalived的日志消息保存在/var/log/messages文件中,在测试主、备故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。

  • 连通性测试

       客户机中执行"ping -t 200.0.0.10"命令,能够正常、持续ping通,根据一下操作继续观察测试结果。

  1. 停止主服务器的keepalived服务,发现ping测试只中断了1或2个包即恢复正常,说明已有其他服务器接替VIP地址,并及时响应客户机请求。
  2. 启动主服务器的keepalived服务,发现ping测试只中断了1或2个包即恢复正常,说明主服务器已回复正常,并夺回VIP地址的控制权。
  • 查看日志记录

       在执行主、备服务器故障切换时的过程中,分别观察各自的/var/log/messages日志文件,可以看到MASTER、SLAVE状态的迁移记录。

       通过上述测试过程,可以发现双机热备已经正常。客户机只要通过VIP地址就可以访问服务器所提供的Web等应用,其中任何一台服务器失效,另一台服务器将会立即接替服务,从而实现高可用性。实际应用中,注意主、备服务器所提供的Web服务内容要保持一致。

LVS+Keepalived高可用群集

       keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。使用keepalived构建LVS群集更加简便易用,主要有事体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后在重新加入。

实验准备

       根据下图配置IP,关闭防火墙,实现keepalived+LVS-DR高可用的负载均衡web群集。

配置主调度器

  • 安装ipvsadm和keepalived包。
1. [root@localhost ~]# yum -y install keepalived ipvsadm
2. [root@localhost ~]# systemctl enable keepalived
3. Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
  • 修改内核参数文件,关闭ICMP重定向。
1. [root@localhost ~]# vim /etc/sysctl.conf
2. net.ipv4.conf.all.send_redirects = 0
3. net.ipv4.conf.default.send_redirects = 0
4. net.ipv4.conf.ens33.send_redirects = 0
5. [root@localhost ~]# sysctl -p               //设置参数立即生效
6. net.ipv4.conf.all.send_redirects = 0
7. net.ipv4.conf.default.send_redirects = 0
8. net.ipv4.conf.ens33.send_redirects = 0
  • keepalived.conf配置
1. [root@localhost ~]# vim /etc/keepalived/keepalived.conf
2. ! Configuration File for keepalived
3. 
4. global_defs {
5. ......//省略部分内容
6.    router_id R1                     //修改名称
7. }  
8. 
9. vrrp_instance VI_1 {
10.     state MASTER                    //配置热备状态
11.     interface ens33                 //设置承载VIP的物理接口
12.     virtual_router_id 51
13.     priority 100                    //主服务器优先级设为100
14.     advert_int 1
15.     authentication {
16.         auth_type PASS
17.         auth_pass 1111
18.     }
19.     virtual_ipaddress {
20.        200.0.0.100                 //设置群集VIP地址
21.     }
22. }
23. virtual_server 200.0.0.100 80 {     //配置虚拟服务器地址(VIP)、端口
24.     delay_loop 15                   //配置健康检查的间隔时间(秒)
25.     lb_algo rr
26.     lb_kind DR                      //配置直接路由模式
27.     nat_mask 255.255.255.0
28.     ! persistence_timeout 50        //连接保持时间(秒),若启用去掉!号
29.     protocol TCP
30. 
31.     real_server 200.0.0.3 80 {      //第一个web节点的地址、端口
32.         weight 1
33.         TCP_CHECK {                 //健康检查方式
34.                 connect_port 80     //检查的目标端口
35.             connect_timeout 3
36.             nb_get_retry 3
37.             delay_before_retry 3
38.         }
39.     }
40.     real_server 200.0.0.4 80 {      //第二个web节点的地址、端口
41.         weight 1
42.         TCP_CHECK {
43.                 connect_port 80
44.             connect_timeout 3
45.             nb_get_retry 3
46.             delay_before_retry 3
47.         }
48.     }
49. }       
50. [root@localhost ~]# systemctl start keepalived
51. [root@localhost ~]# systemctl enable keepalived

配置备调度器

  • 安装ipvsadm和keepalived包。
1. [root@localhost ~]# yum -y install keepalived ipvsadm
2. [root@localhost ~]# systemctl enable keepalived
3. Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
  • 修改内核参数文件,关闭ICMP重定向。
1. [root@localhost ~]# vim /etc/sysctl.conf
2. net.ipv4.conf.all.send_redirects = 0
3. net.ipv4.conf.default.send_redirects = 0
4. net.ipv4.conf.ens33.send_redirects = 0
5. [root@localhost ~]# sysctl -p               //设置参数立即生效
6. net.ipv4.conf.all.send_redirects = 0
7. net.ipv4.conf.default.send_redirects = 0
8. net.ipv4.conf.ens33.send_redirects = 0
  • keepalived.conf配置

       备份调度器的配置和主调度器的配置基本相同,重点需要修改的有路由器名称、热备状态、优先级。

1. [root@localhost ~]# vim /etc/keepalived/keepalived.conf 
2. ! Configuration File for keepalived
3. 
4. global_defs {
5. ......//省略部分内容
6.    router_id R2                     //修改名称  
7. }   
8. 
9. vrrp_instance VI_1 {
10.     state BACKUP                    //配置热备状态
11.     interface ens33                 //设置承载VIP的物理接口
12.     virtual_router_id 51
13.     priority 90                     //备调度器优先级设为90
14.     advert_int 1
15.     authentication {
16.         auth_type PASS
17.         auth_pass 1111
18.     }
19.     virtual_ipaddress {
20.        200.0.0.100                 //设置群集VIP地址
21.     }
22. }   
23. 
24. virtual_server 200.0.0.100 80 {     //配置虚拟服务器地址(VIP)、端口
25.     delay_loop 15                   //配置健康检查的间隔时间(秒)
26.     lb_algo rr
27.     lb_kind DR                      //配置直接路由模式
28.     nat_mask 255.255.255.0
29.    ! persistence_timeout 50         //连接保持时间(秒),若启用去掉!号
30.     protocol TCP
31.    
32.     real_server 200.0.0.3 80 {      //第一个web节点的地址、端口
33.         weight 1
34.         TCP_CHECK {                 //健康检查方式
35.                 connect_port 80     //检查的目标端口
36.             connect_timeout 3
37.             nb_get_retry 3
38.             delay_before_retry 3
39.         }   
40.     }       
41.     real_server 200.0.0.4 80 {      //第二个web节点的地址、端口
42.         weight 1
43.         TCP_CHECK {
44.                 connect_port 80
45.             connect_timeout 3
46.             nb_get_retry 3
47.             delay_before_retry 3
48.         }
49.     }
50. }
51. [root@localhost ~]# systemctl start keepalived
52. [root@localhost ~]# systemctl enable keepalived

配置web

  • 配置ifcfg-lo:0群集IP。
1. [root@localhost ~]# cd /etc/sysconfig/network-scripts/
2. [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
3. [root@localhost network-scripts]# vim ifcfg-lo:0
4. DEVICE=lo:0
5. IPADDR=200.0.0.100
6. NETMASK=255.255.255.255
7. ONBOOT=yes
8. [root@localhost network-scripts]# ifup lo:0
9. [root@localhost network-scripts]# ifconfig lo:0
10. lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
11.         inet 200.0.0.100  netmask 255.255.255.255
12.         loop  txqueuelen 1  (Local Loopback)
  • 修改内核文件,关闭ARP应答。
1. [root@localhost ~]# vim /etc/sysctl.conf
2. net.ipv4.conf.all.arp_ignore = 1
3. net.ipv4.conf.all.arp_announce = 2
4. net.ipv4.conf.default.arp_ignore = 1
5. net.ipv4.conf.default.arp_announce = 2
6. net.ipv4.conf.lo.arp_ignore = 1
7. net.ipv4.conf.lo.arp_announce = 2
8. [root@localhost ~]# sysctl -p
  • 添加一条VIP本地访问路由。
1. [root@localhost ~]# vim /etc/rc.local
2. /sbin/route add -host 200.0.0.100 dev lo:0
3. [root@localhost ~]# route add -host 200.0.0.100 dev lo:0
  • 启动httpd服务,创建测试网页。
1. [root@localhost ~]# yum -y install httpd
2. [root@localhost ~]# echo 1111111 > /var/www/html/index.html
3. [root@localhost ~]# systemctl start httpd
4. [root@localhost ~]# systemctl enable httpd

       web2配置和web1相同,重复操作即可,测试网页可以改成222222用来区分web1和2。

测试负载均衡功能

       客户机访问200.0.0.100,断开主调度器的网卡,再次访问查看是否正常

搭建NFS服务器

       在nfs主机配置共享存储服务器,提供给两台web服务器的后台网页存储。详情参考LVS。

image.png

  • 启动nfs-utils、rpcbind软件包
1. [root@localhost ~]# systemctl enable nfs
2. Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
3. [root@localhost ~]# systemctl enable rpcbind
  • 设置共享目录
1. [root@localhost ~]# mkdir -p /opt/wwwroot
2. [root@localhost ~]# vim /etc/exports
3. /opt/wwwroot    200.0.0.0/24(rw,sync,no_root_squash)
  • 启动服务并查看本机发布的NFS共享目录。
1. [root@localhost ~]# systemctl restart rpcbind
2. [root@localhost ~]# systemctl restart nfs
3. [root@localhost ~]# showmount -e
4. Export list for localhost.localdomain:
5. /opt/wwwroot 200.0.0.0/24
6. [root@localhost ~]# echo 666 > /opt/wwwroot/index.html
  • 两台web挂载共享目录
1. [root@localhost ~]# systemctl enable rpcbind
2. [root@localhost ~]# systemctl restart rpcbind
3. [root@localhost ~]# mount 200.0.0.5:/opt/wwwroot /var/www/html

测试负载均衡功能

       客户机访问200.0.0.100,查看网页是否为共享内容。

       关闭主调度器和web1的网卡,访问网页是否依然为共享内容,访问成功,实验完成。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
监控 应用服务中间件 nginx
使用Keepalived实现双机热备,实现服务高可用
使用Keepalived实现双机热备,实现服务高可用
85 0
|
6月前
|
应用服务中间件 网络安全 nginx
Keepalived双机热备
在一个 LVS 服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但 是对外表现为一个虚拟 IP,主服务器会发送 VRRP 通告信息给备份服务器,当备份服务器收不到 VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟 IP,继续提供服务,从而保证了高可用性。
134 1
|
监控 负载均衡 网络协议
keepalived实现服务高可用
第1章 keepalived服务说明 1.1 keepalived是什么?   Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。
2718 0
|
Linux 网络架构
LVS+keepalived高可用
LVS+keepalived高可用
208 0
LVS+keepalived高可用
|
网络架构
Keepalived 介绍、安装、配置(高可用)
1、keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。 2、VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。
1220 0
|
监控 负载均衡 网络协议
|
Web App开发 网络协议 应用服务中间件
|
监控 Linux 数据安全/隐私保护
|
数据安全/隐私保护 Linux