负载均衡集群——LVS之DR模式下的高可用(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的作用就是保证节点正常工作,如果主节点宕掉,备节点就立刻上场代替主节点工作。当主节点重新正常工作时,立即将备节点替换下去,不会影响客户的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值