1 keepalived

keepalived:保持存活,在网络里面即为保持在线。也就是所谓的高可用或热备,用来防止单点故障的发生(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)
keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态。如果某个服务器节点出现异常,或者工作出现故障,keepalived将监测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

  • 特点:

主要提供 loadbalancing(负载均衡)和 high-availability(高可用)功能
负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs)
高可用是通过VRRP协议实现多台机器之间的故障转移服务
采用多进程的设计模式,每个进程负责不同的功能

2 keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全程Virtual Router Redundancy Protocal,即虚拟路由冗余协议。

VRRP 协议:

用于实现路由器冗余的协议
解决静态路由单点故障问题
通过一种竞选(election)协议来实现虚拟路由器的功能
虚拟路由冗余协议,可以认为是实现高路由高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master这样就可以保证路由器的高可用了。

3 keepalived高可用故障切换转移原理

在keepalived服务正常工作时,主master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备backup节点自己还活着,当主master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主master节点的心跳了,于是调用自身的接管程序,接管主master节点的IP资源及服务。而主master节点恢复时,备backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

4 安装keepalived

在server1和server4中都进行安装

unzip keepalived-2.0.20.zip 
cd keepalived-2.0.20
ls
yum install gcc openssl-devel -y		#解决依赖性
./configure --prefix=/usr/local/keepalived --with-init=systemd	#编译keepalived的源码包
make && make install

LVS Keepalived nginx区别 lvs和keepalived区别_IP

这里安装成功,因为IPVS和VRRP框架是YES的

  • 制作软连接方便keepalived的管理与设置
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/

LVS Keepalived nginx区别 lvs和keepalived区别_高可用_02

5 还原之前实验部分内容

在server1中删除VIP并关闭ldirectord服务:

systemctl stop ldirectord.service
systemctl disable ldirectord.service
ip addr del 172.25.254.100/32 dev eth0
ip addr show

LVS Keepalived nginx区别 lvs和keepalived区别_高可用_03

6 修改keepalived的配置文件

在server1中:

cd /etc/keepalived/
ls
vim keepalived.conf
[root@server1 sbin]# 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.01           #设置 smtp server 地址
   smtp_connect_timeout 30        #设置连接 smtp 服务器超时时间
   router_id LVS_DEVEL           #load balancer 的标识 ID,用于 email 警报
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

## VRRPD配置
vrrp_instance VI_1 {
    state MASTER    #备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态
    interface eth0            #HA 监测网络接口
    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.100      
    }
}

## 虚拟服务配置
virtual_server 172.25.64.100 80 {   #定义虚拟服务器
    delay_loop 3       #定义虚拟服务器
    lb_algo rr        #lvs 调度算法,这里使用轮叫
    lb_kind DR        #LVS 是用 DR 模式
    #persistence_timeout 50         #注释掉
    protocol TCP     #指定转发协议类型,有 tcp 和 udp 两种

    real_server 172.25.254.2 80 {    #配置服务节点
		TCP_CHECK{      ##TCP方式的健康检查,realserve 的状态检测设置部分,单位是秒
        weight 1      	##默认为1,0为失效
            connect_timeout 3     #10 秒无响应超时
            retry 3               #重试次数
            delay_before_retry 3    #重试间隔
        }
    }
    
    real_server 172.25.254.3 80 {
		TCP_CHECK {
		weight 1
		connect_port 80
		connect_timeout 3
        }
    }
}

LVS Keepalived nginx区别 lvs和keepalived区别_服务器_04

LVS Keepalived nginx区别 lvs和keepalived区别_服务器_05

配置文件发给备机server4并修改:

scp keepalived.conf root@172.25.0.4:/etc/keepalived/

修改部分为下面框中的两处

LVS Keepalived nginx区别 lvs和keepalived区别_服务器_06

在server1和server4中开启服务:

systemctl start keepalived.service

开启服务后在server1中可以看到VIP(自动分配vip地址)和写好的策略(server4中也会有策略):

LVS Keepalived nginx区别 lvs和keepalived区别_服务器_07

LVS Keepalived nginx区别 lvs和keepalived区别_IP_08

7 测试

在classroom中来进行测试:

  • server1正常工作时:

LVS Keepalived nginx区别 lvs和keepalived区别_IP_09

  • server1宕掉时:
systemctl stop  keepalived.service

在server4中查看到VIP(vip地址漂移到server4)

LVS Keepalived nginx区别 lvs和keepalived区别_高可用_10

测试依然正常

LVS Keepalived nginx区别 lvs和keepalived区别_高可用_11

  • server1开启:

LVS Keepalived nginx区别 lvs和keepalived区别_高可用_12

注意:VIP又重新配置在server1上,server4上的自动消失

结论:keepalived的作用就是保证节点正常工作,如果主节点宕掉,备节点就立刻上场代替主节点工作;当主节点重新正常工作时,立即将备节点替换下去。不会影响客户的使用。