1.简介
- 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负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入集群。
2.配置清单
LVS-DR-MASTER 192.168.253.130 centos7.5
LVS-DR-BACKUP 192.168.253.135 centos7.5
LVS-DR-VIP 192.168.253.100 centos7.5
WEB1-Realserver 192.168.253.178 centos6.5
WEB2-Realserver 192.168.253.179 centos6.5
基本思路如下图(忽略ip)
3.分别在master和backup上安装lvs(LVS采用dr模式)和keepalived软件包
[root@localhost ~]# yum -y install ipvsadm.x86_64 keepalived.x86_64
[root@localhost ~]# service keepalived start
配置主keepalived:
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived #http://www.keepalived.org/pdf/UserGuide.pdf 官方配置文档
global_defs {
router_id LVS_R1 #标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到,主机和备机上的router_id设置为一致,同一个网络中必须唯一,注意在一个网段里有多个集群的话需要设置成不同的router_id。}
vrrp_instance VI_1 {
state MASTER #指定实例状态,配置为MASTERinterface eth0 #指定实例运行在哪个网络接口上
virtual_router_id 51 #虚拟路由ID(0-255),在一个VRRP实例中主备服务器ID必须一样,但是在同一个网络中不可存在同样的virtual_router_id,不要和其他集群重复,如果一个配置文件中配置了多个VRRP实例,各个实例的virtual_router_id也必须区分开来
priority 100 #优先级值设定:MASTER要比BACKUP的值大
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒。
authentication { #认证机制auth_type PASS #默认PASS; 有两种:PASS或AH
auth_pass 1111 #默认1111; 可多位字符串,但仅前8位有效,设置验证密码,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信。 }
}
virtual_ipaddress {
192.168.253.100 #虚拟IP,可多个,写法为每行一个}
}virtual_server 192.168.253.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
! persistence_timeout 50 #持久连接超时时间,会话保持时间,单位是秒,这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在50秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受50秒的时间限制。protocol TCP #指定转发协议类型,有tcp和udp两种。
real_server 192.168.253.178 80 {
weight 1
TCP_CHECK { #使用TCP_CHECK检测RS的使用可用性connect_port 80 #指定连接的RS端口
connect_timeout 3 #指定连接RS超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 192.168.253.179 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}[root@localhost ~]# service keepalived start
正在启动 keepalived: [确定]通过ip命令查看(ifconfig看不到),实际状态为MASTER的主服务器上将为eth0自动添加VIP地址。在主上:
[root@localhost ~]# ip a
4.备keepalived配置文件配置信息:备用服务器可以有多台,配置时候基本相同只要修改路由器名称,热备状态,优先级就可以
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_R2
}vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
! Configuration File for keepalivedglobal_defs {
router_id LVS_R2
}vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.253.100
}
}virtual_server 192.168.253.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
! persistence_timeout 50
protocol TCPreal_server 192.168.253.178 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.253.179 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}[root@localhost ~]# service keepalived start
正在启动 keepalived: [确定]
5.节点服务器配置
使用DR模式的时候,节点服务器也需要配置vip地址,并且调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突。
[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.253.100
NETMASK=255.255.255.255
ONBOOT=yes[root@localhost ~]# systemctl restart network #重启下网卡
添加VIP本地访问路由(将访问VIP的数据限制正在本地,避免通信紊乱)
[root@localhost network-scripts]# vim /etc/rc.local
/sbin/route add -host 192.168.253.100 dev lo:0
[root@localhost network-scripts]# route add -host 192.168.253.100 dev lo:0
修改内核参数
[root@localhost network-scripts]# vim /etc/sysctl.conf #在最下面添加
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 network-scripts]# sysctl -p #检测参数是否写错
6.另一个节点也是同样的操做.
7.安装httpd,创建网页测试lvs集群
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.htmlwelcome to web1!
[root@localhost ~]# systemctl start httpd
#web2跟上面操作一样
8.测试
在外面直接访问虚拟ip地址,则可以访问到对应节点上的网站信息,当主调度器坏掉的时候,会自动切换到备用的调度器上面,网站访问量根据权重和算法来计算。
查看负载分配情况可以执行下面命令
这时候我们的部署就完成了.