LVS--DR 负载均衡+Keepalived

Linux虚拟服务器:LVS

LVS是Linux Virtual Server的简称,即Linux虚拟服务器,最初是由国内的章文嵩博士于1998年发起的自由软件项目。目前LVS项目已经被集成到Linux内核中,在Linux2.4内核之前,要使用LVS功能就必须重新编译内核以支持LVS功能模块,但从Linux2.4之后,LVS的各个功能模块已经被内置入Linux内核中,无需进行额外的安装和内核重新编译,便可直接使用LVS提供的各种功能。LVS具有良好的可靠性、可扩展性和可操作性,加上其实现最优的集群服务性能所需的低廉成本,LVS的负载均衡功能经常被用于高性能、高可用的服务器群集中。
在LVS项目架构的服务器集群系统中,通常包含三个功能:最前端的负载均衡、中间的物理服务器群 以及最底端的数据共享存储。在LVS负载均衡集群架构中,尽管整个集群内部有多个物理节点在处理用户发出的请求,但是在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

LVS的核心功能是为集群服务提供软件负载均衡,执行效率最高的是IP负载均衡技术,LVS采用的便是IP负载均衡。LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,其主要安装在集群的Director Server上,并在Director Server上虚拟出一个服务IP地址,用户对服务的访问只能通过该虚拟IP地址实现。这个虚拟IP通常称为LVS的VIP(VirtualIP),用户的访问请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中按照一定的负载均衡算法选取一个服务节点响应用户的请求。IPVS实现数据路由转发的机制有三种,分别是NAT、TUN和DR技术。

keepalived 简单概述

Keepalived最初是由Alexandre Cassen使用C语言编写的开源软件项目,主要目标是简化LVS项目的配置并增强其稳定性,即Keepalived是对LVS项目的扩展增强。Keepalived为Linux系统和基于Linux的架构提供了负载均衡和高可用能力,其负载均衡功能主要源自集成在Linux内核中的LVS项目模块IPVS(IP VirtualServer),基于IPVS提供的4层TCP/IP协议负载均衡,Keepalived也具备负载均衡的功能,此外,Keepalived还实现了基于多层TCP/IP协议(3层、4层、5/7层)的健康检查机制,
因此,Keepalived在LVS负载均衡功能的基础上,还提供了LVS集群物理服务器池健康检查和故障节点隔离的功能。除了扩展LVS的负载均衡服务器健康检查能力,Keepalived还基于虚拟路由冗余协议(Virtual Route Redundancy Protocol, VRRP)实现了LVS负载均衡服务器的故障切换转移,即Keepalived还实现了LVS负载均衡器的高可用性。Keepalived就是为LVS集群节点提供健康检查和为LVS负载均衡服务器提供故障切换的用户空间进程。
Keepalived可实现多机热备,每个热备组可有多台服务器,最常用的就是双机热备,双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器。
Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。

LVS-DR集群配置

DR模式–通过改写请求报文的MAC地址,将请求直接发送到选中的Real Server,而Real Server则将响应直接返回给客户端。因此,这种技术不仅避免了VSNAT中的IP地址转换,同时也避免了VSTUN中的IP隧道开销,所以VSDR是三种负载调度机制中性能最高的实现方案。但是,在这种方案下,DirectorServer与Real Server必须在同一物理网段上存在互联。

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址。在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。
当一个ARP广播发送到LVS-DR集群时因为负载均衡器和节点服务器都是连接到相同的网络上的,它们都会接收到ARP广播。此时只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP播。要对节点服务器进行处理,使其不响应针对VIP的ARP请求使用虚接口lo:0承载VIP地址,需设置内核参数arp_ignore=1 系统只响应目的IP为本地IP的ARP请求

模拟简单实验
两台LVS负载均衡
两台web服务器
一台客户端
LVS调度服务器选用DR模式,并与两台web服务端 配置同一个VIP,当客户机请求访问,是通过VIP进入访问。为验证 两台web服务端采用轮询的方式响应客户端请求,两台web服务器首页内容不同,以此验证。在企业应用中,单台服务器承担应用存在单点故障的危险,在企业应用集群中,存在了至少两处单点故障危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害。Keepalived工具是专为LVS和HA设计的一款健康检查工具:既支持故障自动切换(Failover),也支持节点健康状态检查(Health Checking)

LVS–DR+Keepalived 部署步骤

1:LVS调度服务器配置

(两台LVS服务器步骤一样,只有ens33的IP地址不同,同步操作)

(1)安装ipvsadm软件包,为VIP创建虚拟服务器,使用rr算法
# yum install keepalived ipvsadm- y		--安装双击热备 LVS相关软件包
# vi /etc/sysctl.conf			   		--开启路由转发功能,proc响应关闭重定向功能
末行插入
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

# sysctl -p   生效

采用脚本形式 为VIP创建虚拟服务器,使用rr算法
# cd /etc/init.d/
# vi dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.201
RIP2=192.168.100.202
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
	/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 "ipvsamd stoped-------[ok]"
;;
status)
 if [ ! -e /var/lock/subsys/ipvsadm ];then
 echo "ipvsadm stoped-----------"
 exit 1
 else
 echo "ipvsamd Runing--------[ok]"
 fi
;;
*)
 echo "Usage: $0 {start|stop|status}"
 exit 1
 esac
 exit 0

# chmod +x dr.sh

在这里插入图片描述
在这里插入图片描述

