Lvs+keepalived安装部署
- Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅是双机热备。优点:keepalived对lvs负载调度器实现热备切换,提高可用性,对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。
- 基于lvs+keepalived实现的lvs群集结构中,至少包含两台热备的负载调度器。使用keepalived构建lvs群集时,也需要用到ipvsadm管理工具,但是大部分工作会由keepalived自动完成,不需要手动执行ipvsadm(除了查看和监控群集以外)。
- LVS群集是针对Linux内核开发的一个负载均衡项目,基于IP地址虚拟化应用VIP,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决办法。可使用ipvsadm管理工具。通过整合多台相对廉价的普通服务器,以同一个地址对外提供相同的服务。
- 负载均衡的直接路由工作模式。简称DR工作模式,负载调度器仅作为客户机的访问入口,各节点服务器与调度器位于同一个物理网络,节点服务器直接回应客户机的请求,而不再经过负载调度器。
- Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能–判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入集群。
LVS(DR—RR)+KEEPALIVE配置
配置信息:
角色 | IP | 操作系统 |
---|---|---|
LVS-DR-MASTER | 192.168.153.140 | centos6.5_x64 |
LVS-DR-BACKUP | 192.168.153.131 | centos6.5_x64 |
LVS-DR-VIP | 192.168.153.100 | centos6.5_x64 |
WEB1-Realserver | 192.168.153.139 | centos6.5_x64 |
WEB2-Realserver | 192.168.153.133 | centos6.5_x64 |
注意:请忽略IP地址,以自己环境中的为主。
切记:关闭防火墙和selinux
操作开始:
LVS-DR操作:
分别在LVS主和从上安装如下:
[root@DB ~]# yum -y install keepalived ipvsadm
配置主keepalived:
进入指定目录并修改配置文件
[root@DB ~]# cd /etc/keepalived/
[root@DB keepalived]# vim keepalived.conf
修改前完整图示:1-56行:56行之后的不用管,也可以直接删除
修改前后对比图—行号可能会出现混乱,所以大家主要参考修改前结合自身理解去操作:
1、
操作:第四行起删除8行
————————————————————————————————
2、
操作:第18行起删除两行,然后更改唯一一行,此处为VIP地址
————————————————————————————————
3、
操作:
22行:更改VIP的IP与端口
25行:修改lvs模式为DR
27行:删除掉
30行:更改真实服务器IP和端口
修改31行后,从32行起删除8行
之后在TCP_CHECK后面的花括号里添加一行内容
最后复制real_server9行内容,在最后一个花括号上粘贴,最后修改IP即可
修改后完整图示:
主keepalived配置文件完成修改
启动并检查VIP是否成功
[root@DB keepalived]# service keepalived start
[root@DB keepalived]# ip a
配置备keepalived
直接使用scp把主keepalived配置文件传输到备,修改一二即可
[root@DB2 keepalived]# scp 192.168.153.140:/etc/keepalived/keepalived.conf ./
最后启动keepalived即可
节点web服务器配置
注:WEB1与WEB2操作除测试页面不同外完全一样
测试页面不同是为了直观展现负载效果
- 使用DR模式的时候,节点服务器也需要配置vip地址,并且调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突。
[root@THREE ~]# cd /etc/sysconfig/network-scripts/
[root@THREE network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@THREE network-scripts]# vim ifcfg-lo:0
启动并检查
[root@THREE network-scripts]# ifup lo:0
[root@THREE network-scripts]# ifconfig lo:0
如图下即为成功
- 添加VIP本地访问路由(将访问VIP的数据限制正在本地,避免通信紊乱)
[root@THREE ~]# vim /etc/rc.local
命令行操作
[root@THREE ~]# route add -host 192.168.153.100 dev lo:0
- 修改内核参数
[root@THREE ~]# vim /etc/sysctl.conf
进入配置文件后,末行添加6行内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
注意:
- arp_announce为2时:只向该网卡回应与该网段匹配的ARP报文。
- arp_ignore为1:只响应目的IP地址为接收网卡上的本地地址的arp请求 其主要是实现禁止响应ARP的请求。
[root@THREE ~]# sysctl -p
- 安装httpd,创建网页测试lvs集群
[root@THREE ~]# yum -y install httpd
[root@THREE ~]# echo web1 > /var/www/html/index.html
[root@THREE ~]# service httpd start
测试:
网页访问VIP地址可以直观看到负载均衡效果,如下图
在外面直接访问虚拟ip地址,则可以访问到对应节点上的网站信息,当主调度器坏掉的时候,会自动切换到备用的调度器上面,网站访问量根据权重和算法来计算。
查看负载分配情况可以执行下面命令(在主keeoalived上查询)
[root@DB ~]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:57 FIN_WAIT 192.168.153.1:64206 192.168.153.100:80 192.168.153.139:80
TCP 01:56 FIN_WAIT 192.168.153.1:64199 192.168.153.100:80 192.168.153.139:80
TCP 01:57 FIN_WAIT 192.168.153.1:64204 192.168.153.100:80 192.168.153.139:80
TCP 01:56 FIN_WAIT 192.168.153.1:64201 192.168.153.100:80 192.168.153.133:80
TCP 14:59 ESTABLISHED 192.168.153.1:64209 192.168.153.100:80 192.168.153.139:80
TCP 01:54 FIN_WAIT 192.168.153.1:64195 192.168.153.100:80 192.168.153.133:80
TCP 01:57 FIN_WAIT 192.168.153.1:64205 192.168.153.100:80 192.168.153.133:80
TCP 01:56 FIN_WAIT 192.168.153.1:64202 192.168.153.100:80 192.168.153.139:80
TCP 01:57 FIN_WAIT 192.168.153.1:64203 192.168.153.100:80 192.168.153.133:80
TCP 01:57 FIN_WAIT 192.168.153.1:64207 192.168.153.100:80 192.168.153.133:80
测试调度器:
将主keepalived停掉之后,继续访问http://192.168.20.100
页面不受影响为成功
查看VIP是否转移
[root@DB2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c7:ce:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.153.131/24 brd 192.168.153.255 scope global eth0
inet 192.168.153.100/32 scope global eth0
inet6 fe80::20c:29ff:fec7:ce80/64 scope link
valid_lft forever preferred_lft forever