一、架构图
二、流程分析
客户端发起访问请求到LVS集群,由经过优先级选举出来的LVS主调度器负责匹配转发策略,然后转发访问请求到Web集群;Web集群中的服务器接收到请求,然后通过路由器直接将回包发送给客户端。其实,LVS+keepalived集群的工作方式和LVS-DR模式是一样的,无非就是增加了LVS集群备份服务器,在主服务器宕机的时候由备份服务器承担调度器的作用。
三、实践
1.Web服务器集群搭建
nginx:192.168.41.45,vip:192.168.41.100
tomcat:192.168.41.46,vip:192.168.41.100
(这个之前演示太多次的,就不做过多注解了,直接罗列命令集合)
——————————————————————45服务器(DR模式)——————————————————————————————————————
yum install -y epel-release
yum install -y nginx
echo "this is nginx server" > /usr/share/nginx/html/index.html
systemctl start nginx
netstat -natp | grep 80
vim /etc/sysconfig/network-scripts/ifcfg-lo:0 #配置VIP地址的网卡文件
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.41.100
NETMASK=255.255.255.255
#:wq保存退出
systemctl restart network
ifup lo:0 #开启lo:0网卡
ifconfig lo:0
route add -host 192.168.41.100 dev lo:0 #添加路由信息
vim /etc/sysctl.conf #配置内核文件
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
#:wq保存退出
sysctl -p #刷新内核文件
浏览器访问测试
----------------------------------------------------------------------
——————————————————————46服务器(DR模式)——————————————————————————————————————
yum install -y httpd
echo "this is apache server" > /var/www/html/index.html
systemctl start httpd
netstat -natp | grep 80
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.41.100
NETMASK=255.255.255.255
systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 192.168.41.100 dev lo:0
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
浏览器访问测试
2.LVS集群搭建
主LVS:192.168.41.43,vip:192.168.41.100
备LVS:192.168.41.44,vip:192.168.41.100
——————————————————43服务器(LVS主)————————————————————————————
yum install -y keepalived ipvsadm
vim /etc/keepalived/keepalived.conf #编辑keepalived配置文件
global_defs {
#定义全局参数
#第10行参数为邮件服务地址,改为指向本地
smtp_server 127.0.0.1
#第12行参数指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_ZHU,备为LVS_BEI
router_id LVS_ZHU
#第14行注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
#或者将包含vrrp的四行全部删掉
#vrrp_strict
}
vrrp_instance VI_1 {
#定义VRRP热备实例参数
#第20行参数为指定热备状态,主为MASTER,备为BACKUP
state MASTER
#第21行修改指定承载vip地址的物理接口,是ens33
interface ens33
#第22行参数为指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
#nopreempt #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
#第23行参数为指定优先级,数值越大优先级越高,这里设置主为100,备为90
priority 100
advert_int 1 #通告间隔秒数(心跳频率)
authentication {
#定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
#第27行参数为指定验证密码,主备服务器保持一致
auth_pass 1111
}
virtual_ipaddress {
#指定群集vip地址
192.168.41.100
}
}
#第36行参数为指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.41.100 80 {
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
#第39行参数为指定群集工作模式,改为直接路由(DR)
lb_kind DR
persistence_timeout 0 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
#第43行参数为指定第一个Web节点的地址、端口
real_server 192.168.41.45 80 {
weight 1 #节点的权重
#第45行删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.41.46 80 {
#添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#删除后面多余的配置,:wq保存退出
vim /etc/sysctl.conf #配置LVS的内核文件
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
ipvsadm-save > /etc/sysconfig/ipvsadm #创建ipvsadm文件,为启动ipvsadm服务做准备
systemctl start {
keepalived,ipvsadm} #启动keepalived和ipvsadm服务
systemctl status {
keepalived,ipvsadm} #查看状态
ipvsadm -ln #查看ipvsadm策略,因为keepalived是专门针对LVS所设计的软件,所以所有的配置在keepalived.conf文件中都做好了,并不需要对ipvsadm进行配置,在启动keepalived和ipvsadm服务时,ipvsadm会读取keepalived配置文件,进行相应的设置。
----------------------------------------------------------------------------------------
——————————————————44服务器(LVS备)————————————————————————————
LVS的备服务器在主服务器正常工作时,是处于待机状态的,当主宕机或者keepalived服务挂掉,会接替主的位置,
从而不会导致业务瘫痪。其具体配置和主一样,只是需要在keepalived.conf中稍作修改即可。
yum install -y keepalived ipvsadm
vim /etc/keepalived/keepalived.conf #编辑keepalived配置文件
global_defs {
#定义全局参数
#第10行参数为邮件服务地址,改为指向本地
smtp_server 127.0.0.1
#第12行参数指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_ZHU,备为LVS_BEI
router_id LVS_BEI
#第14行注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
#或者将包含vrrp的四行全部删掉
#vrrp_strict
}
vrrp_instance VI_1 {
#定义VRRP热备实例参数
#第20行参数为指定热备状态,主为MASTER,备为BACKUP
state BACKUP
#第21行修改指定承载vip地址的物理接口,是ens33
interface ens33
#第22行参数为指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
#nopreempt #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
#第23行参数为指定优先级,数值越大优先级越高,这里设置主为100,备为90
priority 90
advert_int 1 #通告间隔秒数(心跳频率)
authentication {
#定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
#第27行参数为指定验证密码,主备服务器保持一致
auth_pass 1111
}
virtual_ipaddress {
#指定群集vip地址
192.168.41.100
}
}
#第36行参数为指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.41.100 80 {
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
#第39行参数为指定群集工作模式,改为直接路由(DR)
lb_kind DR
persistence_timeout 0 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
#第43行参数为指定第一个Web节点的地址、端口
real_server 192.168.41.45 80 {
weight 1 #节点的权重
#第45行删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.41.46 80 {
#添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#删除后面多余的配置,:wq保存退出
vim /etc/sysctl.conf #配置LVS的内核文件
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
ipvsadm-save > /etc/sysconfig/ipvsadm #创建ipvsadm文件,为启动ipvsadm服务做准备
systemctl start {
keepalived,ipvsadm} #启动keepalived和ipvsadm服务
systemctl status {
keepalived,ipvsadm} #查看状态
ipvsadm -ln #查看ipvsadm策略,因为keepalived是专门针对LVS所设计的软件,所以所有的配置在keepalived.conf文件中都做好了,并不需要对ipvsadm进行配置,在启动keepalived和ipvsadm服务时,ipvsadm会读取keepalived配置文件,进行相应的设置。
3.测试
当1和2全部完成,我们首先切换到LVS主服务器
ip addr #查看ip,此时主LVS会产生vip地址192.168.41.100
访问192.168.41.100进行测试
systemctl stop keepalived #宕掉主的keepalived
ip addr #再次查看,此时vip消失
切换到备服务器
ip addr #查看备LVS的ip,会发现vip跑到了备上面
再次访问192.168.41.100进行测试,成功表示备服务器承担了调度器的作用,高可用OK
至此,LVS+keepalived高可用负载均衡集群的搭建完成
四、总结
- 注意各集群的内核文件的修改,LVS和Web集群是不一样的
- 各类的ip地址要在配置文件中正确使用,哪里用什么类型的地址,一定不能写错
- 防火墙问题