VRRP虚拟路由冗余协议与keepalived

VRRP:

虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,1998年已推出正式的RFC2338协议标准。
VRRP广泛应用在边缘网络中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及及时在实际第一跳路由器使用失败的情形下仍能够维护路由器间的连通性。

VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。
在这里插入图片描述


Keepalived:

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。


高可用:

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。

计算机的高可用性

计算机系统的可用性用 [1] 平均无故障时间(MTTF)来度量,即计算机系统平均能够正常运行多长时间,才发生一次故障。系统的可用性越高,平均无故障时间越长。可维护性用平均维修时间(MTTR)来度量,即系统发生故障后维修和重新恢复正常运行平均花费的时间。系统的可维护性越好,平均维修时间越短。计算机系统的可用性定义为:MTTF/(MTTF+MTTR) * 100%。由此可见,计算机系统的可用性定义为系统保持正常运行时间的百分比。

负载均衡服务器的高可用性

为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行High Availability监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主管理器就开始再次进行集群管理的工作了。为在主服务器失效的情况下系统能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,保持二者系统的基本一致。


下面实验实现功能:

当客户请求资源时,如果资源服务器有部分无法访问,出现故障,那么客户就会得到一会可以访问,一会不能访问的糟糕体验。当资源服务器都不能访问时,客户就什么都无法得到。

因此我们为了实现高可用性,当有资源服务器故障时,系统可以自动剔除它,不让客户访问,当服务器都故障时,客户可以得到我们指定的资源或者回复。


实验环境:

两台资源服务器,一台主调度器,一台备份调度器,一台测试机
node1:主调度服务器:172.25.12.1
node4:备份服务器:172.25.12.4
node2:web资源服务器1:172.25.12.2
node3:web资源服务器2:172.25.12.3
测试机:真机:172.25.12.250 / 172.25.254.12

测试机为真机,其他均为虚拟机。

实验是在lvs的DR模式基础上完成。具体参见下方博客:LVS (Linux虚拟服务器)
https://blog.csdn.net/dddxxy/article/details/97104112


实验一:高可用:ldirectord 【没有适用于企业7版本,只能用企业6版本的软件】

ldirectord是一个守护进程,用于监视和管理负载平衡虚拟服务器的LVS集群中的真实服务器。

当后台服务器有部分done调时,客户端访问会出现一会可以看到资源,一会看不到资源的情况。这时候需要高可用,使得被done掉的服务器自动被弹出我们的的策略,每次访问时都能只直接访问到正常的服务器。同时我们给缓存服务器DS也添加httpd服务,写入页面,当所有后端服务器都不可访问时,查询到的是缓存服务器DS的http默认发布内容

实验操作:

server1:node1:调度服务器:
ipvsadm -C     ##清除原有策略
modprobe -r ipip   ##删除ipip模块,改用DR模式【tunl模式也可以】
ipvsadm -A -t 172.25.12.100:80 -s rr   #添加策略
ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.2:80 -g  #调度访问的real IP
ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.3:80 -g
systemctl status ipvsadm.service
systemctl start ipvsadm.service  #开启服务
cat /etc/sysconfig/ipvsadm      #查看策略
ip addr add 172.25.12.100/24 dev eth0   

接下来需要在测试主机:有我们的共享yum源:
lftp 下载ldirectord软件包,发送给server1
cd /var/www/html/xyy/addons/ #复制高可用目录名字和路径

在server1:node1:

vim /etc/yum.repos.d/xyy.repo  #在yum仓库追加写入高可用的内容   #ldirectord需要
	[HighAvailability]
	name=HighAvailability
	baseurl=http://172.25.14.250/xyy/addons/HighAvailability
	gpgcheck=0
yum install -y ldirectord-3.9.5-3.1.x86_64.rpm
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm   #查看软件安装生成的文件
vim /usr/share/doc/ldirectord-3.9.5/ldirectord.cf  #编写配置文件  #编写内容见下方
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf  /etc/ha.d/  ##将配置文件放在生成的目录下
yum install -y httpd  #安装apache 
vim /var/www/html/index.html  #写入默认发布文件:当后台服务器全部done掉时会被查询到
vim /etc/httpd/conf/httpd.conf   #将监听端口改为80  #之前做varnish将其改为了8080
systemctl start httpd #开启服务
/etc/init.d/ldirectord start   #开启软件【企业6的开启方式】
chkconfig --list

