centos 7.6 —— LVS+DR模式&&Keepalived群集

centos 7.6 —— LVS+DR模式&&Keepalived群集

1. 理解LVS-DR工作原理

  • 为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线
  • 客户机使用VIP访问负载均衡调度服务器(redirect),redirect任务轮询算法分配给下面的后端服务器,后端服务器使用VIP直接回应客户机。无需经过redirect。

注意:

  1. VIP 是暴露在外网的。
  2. 客户机访问请求并不知道具体是哪个服务器进行处理和回应的,因为VIP都是相同的虚拟IP地址。这样增加了网络的安全性。

在这里插入图片描述

1.2 LVS-DR数据包流向分析

  • (1)Client向目标VIP发出请求,Director(负载均衡器)接收
  • IP包头及数据帧头信息

在这里插入图片描述

  • (2)Director根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送
  • IP包头及数据帧头信息

在这里插入图片描述

  • (3)RealServer_1收到这个帧,解封装后发现目标IP与本机匹配
  • (RealServer事先绑定了VIP),于是处理这个报文。随后重新封装报文,发送到局域网
  • IP包头及数据帧头信息

在这里插入图片描述

  • (4)Client将收到回复报文。Client认为得到正常的服务,而不会知道是哪一台服务器处理的

注意:如果跨网段,则报文通过路由器经由Internet返回给用户

二、 LVS-DR中的ARP问题

  • 在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址

  • 在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱
    当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播

  • 只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播
    在这里插入图片描述

  • 对节点服务器进行处理,使其不响应针对VIP的ARP请求 使用虚接口lo:0承载VIP地址

  • 设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求

  • RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址

  • 发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址

  • 路由器收到ARP请求后,将更新ARP表项

  • 原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址

问题

  • 路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效

解决方法

  • 对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

总结:
因为后端的节点服务器和负载均衡服务器的VIP地址是相同,当客户机访问对VIP访问的时候,就会造成强占回应请求造成广播风暴,所以需要负载均衡服务器进行ARP过滤指定后端服务器进行响应客户端服务。

三、解决ARP的两个问题的设置方法

修改/etc/sysctl.conf文件

  • net.ipv4.conf.lo.arp_ignore = 1   //客户端通过VIP访问的时候,防止服务器抢占回应,只设定调度进行响应,然后调度器再下发给后端服务器
  • net.ipv4.conf.lo.arp_announce = 2 //后端服务器回应客户机的时候,用网络接口地址到路由网关,记住后端服务器的ip地址和MAC地址,但是网关回应给客户机的ip地址是VIP地址。
  • net.ipv4.conf.all.arp_ignore = 1
  • net.ipv4.conf.all.arp_announce = 2
    arp_ignore和arp_announce介绍

四、理解Keepalived实现原理

  • 企业应用中,单台服务器承担应用存在单点故障的危险
  • 单点故障一旦发生,企业服务将发生中断,造成极大的危害

4.1 Keepalived工具介绍

  • 专为LVS和HA设计的一款健康检查工具
  • 支持故障自动切换(Failover)
  • 支持节点健康状态检查(Health Checking)
  • 官方网站:http://www.keepalived.org/

4.2 Keepalived实现原理剖析

  • Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
  • VRRP (虚拟路由冗余协议)是针对路由器的一种备份解决方案 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
    每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚

4.2 拟IP地址,继续提供服务 Keepalived案例讲解

  • Keepalived可实现多机热备,每个热备组可有多台服务器
  • 双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
  • 实现基于Web服务的双机热备
  • 漂移地址:192.168.100.20
  • 主、备服务器:192.168.100.200 、 192.168.100.134
  • 提供的应用服务:Web

4.3 Keepalived安装与启动

  • 在LVS群集环境中应用时,也需用到ipvsadm管理工具
  • YUM安装Keepalived
  • 启用Keepalived服务

