请选择 进入手机版 | 继续访问电脑版

Ucloud:keepalived软件实现双机热备高可用

[复制链接]
查看: 693|回复: 0
avatar

630

主题

630

帖子

1920

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1920
online_admin 发表于 2021-8-24 18:46:53 | 显示全部楼层 |阅读模式
一.keepalived软件简介

Keepalived——保持存活,在网络里的含义就是保持在线。Keepalived提供高可用和热备的功能,用来防止单点故障的发生。

Keepalived实现的基础是VRRP协议,我们将会在这一节中简要介绍VRRP协议的基本原理

1.1 VRRP协议

VRRP 协议是为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不 影响内外数据通信,不需要再修改内部网络的网络参数。VRRP协议具有IP地址备份,优先路由选择,减少不必要的路由器间通信等功能

VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器 能够工作正常的话就是MASTER, MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收 MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。

配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一 个组,VRID是一个0~255的正整数;同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的 正整数。

VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有 MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一 定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。

1.2 MASTER选举

如果对外的虚拟路由器IP就是路由器本身配置的IP地址的话,该路由器始终都是MASTER;否则如果不具备虚拟IP的话,将进行MASTER选 举,各路由器都宣告自己是MASTER,发送VRRP通告信息;如果收到其他机器的发来的通告信息的优先级比自己高,将转回BACKUP状态;如果优先级 相等的话,将比较路由器的实际IP,IP值较大的优先权高;不过如果对外的虚拟路由器IP就是路由器本身的IP的话,该路由器始终将是MASTER,这时 的优先级值为255。

二.Keepalived内部原理

2.1 Keepalived组件

keepalived是模块化设计,不同模块负责不同的功能。

corekeepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等;

check负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置文件的解析;

vrrpVRRPD子进程,用来实现VRRP协议;

libipfwciptables(ipchains)库,配置LVS;

libipvs*配置LVS;

2.2 Keepalived进程

keepalived启动后会有三个进程:

父进程:内存管理,子进程管理等等

子进程:VRRP子进程

子进程:healthchecker子进程

两个子进程都被系统WatchDog看管,两个子进程各自负责自己的事,healthchecker子进程负责检查各自服务器的健康程度,如果 healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为 BACKUP状态。

三.keepalived软件高可用配置案例

3.1 下载keepalived的源码

官方网站http://www.keepalived.org 直接链接:

http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

3.2 将下载的源码复制到/usr/src解压缩

cp keepalived-1.1.15.tar.gz /usr/src

cd /usr/src

tar xvzf keepalived-1.1.15.tar.gz

cd keepalived-1.1.15

3.3 生成编译配置文件

./configure (默认安装到/usr/local,可以使用--prefix=参数指定安装目录)

make

make install

安装程序会复制下列文件和配置:

* keepalived : keepalived守护程序

* genhash : MD5生成器

* /etc/keepalived/keepalived.conf keepalived配置文件

注意在编译过程中会报下面的错误:

> checking openssl/ssl.h usability... no

> checking openssl/ssl.h presence... no

> checking for openssl/ssl.h... no

> configure: error:

> !!! OpenSSL is not properly installed on your system. !!!

> !!! Can not include OpenSSL headers files. !!!

需要安装openssl-devel,keepalive所依赖的包

=====================================

3.4 配置keepalive为系统服务

cp /usr/local/keepalive/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp /usr/local/keepalive/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/keepalive/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalive/sbin/keepalived /usr/sbin/

service keepalived start

chkconfig keepalived on ######设置系统开机启动

3.5 编辑master的配置文件

vim /usr/local/etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

state MASTER #(主机为MASTER,备用机为BACKUP)

interface eth0 #(HA监测网络接口)

track_interface { #其他要监测状态的接口

eth1

}

virtual_router_id 51 #(主、备机的virtual_router_id必须相同)

priority 500 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)

advert_int 1 #(VRRP Multicast广播周期秒数)

authentication {

auth_type PASS #(VRRP认证方式)

auth_pass 1111 #(VRRP口令字)

}

virtual_ipaddress {

192.168.3.3 #(VRRP HA虚拟地址)

}

}

3.6 编辑backup上的配置文件

vim /usr/local/etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

state BACKUP

interface eth0

track_interface { # Interfaces state we monitor

eth1

}

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.3.3

}

}

track_interface的意思是将Linux中你想监控的网络接口卡监控起来,当其中的一块出现故障是keepalived都将视为路由器出现故障。

3.7 分别在两台机器上启用Multicast路由,注意这步很重要

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

3.8 在master和backup上启动keepalived

/usr/local/keepalived/sbin/keepalived –D –f

或者service keepalived restart

在启动Master上的keepalived之前,我们先看一下Master上eth0的情况:

————————————————————–

# ip add show eth0

8: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:e0:4c:3a:d7:25 brd ff:ff:ff:ff:ff:ff

inet 192.168.3.1/24 brd 192.168.3.255 scope global eth1

inet6 fe80::2e0:4cff:fe3a:d725/64 scope link

————————————————————–

我们看到只有一个IP地址:192.168.3.1/24,现在我们启动Master上的keepalived

#/usr/local/keepalived/sbin/keepalived –D –f

或者service keepalived restart

现在我们再看一下Master上eth0的情况:

————————————————————–

# ip add show eth0

8: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:e0:4c:3a:d7:25 brd ff:ff:ff:ff:ff:ff

inet 192.168.3.1/24 brd 192.168.3.255 scope global eth1

inet 192.168.3.3/32 scope global eth1

inet6 fe80::2e0:4cff:fe3a:d725/64 scope link

—————————————————————

我们看到有两个IP地址,其中一个就是V-Gate:192.168.3.3/32

用同样的方法启动Backup上的keepalived

#/usr/local/keepalived/sbin/keepalived –D –f

或者service keepalived restart

这样,当Master失效时,Backup就会通过MultiCast地址:224.0.0.18这个组播地址,获得这个消息,并将192.168.3.3这个地址接管过来。

3.9 keepalive高可用验证

1) 在一台PC ping 172.31.0.100看是否能ping通,再输入ip add show eth0这个命令,看eth0是不是有两个IP地址,Master会有172.31.0.100这个地址,BACKUP正常情况下只有一个网卡地址。

2) 关掉Master的网卡eth0,正常情况下ping会掉2个包后会重新连接上。这时在BACKUP输入ip add show eth0,看eth0是否有两个IP地址,有172.31.0.100表示已经变成MASTER。

3) 如果是默认的抢占模式,重新激活MASTER的eth0后,正常情况下也会掉两个包,然后ping重新连上,这时MASTER重新抢占了MASTER角色。
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

logo
  • 反馈建议:893566502@qq.com
  • 工作时间:周一到周五 10:00-19:00

关注我们

  • wx