vim /usr/share/doc/ldirectord-3.9.5/ldirectord.cf
	# Sample for an http virtual service
	virtual=172.25.14.100:80
        	real=172.25.12.2:80 gate
        	real=172.25.12.3:80 gate
        	fallback=127.0.0.1:80 gate
        	service=http
        	scheduler=rr
        	#persistent=600
        	#netmask=255.255.255.255
       		protocol=tcp
        	checktype=negotiate
        	checkport=80
       		request="index.html"
        	#receive="Test Page"
        	#virtualhost=www.x.y.z

在两台web服务器上:

modprobe -r ipip   #lvs残留 #去除ipip模块
ip a   #查看ip
ip addr add 172.25.12.100/24 dev eth0  #手动加上虚拟地址
systemctl start httpd

在测试主机上进行测试:
curl 172.25.14.100
当两台web都是正常开启状态时,轮循访问,有两个结果
当一台开启一台done掉时,只能访问到开启的资源,且不报错
当两台都关掉时,访问DS缓存服务器的资源


实验二:keeplived防止单点故障(DR模式下)

具有lvs的功能,但同时可以有多个,有主有备,当主挂了使备用就去做轮询,继续实现功能。如文章上面介绍一样,keeplived主要解决的就是自动将故障了但又修复好的服务器加入到了我们的集群中,同时,用keeplived代理lvs的功能,并存在主备。当主keeplived挂掉后,不会影响轮循调度,因为有备份服务器。
下面实验keepliaved的配置文件写法:参考官方文档:https://www.keepalived.org/

首先需要下载keepalived,并且这是一个源码资源包,需要编译。
我使用的是keepalived-2.0.17.tar.gz

在server1上面(keepalived的主节点)

默认已经配置好ipvsadm:DR模式【没有配置好参见:https://blog.csdn.net/dddxxy/article/details/97104112】

tar zxf keepalived
cd  解压生成的目录
yum install -y gcc openssl-devel   #编译需要的软件
./configure --prefix=/usr/local/keepalived --with-init=systemd    #配置文件生成
make && make install  #编译
cd /usr/local/keepalived
ls
cd ect/
cd keepalived/
ls
ln -s /usr/local/keepalived/etc/keepalived/  /etc/  #生成链接,取代企业6脚本开启方式
/etc/init.d/ldirectord stop    #关闭上一实验服务
chkconfig ldirectord off    #开机自动启动关闭
systemctl status keepalived.service
vim /etc/keepalived/keepalived.conf编辑配置文件  
#下面内容参考官方说明文件【下面是我自己根据实验的配置,#号及#后面的内容为我注释说明,不在实验中出现】  
ip addr del 172.25.12.100/24 dev eth0  #上面的实验我们添加了IP,现在删除
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
    interface eth0    #接口根据自身接口而定,可以使用 ificonfig查看
    virtual_router_id 12     #私有ID,不唯一
    priority 100     #优先级,主设备优先级高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
   virtual_ipaddress {
        172.25.12.100     #指定虚拟IP
    }
}

virtual_server 172.25.12.100 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR     #通过DR模式轮循【见lvs文章,有说明】
   # persistence_timeout 50  
    protocol TCP

    real_server 172.25.12.2 80 {
        TCP_CHECK{
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.12.3 80 {
        TCP_CHECK{
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
scp /etc/keepalived/keepalived.conf root@172.25.12.4:/root  
#将配置文件拷贝到备份服务器,省去一会编辑备份服务器的配置文件

systemctl start keepalived.services  #开启服务

在server4上面(keepalived的备份节点):

tar zxf keepalived... 
cd 解压后的目录
ls
yum install -y gcc openssl-devel这个要进行源码编译
./configure --prefix=/usr/local/keepalived --with-init=systemd
make && make install
cd /usr/local/keepalived
cd ect/
cd keepalived/
ln -s /usr/local/keepalived/etc/keepalived /etc
###以上操作和主服务器的是一样的##
cd /root
mv keepalived.conf /etc/keepalived

vim keepalived.conf
修改两处即可:身份BACKUP,优先级50
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 BACKUP
    interface eth0
    virtual_router_id 12
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
   virtual_ipaddress {
        172.25.12.100
    }
}

               
virtual_server 172.25.12.100 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
#    persistence_timeout 50
    protocol TCP

    real_server 172.25.12.2 80 {
        TCP_CHECK{
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 172.25.12.3 80 {
        TCP_CHECK{
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
systemctl start keepalived.services  开启服务

测试:我们在上述操作中是没有添加虚拟IP172.25.12.100的,但是主备服务器开启keepalived后,IP会默认出现在主服务器上。当主服务器宕掉后,虚拟IP会漂移到备份服务器上。

在这里插入图片描述

IP漂移:

在这里插入图片描述

在真机测试:curl 172.25.14.100 ,可以得到两台资源服务器的资源


大大的小小阳

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值