4.4 配置Keepalived master服务器

  • Keepalived配置目录位于/etc/keepalived/
  • keepalived.conf是主配置文件
  • global_defs {…} 区段指定全局参数
  • vrrp_instance 实例名称 {…} 区段指定VRRP热备参数
  • 注释文字以”!”符号开头
  • 目录samples,提供了许多配置样例作为参考

常用配置选项

  • router_id HA_TEST_R1:本路由器(服务器)的名称
  • vrrp_instance VI_1 :定义VRRP热备实例
  • state MASTER:热备状态,MASTER表示主服务器
  • interface ens33 :承载VIP地址的物理接口
  • virtual_router_id 1 :虚拟路由器的ID号,每个热备组保持一致
  • priority 100:优先级,数值越大优先级越高
  • advert_int 1:通告间隔秒数(心跳频率)
  • auth_type PASS:认证类型
  • auth_pass 123456:密码字串
  • virtual_ipaddress { vip}: 指定漂移地址(VIP),可以有多个

4.5 配置Keepalived slave服务器

  • Keepalived备份服务器的配置与master的配置有三个选项不同
  • router_id:设为自有名称
  • state:设为BACKUP
  • priority:值低于主服务器
  • 其他选项与master相同

4.6 Keepalived双机热备效果测试

  • 测试双机热备的效果
  • 主、备机均启用Web服务,设置不同内容
  • 先后禁用、启用主服务器的网卡

执行的测试

  • 测试1:使用ping检测192.168.100.20的连通性
  • 测试2:访问http://192.168.100.20,确认可用性及内容变化
  • 测试3:查看日志文件/var/log/messages中的变化

五、案例环境

  • 为了进一步提高公司网站的负载能力,公司决定扩展现有的网站平台,基于LVS构筑负载均衡群集。考虑到群集的访问效率,管理员准备采用LVS群集的DR模式

  • 主调度器LVS ens33:192.168.100.200

  • 虚拟路由VIP ens33:0 192.168.100.20

  • 备调度器 LVS ens33: 192.168.100.134

  • 虚拟路由VIP ens33:0 192.168.100.20

  • 节点服务器1:ens33 192.168.100.144

  • 虚拟路由VIP lo:0 192.168.100.20

  • 节点服务器1:ens33 192.168.100.156

  • 虚拟路由VIP lo:0 192.168.100.20

注意事项:

  • 所有服务器的VIP地址是相同的
  • 所有服务器都是仅主机模式
  • 客户机ip地址:192.168.100.233

六、实验步骤

6.1 主调度服务器配置 和 备份调度服务器

  • 主备调度器配置相同除了本机的物理网卡的IP地址不同

  • 192.168.100.200

  • 192.168.100.134

  • NAT 模式下预先安装好

  • 安装ipvsadm


yum -y install ipvsadm
yum -y install keepalived
iptables -F
setenforce 0

之后修改仅主机模式

设置
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#proc 响应关闭重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

查看设置
[root@localhost ~]# sysctl -p   //刷新到内存
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# 

  • 新建虚拟网卡

cp  -p ifcfg-ens33 ifcfg-ens33:0

DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.20
NETMASK=255.255.255.0

ifup ens33:0

ifconfig

cd /etc/init.d/

vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.20
RIP1=192.168.100.144
RIP2=192.168.100.156
case "$1" in
start)
	/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
	systemctl start ipvsadm
	/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
	/sbin/route add -host $VIP dev ens33:0
	/sbin/ipvsadm -A -t $VIP:80 -s rr
	/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g      //-g 是指DR模式,-m 是指nat模式
	/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
	echo "ipvsadm starting -------------[ok]"
	;;
	stop)
	/sbin/ipvsadm -C
	systemctl stop ipvsadm
	ifconfig ens33:0 down
	route del $VIP
	echo "ipvsadm stoped----------------[ok]"
	;;
	status)
	if [ ! -e /var/lock/subsys/ipvsadm ];then
	ehco "ipvsadm stoped----------------------"
	exit 1
		else
		echo "ipvsadm Runing ---------[ok]"
	fi
	;;
	*)
	echo "Usage: $0 {start|stop|status}"
	exit 1
	esac
	exit 0


