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-MASTER 192.168.88.161 CentOS6.5_x64
LVS-DR-BACKUP 192.168.88.162 CentOS6.5_x64
LVS-DR-VIP 192.168.88.160
WEB1 192.168.88.163 CentOS6.5_x64
WEB2 192.168.88.164 CentOS6.5_x64
分别在master和backup上安装lvs(LVS采用dr模式)和keepalived软件包
安装keepalived(master和backup上都要安装)
yum -y install keepalived ipvsadm
启动keepalived:
[root@ localhost ~]# service keepalived start
Starting keepalived: [ OK ]
[root@ localhost ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.100:https rr persistent 50
-> 192.168.201.100:https Masq 1 0 0
TCP 10.10.10.2:connlcli rr persistent 50
-> 192.168.200.2:connlcli Masq 1 0 0
-> 192.168.200.3:connlcli Masq 1 0 0
TCP 10.10.10.3:connlcli rr persistent 50
-> 192.168.200.4:connlcli Masq 1 0 0
-> 192.168.200.5:connlcli Masq 1 0 0
[root@ localhost ~]#
配置主Keepalived:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_R1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.88.160
}
}
virtual_server 192.168.88.160 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
! persistence_timeout 50
protocol TCP
real_server 192.168.88.163 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.88.164 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
service keepalived restart
备keepalived配置文件配置信息:备用服务器可以有多台,配置时候基本相同只要修改路由器名称,热备状态,优先级就可以了。
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_R1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.88.160
}
}
virtual_server 192.168.88.160 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
! persistence_timeout 50
protocol TCP
real_server 192.168.88.163 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.88.164 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
service keepalived restart
通过ip命令查看(ifconfig看不到),实际状态为MASTER的主服务器上将为eth0自动添加VIP地址。在主上:
ip addr show eth0
[root@ localhost ~]# cd /etc/sysconfig/network-scripts/
[root@ localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@ localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.88.160
NETMASK=255.255.255.255
ONBOOT=yes
[root@ localhost network-scripts]# ifup lo:0
[root@ localhost network-scripts]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:192.168.88.160 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:65536 Metric:1
添加VIP本地访问路由(将访问VIP的数据限制正在本地,避免通信紊乱)
vim /etc/sysctl.conf
最下面添加
#lvs use
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@ localhost ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
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
安装httpd,创建网页测试lvs集群
yum -y install httpd
vim /var/www/html/index.html
LVS-web1.test</h1>
service httpd start
Web2和web1做同样的操作即可。
测试:
在外面直接访问虚拟ip地址,则可以访问到对应节点上的网站信息,当主调度器坏掉的时候,会自动切换到备用的调度器上面,网站访问量根据权重和算法来计算。
查看负载分配情况可以执行下面命令
测试调度器:
将主keepalived停掉之后,继续访问http://192.168.88.160
,页面不受影响。
查看vip是否转移: