LVS的DR模型 + Keepalived 实现高可用负载均衡

如何保证vip对内可见,对外隐藏?

kernel parameter:
目标mac地址为全F,交换机触发广播

 /proc/sys/net/ipv4/conf/*IF*/

arp_ignore: 定义接收到ARP请求时的响应级别;

0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求
到达的接口上的时候,才给予响应;

arp_announce:定义将自己地址向外通告时的通告级别;

0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
os可以给一个网卡配置多个ip地址同时使用,对于2:接口上配置了很多ip,指向匹配的那个网络去通知自己匹配的ip地址。

负载均衡调度算法的使用

LVS会记录请求的数据包记录下来,当三次握手建立之后,server的连接会+1,LVS能偷窥服务的连接,负载均衡调度算法把请求负载到对应的服务器上。

搭建

负载均衡在内核模块是ipvs
要使用负载均衡首先要安装一个连接包ipvsadm

yum install ipvsadm -y

管理集群服务(接受包规则)

添加:-A -t|u|f service-address [-s scheduler]
-t: TCP协议的集群 
-u: UDP协议的集群
service-address:     IP:PORT
-f: FWM: 防火墙标记 
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address

ipvsadm -A -t 192.168.9.100:80 -s rr

管理集群服务中的RS(把包发给realServer)

添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
  -t|u|f service-address:事先定义好的某集群服务
  -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
  [-g|i|m]: LVS类型 
  -g: DR
  -i: TUN
  -m: NAT
  [-w weight]: 定义服务器权重
修改:-e
删除:-d -t|u|f service-address -r server-address
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
查看
  -L|l
  -n: 数字格式显示主机地址和端口
  --stats:统计数据
  --rate: 速率
  --timeout: 显示tcp、tcpfin和udp的会话超时时长
  -:c 显示当前的ipvs连接状况
删除所有集群服务
  -C:清空ipvs规则
保存规则
  -S 
# ipvsadm -S > /path/to/somefile
载入此前的规则:
  -R
# ipvsadm -R < /path/form/somefile 

DR模式实验手册

LVS配置命令

node01:

        配置负载均衡服务器的VIP
	ifconfig eth0:8 192.168.150.100/24
	如果要撤销 
	ifconfig eth0:8 down

node02~node03:

	1)修改内核(配置arp协议):
		echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
		echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
		echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
		echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
	2)设置隐藏的vip:
		ifconfig  lo:3  192.168.150.100  netmask 255.255.255.255

RS中的服务:
node02~node03:

        安装http服务
	yum install httpd -y
	启动http服务
	service httpd start
	添加一个主页,便于访问演示
	vi   /var/www/html/index.html
		from 192.168.150.1x

LVS服务配置
node01:

	安装ipvs工具
	yum install ipvsadm 
	配置接收请求包
	ipvsadm -A  -t  192.168.150.100:80  -s rr
	配置包转发到server
	ipvsadm -a  -t 192.168.150.100:80  -r  192.168.150.12 -g -w 1
	ipvsadm -a  -t 192.168.150.100:80  -r  192.168.150.13 -g -w 1
	查看当前ipvs模块中记录的连接(可用于观察转发情况)
	ipvsadm -ln

验证:

	浏览器访问  192.168.150.100   看到负载  疯狂F5
	node01:
		netstat -natp   结论看不到socket连接
	node02~node03:
		netstat -natp   结论看到很多的socket连接
	node01:
		ipvsadm -lnc    查看偷窥记录本
		TCP 00:57  FIN_WAIT    192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80
		FIN_WAIT: 连接过,偷窥了所有的包
		SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题

Keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。

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

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

Keepalived配置命令

主机: node01~node04

node01:
	ipvsadm -C   //清空LVS配置
	ifconfig eth0:8 down    //清空网卡配置

----------------------------
node01,node04:
	yum install keepalived ipvsadm -y    //安装keepalived 
	配置:
		cd  /etc/keepalived/
		cp keepalived.conf keepalived.conf.bak  //备份配置文件
		vi keepalived.conf                      //编辑配置文件
			node01:
			vrrp:虚拟路由冗余协议!
				vrrp_instance VI_1 {
					state MASTER             //主备标识  node04  BACKUP
					interface eth0           //网卡配置
					virtual_router_id 51     //集群标识
					priority 100		 //权重	 node04	 50
					advert_int 1
					authentication {
						auth_type PASS
						auth_pass 1111
					}
					virtual_ipaddress {
						192.168.150.100/24 dev eth0 label  eth0:3
					}
				}
			virtual_server 192.168.150.100 80 {
				delay_loop 6
				lb_algo rr
				lb_kind DR
				nat_mask 255.255.255.0
				persistence_timeout 0           //保活时间
				protocol TCP

				real_server 192.168.150.12 80 {  //服务检查
					weight 1
					HTTP_GET {
						url {            //请求路径,返回正常的状态码
						  path /
						  status_code 200
						}
						connect_timeout 3
						nb_get_retry 3         //重试此时
						delay_before_retry 3   /重试时间间隔
					}   
				}       
				real_server 192.168.150.13 80 {
					weight 1
					HTTP_GET {
						url {
						  path /
						  status_code 200
						}
						connect_timeout 3
						nb_get_retry 3
						delay_before_retry 3
					}
				}
			scp  ./keepalived.conf  root@node04:`pwd`    //两台机器间拷贝配置文件
原文地址:https://www.cnblogs.com/farmersun/p/12687330.html