(2)为ens33、配置IP地址, 为ens33:0配置绑定VIP地址
# cd /etc/sysconfig/network-scripts
# cp -p ifcfg-ens33 ifcfg-ens33:0 
# vim ifcfg-ens33:0
全删,添加:
DEVICE=ens33:0
ONBOOT=yes 
IPADDR=192.168.100.10
NETMASK=255.255.255.0
选仅主机模式,配置静态IP
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
改为:
BOOTPROTO=static
ONBOOT=yes
添加:
IPADDR=192.168.100.110
NETMASK=255.255.255.0 
GATEWAY=192.168.100.1
(3)配置完成,启动各种服务
# service network restart		 重启网卡
# ifup ens33:0
# ifconfig	         			 查看VIP是否配置成功
# service dr.sh start 			 开启LVS服务
# systemctl stop firewalld	     关闭防火墙
# setenforce 0

在这里插入图片描述
在这里插入图片描述

(4)配置keepalived双击热备

(两台LVS中keepalived配置文件的修改不同,一台为主,一台为备)
在Keepalieved的热备配置基础上,添加"virtual_ server VIP端口{…}”区段来配置虚拟服务器,主要包括对负载调度算法、群集工作模式、健康检查间隔、真实服务器地址等参数的设置
主:

# cd /etc/keepalived/
# vim keepalived.conf

global_defs {
..........
smtp_server 127.0.0.1  				 --指向本地
router_id LVS_01          			 --指定名称,备份服务器不同名称
vrrp_instance VI_1 {
state MASTER               			 --热备状态,MASTER表示主服务器
interface ens33             		 --承载VIP地址的物理接口
virtual_router_id 10       		     --组号相同(主从要相同)虚拟路由器的ID号,每个热备组保持一致
..........
auth_pass abc123         			 --验证密码,要么不改,要么都改一样
priority 100                  		 --优先级备份服务器要小于主服务器
...........
virtual_ipaddress {
192.168.100.10            			 --改为VIP地址(2dd删除,留一个)
}
...........
virtual_server 192.168.100.10 80 {   --改为VIP地址和端口
...........
lb_kind DR                           --改为DR模式      
............

real_server 192.168.100.201 80 {  	 --改为节点web服务器地址
weight 1				 		     --下行9dd删除重新编辑
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
	}
       }
 从41行开始,9yy复制到49行下 
real_server 192. 168. 100. 202 80 {  --改为另一台节点web服务器地址
weight 1
TCP_CHECK {
connect_port 80     
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
 	}
        } 
}

剩下全删

# cd /etc/keepalived
# scp keepalived.conf [email protected]:/etc/keepalived/
# systemctl start keepalived.service 

在另一台LVS服务器上修改:

# cd /etc/keepalived
# vim keepalived.conf
修改:
state BACKUP  		 --改为备份服务器角色状态
router_id LVS_02     --指定名称,不能跟主服务器一样
priority 90			 --优先级要低于主服务器

# systemctl start keepalived.service   --开启keepalived双机热备服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在LVS调度器中执行ipvsadm -In命令 可查看群集节点状态
在LVS调度器中执行ipvsadm -Inc命令 可查看负载连接及分配情况

2:Web节点服务器配置

(两台web步骤一样,只有ens33 IP地址不同,首页内容不同)

(1)安装http服务,关闭防火墙。
# yum install httpd -y
# systemctl stop firewalld.service
# setenforce 0
# cd /var/www/html/
# echo "this is kgc" > index.html
(2)为VIP创建虚拟服务器,使用rr算法

(创建虚拟服务器,抑制ARP响应)

# cd /etc/init.d/
# vim web.sh
#!/bin/bash
VIP=192.168.100.10
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
(3)为ens33配置IP地址, 为lo:0配置绑定VIP地址

VIP地址仅用作Web响应数据包的源地址,并不监听客户机的访问请求

# cd /etc/sysconfig/network-scripts
# cp -p ifcfg-lo ifcfg-lo:0

# vim ifcfg-lo:0
全删,添加:
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes

选仅主机模式,绑定静态IP
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
改为:
BOOTPROTO=static
添加:
IPADDR=192.168.100.201
NETMASK=255.255.255.0 
GATEWAY=192.168.100.1
(3)配置完成,启动各种服务
# service network restart		 重启网卡
# ifup lo:0
# ifconfig	         			 查看VIP是否配置成功
# service dr.sh start 			 开启LVS服务
# systemctl stop firewalld	     关闭防火墙
# setenforce 0

自检:在LVS配置keepalived之前,可以访问两台web网站首页,验证网站是否搭建成功。
web1:
在这里插入图片描述

web2:
在这里插入图片描述

3:客户端测试

用一台win 10 浏览器检验:
首先先绑定IP地址 子网 网关,要是同网段的192.168.100.0网段的
首先ping通VIP
#ping 192.168.100.10 --ping VIP
如果不通,两台DR服务器重启网卡服务,再ping一次试试

ping通之后,浏览器里输入VIP地址,可以看到其中一台web服务器首页内容,清除缓存,过1分钟,再次刷新,会看到另一台web服务器的首页内容。
在这里插入图片描述
在这里插入图片描述
群集测试:
在客户机浏览器中,能够通过群集的VIP地址(192.168.10.72)正常访问Web页面内容
当主、从调度器任何一个失效时, Web站点仍然可以访问
只要服务器池有两台及以上的真实服务器可用,就可以实现访问量的负载均衡

当其中一台LVS服务器宕机:
在这里插入图片描述
在这里插入图片描述

发布了56 篇原创文章 · 获赞 6 · 访问量 1862

猜你喜欢

转载自blog.csdn.net/weixin_45691464/article/details/104866309