目录
- 一、什么是keepalived
- 二、keepalived工作原理
- 三、故障切换转移原理
- 四、安装keepalived
- 五、配置keepalived
- 六、测试
一、什么是keepalived
- keepalived:保持存活,在网络里面可理解为保持在线,也就是所谓的高可用或热备。用来防止单点故障(一旦某一点出现故障就会导致整个系统架构的不可用)的发生。
- keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态。如果某个服务器节点出现异常,或者工作出现故障,keepalived将监测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
特点:
主要提供 loadbalancing(负载均衡)和 high-availability(高可用)功能:
- 负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs)。
- 高可用是通过 VRRP 协议实现多台机器之间的故障转移服务,采用多进程的设计模式,每个进程负责不同的功能。
二、keepalived工作原理
- keepalived是以VRRP协议为实现基础的,VRRP全称是 Virtual Router Redundancy Protocal,即虚拟路由冗余协议。
- VRRP 协议,通过一种竞选(election)协议来实现虚拟路由器的功能,是用于实现路由器冗余的协议,可以解决静态路由单点故障问题。
虚拟路由冗余协议,可以认为是实现高路由高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个 master 和多个 backup ,master 上面有一个对外提供服务的 vip(该路由器所在局域网内其他机器的默认路由为该 vip),master 会发组播,当 backup 收不到 VRRP 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master,这样就可以保证路由器的高可用了。
三、故障切换转移原理
在keepalived服务正常工作时,主master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备backup节点自己还活着,当主master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主master节点的心跳了,于是调用自身的接管程序,接管主master节点的IP资源及服务。而主master节点恢复时,备backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
四、安装keepalived
使用4台虚拟机,其中server4作为backup节点。
[root@server1 ~]# tar zxf keepalived-2.0.20.tar.gz
[root@server1 ~]# ls
bansys.zip keepalived-2.0.20.tar.gz
jemalloc-3.6.0-1.el7.x86_64.rpm ldirectord-3.9.5-3.1.x86_64.rpm
keepalived-2.0.20 varnish-6.3.1-1.el7.x86_64.rpm
##解决依赖项
[root@server1 keepalived-2.0.20]# yum install gcc -y
[root@server1 keepalived-2.0.20]# yum install openssl-devel -y
[root@server1 keepalived-2.0.20]# ./configure --prefix=/usr/local/keepalived --with-init=systemd
#如果显示yes说明安装成功
#Use IPVS Framework : Yes
[root@server1 keepalived-2.0.20]# make && make install # 安装
制作软连接:
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived/ /sbin/
五、配置keepalived
##还原前面ldirectord实验,没做可忽略这一步
[root@server1 keepalived]# systemctl stop ldirectord
[root@server1 keepalived]# systemctl disable ldirectord
ldirectord.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig ldirectord off
[root@server1 ~]# ip addr del 172.25.254.20/32 dev eth0
[root@server1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:a9:ae:f7 brd ff:ff:ff:ff:ff:ff
inet 172.25.60.253/24 brd 172.25.60.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fea9:aef7/64 scope link
valid_lft forever preferred_lft forever
[root@server1 etc]# cd /etc/keepalived/
[root@server1 keepalived]# ls
keepalived.conf samples
[root@server1 keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost ##节点宕机给谁发送邮件
}
##发送人名称
notification_email_from keepalived@localhost
##发送服务器(本机)
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER ##备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,
#那么将会失去 MASTER 状态
interface eth0 ##监测网络接口
virtual_router_id 51 ##主、备机的 virtual_router_id 必须相同,取值 0-255
priority 100 ##主机的优先级,备份机改为 50,主机优先级一定要大于备机
advert_int 1 ##主备之间的通告间隔秒数
authentication {
auth_type PASS ##设置验证类型,主要有 PASS 和 AH 两种
auth_pass 1111
}
##指定VIP,即切换到MASTER时,这些IP会被添加
##切换到BACKUP时,这些IP会被删除(传给ip addr命令)
##所以每台服务器可以不用绑定任何的虚拟地址
virtual_ipaddress {
172.25.254.20
}
}
## 虚拟服务配置
virtual_server 172.25.254.20 80 {
delay_loop 3 ##当rs报错时,尝试多少次之后才邮件告知
lb_algo rr ##lvs 调度算法,这里使用轮叫
lb_kind DR ##LVS 是用 DR 模式
#persistence_timeout 50
protocol TCP ##指定转发协议类型,有 tcp 和 udp 两种
real_server 172.25.60.52 80 {
TCP_CHECK{
weight 1
connect_port 80
connect_timeout 3
}
}
real_server 172.25.60.53 80 {
TCP_CHECK{
weight 1
connect_port 80
connect_timeout 3
}
}
}
把配置文件发给备机 server4 并修改:
scp keepalived.conf root@172.25.254.54:/etc/keepalived/
修改如图所示两处:
在server1和server4中开启服务:
systemctl start keepalived
六、测试
开启服务后在server1中可以看到 VIP(自动分配vip地址)和写好的策略(server4中也会有策略):
ip addr show
ipvsadm -ln
curl 172.25.254.20
- server1正常工作和server1宕掉时都可以正常工作
- server1宕掉时可以在server4中查看到VIP(vip地址漂移到server4):
- server1重新开启:
systemctl start keepalived
ip addr show #VIP又重新配置在server1上了
keepalived的作用就是保证节点正常工作,如果主节点宕掉,备节点就立刻上场代替主节点工作。当主节点重新正常工作时,立即将备节点替换下去,不会影响客户的使用。