chmod +x dr.sh

service dr.sh start

6.2 节点服务器配置

  • 两个节点服务器配置相同除了网页内容和本机的物理网卡的IP地址

192.168.100.144
192.168.100.156

yum -y install httpd

systemctl start httpd.service

systemctl stop firewalld.service

setenforce 0

************************************************
节点服务器1:192.168.100.144
cd /var/www/html
echo "this is accp web" > index.html
************************************************

************************************************
节点服务器1:192.168.100.156
cd /var/www/html
echo "this is KGC  KGC KGC KGC  web" > index.html
************************************************


cd  /etc/sysconfig/network-scripts

cp -p ifcfg-lo ifcfg-lo:0


vim ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.100.20
NETMASK=255.255.255.255    //环回口必须32位
ONBOOT=yes

systemctl restart network

ifup lo:0  //启动网络接口

systemctl start NetworkManager

ifconfig  //查看虚拟ip



cd /etc/init.d

vim web.sh

#!/bin/bash
VIP=192.168.100.20
	case "$1" in
	start)
		ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
		/sbin/route add -host $VIP dev lo:0
		echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
		echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
		echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
		echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce		
		sysctl -p > /dev/null 2>&1
		echo "RealServer Start ok"
		;;
	stop)
		ifconfig lo:0 down
		route del $VIP /dev/null 2 >&1
		echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
		echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
		echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
		echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
	                echo "RealServer stopd"
		;;
	*)
		echo "Usage: $0 {start|stop}"
		exit 1
	esac
	exit 0

chmod +x web.sh
service web.sh start

sysctl -p刷新到内存

ifup lo:0 (启用立刻中断)

firefox "http://127.0.0.1/" &

七、keepalived 部署—(在主调度服务器上设置)

cd /etc/keepalived/

vim keepalived.conf


global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1    //本地地址
   smtp_connect_timeout 30
   router_id LVS_01    //router id 不同相同
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS  //设置密码建议不要更改。默认值就好
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.20   //虚拟ip地址
    }
}


virtual_server 192.168.100.20 80 {    //虚拟VIP
    delay_loop 6
    lb_algo rr
    lb_kind DR   //DR模式
    persistence_timeout 50
    protocol TCP

    real_server 192.168.100.144 80 {   //节点服务器
        weight 1
         TCP_CHECK {
         connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.100.156 80 {  //节点服务器
        weight 1
         TCP_CHECK {
         connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


剩余的配置删除


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


systemctl  restart keepalived.service


7.1 keepalived 部署—(在备份调度服务器上设置)

192.168.100.134


cd /etc/keepalived/
vim keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1    //本地地址
   smtp_connect_timeout 30
   router_id LVS_02    //router id 不同相同
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP    //备份调度器
    interface ens33
    virtual_router_id 51  //虚拟router -id组号必须与主调度器相同
    priority 90   //优先级低于主调度器的优先级
    advert_int 1
    authentication {
        auth_type PASS  //设置密码建议不要更改。默认值就好
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.20   //虚拟ip地址
    }
}


virtual_server 192.168.100.20 80 {    //虚拟VIP
    delay_loop 6
    lb_algo rr
    lb_kind DR   //DR模式
    persistence_timeout 50
    protocol TCP

    real_server 192.168.100.144 80 {   //节点服务器
        weight 1
         TCP_CHECK {
         connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.100.156 80 {  //节点服务器
        weight 1
         TCP_CHECK {
         connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

systemctl  restart keepalived.service

八、 客户端测试

  • 手配ip地址 192.168.100.188
  • 在ping 虚拟VIP期间需要一直对主和备份的虚拟VIP进行重启网卡和检查虚拟VIP是否一直存在,等待时间较长,耐心一点
  • ping 192.168.100.20 -t

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42099301/article/details/108351661