centos7实践LVS+keepalived

11月 1, 2016 |

网上有很多关于这个主题的配置,要么是陈旧的,要么是错误,胡乱转载,有时参考这些文章,反而给你的工作带来更大的麻烦。经过实践,博主javacoder.cn将其整理成文,转载请注明出处,希望对你有所帮助。
其实keepalived集成了LVS的功能,所以理论上只要安装keepalived就好了,可选安装ipvsadm,ipvsadm命令能查看你通过keepalived配置的LVS是否正确,

本文使用NAT模式,NAT简介如下
用过vmware的人都知道连接方式之一就是NAT模式,NAT用于内网和外网的互联,当内网请求外网的资源的时候,在路由处,将数据包的源地址改为路由器的地址,并记录真正的源地址;当请求的资源返回到路由处时,将目的地址改为保存的源地址,并将包转给源地址。

实践使用vmware虚拟机测试的,本示例使用nat模式,拓扑图如下:

topology

可以看到Router1和Router2谁成为master时,谁占有内网VIP和外网VIP,real_server的网管指向内网VIP,这点至关重要。
实践步骤:

准备步骤

防火墙的配置不在本文的范围,请关闭selinux和firewall

systemctl disable firewalld
systemctl stop firewalld
setenforce 0
vi /etc/selinux/config
改如下行SELINUX=disabled

安装keepalived,ipvsadm
yum install keepalived
yum install ipvsadm

配置keepalived

修改/etc/keepalived/keepalived.conf

global_defs {
	@唯一标识,每台服务器不一样
	router_id LVS_DEVEL
}

vrrp_sync_group VRRP1 {
	#组的作用是当组内的一个vrrp_instance故障时,
	#将整个组的vrrp_instance都按照故障处理
	group {
		VI_1
		VI_2
	}
}

#外网的VIP配置
vrrp_instance VI_1 {
	state MASTER
	interface eno16777736
	virtual_router_id 51
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		#外网的VIP
		192.168.14.127/24
	}
}

#内网的VIP配置
vrrp_instance VI_2 {
	state MASTER
	interface eno33554992
	virtual_router_id 52
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		#内网的VIP
		192.168.26.1/24
	}
}

#virtual_server配置,192.168.14.127为外网VIP,80表示这个server的端口
virtual_server 192.168.14.127 80 {
	delay_loop 3
	lb_algo rr
	#使用nat模式
	lb_kind NAT
	persistence_timeout 50
	protocol TCP
	#一个真实server 的ip和端口
	real_server 192.168.26.10 80 {
		weight 1
		TCP_CHECK {
			connect_timeout 3
		}
	}
	#另一个真实server 的ip和端口
	real_server 192.168.26.11 80 {
		weight 1
		TCP_CHECK {
			connect_timeout 3
		}
	}
}

backup router的配置基本一样,配置不同的router_id,state设为BACKUP,priority设为比master低的值

配置realServer

realServer1的配置如下
修改/etc/sysconfig/network-scripts/ifcfg-eno16777736,改成静态IP,将GETEWAY指向keepalived中的漂移地址192.168.26.1

TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.26.10
NETMASK=255.255.255.0
GETEWAY=192.168.26.1

也可以手动添加录音ip route add 192.168.14.0/24 dev ifcfg-eno16777736 via 192.168.26.1, 表示到达192.168.14.0网段的网关为192.168.26.1,LVS的实现和常见的NAT是不一样的, 常见的NAT是选一个临时端口,和realServer建立连接,realServer看到的源地址是网关地址; 而LVS模式下realServer看到仍然是客户端的地址。

配置realServer 2类似,只是IPADDR不同而已。

验证

对router1和router2执行
systemctl start keepalived
在router1和router2上分别执行ip addr, router1的输出如下,

2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:33:b8:a4 brd ff:ff:ff:ff:ff:ff
inet 192.168.14.144/24 brd 192.168.14.255 scope global dynamic eno16777736
valid_lft 1573sec preferred_lft 1573sec
inet 192.168.14.127/24 scope global secondary eno16777736
valid_lft forever preferred_lft forever
3: eno33554992: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:22:d9:1b brd ff:ff:ff:ff:ff:ff
inet 192.168.26.8/24 brd 192.168.26.255 scope global eno33554992
valid_lft forever preferred_lft forever
inet 192.168.26.1/24 scope global secondary eno33554992
valid_lft forever preferred_lft forever

发现eno16777736绑定了192.168.14.127,eno33554992绑定了192.168.26.1,印证绑定vip成功。
而router2的输出就没有这个的绑定记录
在router1和router2上分别执行ipvsadm,router的输出如下:

Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.14.127:http rr persistent 50
-> 192.168.26.10:http Masq 1 0 0
-> 192.168.26.11:http Masq 1 0 0

说明nat配置成功了,而router2上就没有对应的记录。

使用浏览器访问 http://192.168.14.128/index.html,访问成功
将对router1 执行systemctl stop network
使用浏览器访问 http://192.168.14.128/index.html,也能访问成功
再查看router2的ip addr和ipvsadm的输出,现在就有了和原来router1一样的输出了。
到此,恭喜你,完美结束!!

参考文档

LVS-NAT-Keepalived-HOWTO

Posted in: Linux, MySQL practise

Comments are closed.