Ubuntu16.04 配置 LVS+Keepalived 负载均衡
一. 实验环境
客户主机:Windows
LVS Director1: Ubuntu16.04 (IP: 192.168.159.137), MASTER
LVS Director2: Ubuntu16.04 (IP: 192.168.159.136), BACKUP
Real Server1: Ubuntu16.04 (IP: 192.168.159.131)
Real Server2: Ubuntu16.04 (IP: 192.168.159.138)
VIP:192.168.159.130(虚拟IP,并不是一个真正的主机,而是在LVS Director和Real Server上都要配的IP)
实验中,在Real Server上配置了Apache2服务用来查看访问和负载均衡效果。
二. 实验目的
利用LVS DR模式实现负载均衡,利用keepalived对Director和Real-server保活,从而实现高可用。
三. 原理
LVS DR模式:客户机对VIP的请求先到LVS Director,LVS Director将请求包的目的MAC地址改成自己同一网段下的Real Server的MAC地址再转发出去。因为在每个Real Server上都配有VIP, 所以Real Server会认为这是对本机的请求,所以将应答包直接返回给客户机。
Keepalived: 在MASTER(LVS Director1)和Backup(LVS Director2)上分别配置keepalived, MASTER的优先级高于BACKUP的优先级,keepalived在局域网中选举出MASTER承担转发任务。当MASTER出现故障,keepalived通过监测和检查可以实时发现并将转发任务切换到BACKUP上。当MASTER修复并重新上线,因为MASTER的优先级高,则会立即抢占,仍由MASTER转发。
四. 文件使用方法
-
LVSserver_main.sh和LVS.conf放到LVS Director主机上,脚本会自动安装apache2, keepalived和ipvsadm
给与LVSserver_main.sh执行权限,如:
sudo chmod +x LVSserver_main.sh
给LVS.conf读权限,貌似默认是有的,不必修改。
修改LVS.conf文件内容:
interface: LVS_Director上的网卡名称,VIP将配置在该网卡上;
router_id: LVS_Director唯一标识,可以自定义,但MASTER和BACKUP不可以相同;
lvs_ip: 你要配置的VIP;
lvs_port: 接收客户机请求的端口号;
balance_algorithm: 转发算法,实验中使用的rr, 效果明显,你也可以改成wrr等;
persistence_timeout: 持续时间,在持续时间内,Director会将请求转发给同一主机,为了效果明显,实验中使用persistence_timeout=0;
protocol: TCP 或 UDP;
type: MASTER 或 BACKUP, 在LVS Director1上使用 MASTER, 在LVS Director2上在LVS.conf文件中把它改成BACKUP;
priority: 优先级, 在MASTER上设为200(可以自定), 在BACKUP上值小于MASTER,一说要至少小50,就设成100吧;
real_server: 承担服务和请求任务的实际服务器IP,写在数组real_server里,可追加或删除;
real_server_port: real_server的服务端口。
在root用户下执行命令
./LVSserver_main.sh
注:实际上LVS Director不用安装apache2服务,实验中keepalived实时检查apache2服务是否active, 如果down掉了,重启无效后立即关掉本机上的keepalived,并将转发任务切到BACKUP上。如果你有其它检查Director是否down掉的方法,可以不安装apache2,执行上面脚本后在/usr/local/check_apache2.sh中修改检查方法。
- realserver_main.sh和realserver_config.sh放到Real Server上, 脚本自动安装apache2服务
给realserver_main.sh执行权限, realserver_config.sh的执行权限在realserver_main.sh中做了处理,所以不用管。
在root用户下执行命令:
./realserver_main.sh VIP
其中,VIP是和你在Director上配置的VIP相同。
修改apache2主页面:
gedit /var/www/html/index.html
在index.html文件中编辑并保存此Real Server的显示内容,为了区分不同Real Server,建议在配置不同Real Server时,编辑不同的内容, 如
<p>This is Real Server * </p>
其中 * 指的是Real Server编号。
注:realserver_main.sh的功能是安装apache2服务,并调用realserver_config.sh脚本配置Real Server. 最后,把配置脚本realserver_config.sh添加到开机自启动中。 运行过一次./realserver_main.sh VIP后,如果你想重新配置,可以直接使用
./realserver_config.sh VIP start
如果你想删除Real Server配置,可以直接使用
./realserver_config.sh VIP stop
五. 测试
- 测试负载均衡
在客户机上浏览器输入192.168.159.130,并访问;
使用 ctrl+F5 从服务器端刷新,由于配置的是 rr 轮转算法且持续时间为0,可以看到,每次访问的是不同的Real Server上的index.html页面。
-
测试主备切换
MASTER,BACKUP和两台Real Server都配置好了之后,在MASTER上执行命令
ip a
可以看到一条
inet 192.168.159.130/32 scope global ens33
说明此时转发任务在MASTER上,而BACKUP上看不到这条反馈。当关掉MASTER上的Keepalived后
service keepalived stop
在BACKUP上执行
ip a
可以看到
inet 192.168.159.130/32 scope global ens33
此时任务已经切到BACKUP上。
但是,在MASTER上重启keepalived
service keepalived restart
则MASTER会重新抢占。
- 测试Real Server down掉的情况
在承担转发任务的Director上执行命令:
ipvsadm -L -n
查看此时的Real Server列表,如果某台 Real Server在列表中,Director会向它转发,反之则不会。
关掉任何一台Real Server上的apache2服务,或者直接关机,此时在承担转发任务的Director上执行命令:
ipvsadm -L -n
可以看到down掉的Real Server从转发列表中删除了,此时再从客户机请求VIP, 即192.168.159.130,只能看到剩余的Real Server的响应页面。
重新恢复down掉的Real Server,则又在转发列表中看到 Real Server了,也能正常承担服务了。