目录
2.安装ipvsadm和keepalived(Lvs服务器),nginx服务器安装nginx
二、Keepalived+Lvs+Nginx高可用集群负载均衡的搭建
[1. 配置 Master](#1. 配置 Master)
[2. 配置Lvs Backup](#2. 配置Lvs Backup)
[3. 测试](#3. 测试)
前言
在大型网站中一般服务端会做集群,同时利用负载均衡器做负载均衡。这样有利于将大量的请求分散到各个服务器上,提升网站的响应速度。当然为了解决单点故障的问题,还会做热备份方案。这里演示利用LVS做负载均衡器,同时利用Keepalived保证其高可用,基于LVS的DR模式构建Nginx集群。
一、环境搭建
1.环境准备
HOSTNAME | IP | 说明 |
---|---|---|
nginx | 192.168.71.170 | nginx服务器 |
nginx | 192.168.71.174 | nginx服务器 |
Lvs+keepalived(主) | 192.168.71.166 | Lvs+keepalived(VIP:192.168.71.150) |
Lvs+keepalived(备) | 192.168.71.169 | Lvs+keepalived(VIP:192.168.71.150) |
2.安装ipvsadm和keepalived(Lvs服务器),nginx服务器安装nginx

图中显示目前版本为1.2.1,此外是一个空列表,啥都没。
-
注:关于虚拟ip在云上的事儿
-
1.阿里云不支持虚拟IP,需要购买他的负载均衡服务
-
2.腾讯云支持虚拟IP,但是需要额外购买,一台节点最大支持10个虚拟ip
-
3.为两台RS配置虚拟ip(nginx服务器)
两台服务器配置一样,以下已一台服务器配置作为演示
1.配置虚拟网络子接口
1.进入到网卡配置目录,找到 lo(本地环回接口,用户构建虚拟网络子接口),创建一个新的文件ifcfg-lo:0 :
2.修改内容如下:
DEVICE=lo:0
IPADDR=192.168.71.150
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback:0
nginx1配置

nginx2配置

2.ARP响应级别与通告行为的概念
1.arp-ignore:ARP响应级别(处理请求)
-
0:只要本机配置了ip,就能响应请求
-
1:请求的目标地址到达对应的网络接口,才会响应请求
2.arp-announce:ARP通告行为(返回响应)
-
0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告
-
1:尽可能避免本网卡与不匹配的目标进行通告
-
2:只在本网卡通告
3.配置ARP
1.打开sysctl.conf
2.配置所有网卡、默认网卡以及虚拟网卡的arp响应级别和通告行为,分别对应:all,default,1o:
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.lo.arp_announce=2

3.刷新配置

4.增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理

5.防止重启失效,做如下处理,用于开机自启动
vim /etc/profile
route add -host 192.168.71.150 dev lo

二、Keepalived+Lvs+Nginx高可用集群负载均衡的搭建

这种架构目前在很多公司都在采用的高可用高性能架构, 优点如下:
-
使用Keepalived + Lvs 后可以实现主备切换高可用
-
结合了Lvs 后, 针对于后台的Real Server 这些真实的服务器做健康检查, 如果某台真实的服务器宕机后, Lvs就会自动剔除, 如果恢复后也可以自动加入.
-
其实 Keepalived 本身就是为 Lvs 定做了, 他们的匹配度, 结合度非常高, 通过 keepalivd 就可以配置 Lvs与 RS 的关系, 如负载均衡算法, 健康检查配置等.
1. 配置 Master
1.进入keepalived配置文件, 修改配置信息, 修改如下即可(注意观察注释匹配自己的信息节点)
配置文件如下:
! Configuration File for keepalived
global_defs {
router_id LVS_102
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.115.150
}
}
# LVS 配置: 配置集群访问的 IP+端口, 端口和nginx保持一致, 都是80, IP与端口是空格而不是冒号
virtual_server 192.168.115.150 80 {
# 健康检查的时间, 单位是秒
delay_loop 6
# 配置负载均衡的算法, 默认是 轮询
lb_algo rr
# 设置LVS的工作模式 NAT|TUN|DR lb是load_balance 负载均衡的缩写
lb_kind DR
# 会话持久化的时间, 默认是 50 秒
persistence_timeout 5
# 协议 -t
protocol TCP
# Real Server 配置 nginx服务ip+端口
real_server 192.168.115.113 80 {
# 轮询的权重, 默认有多少台, 就设置为多少个 1
weight 1
# 设置健康检查, 基于 tcp
TCP_CHECK {
# 检查的80端口
connect_port 80
# 检查的超时时间 2秒
connect_timeout 2
# 重试的次数 我们设置为2, 一般是5-7
nb_get_retry 2
# 设置间隔时间 3s
delay_before_retry 3
}
}
real_server 192.168.115.114 80 {
weight 1
# 设置健康检查, 基于 tcp
TCP_CHECK {
# 检查的80端口
connect_port 80
# 检查的超时时间 2秒
connect_timeout 2
# 重试的次数 我们设置为2, 一般是5-7
nb_get_retry 2
# 设置间隔时间 3s
delay_before_retry 3
}
}
}

清除负载均衡的规则

重启keepalived, 使得配置生效

2. 配置Lvs Backup
步骤同 Master ,只有配置文件不一样
! Configuration File for keepalived
global_defs {
#主服务器配置不同,名称随便起
router_id LVS_103
}
vrrp_instance VI_1 {
#主服务器配置不同
state BACKUP
interface ens33
virtual_router_id 51
#主服务器配置不同,权重需要比主服务器低
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.115.150
}
}
# LVS 配置: 配置集群访问的 IP+端口, 端口和nginx保持一致, 都是80, IP与端口是空格而不是冒号
virtual_server 192.168.115.150 80 {
# 健康检查的时间, 单位是秒
delay_loop 6
# 配置负载均衡的算法, 默认是 轮询
lb_algo rr
# 设置LVS的工作模式 NAT|TUN|DR lb是load_balance 负载均衡的缩写
lb_kind DR
# 会话持久化的时间, 默认是 50 秒
persistence_timeout 5
# 协议 -t
protocol TCP
# Real Server 配置 nginx服务ip+端口
real_server 192.168.115.100 80 {
# 轮询的权重, 默认有多少台, 就设置为多少个 1
weight 1
# 设置健康检查, 基于 tcp
TCP_CHECK {
# 检查的80端口
connect_port 80
# 检查的超时时间 2秒
connect_timeout 2
# 重试的次数 我们设置为2, 一般是5-7
nb_get_retry 2
# 设置间隔时间 3s
delay_before_retry 3
}
}
real_server 192.168.115.101 80 {
weight 1
# 设置健康检查, 基于 tcp
TCP_CHECK {
# 检查的80端口
connect_port 80
# 检查的超时时间 2秒
connect_timeout 2
# 重试的次数 我们设置为2, 一般是5-7
nb_get_retry 2
# 设置间隔时间 3s
delay_before_retry 3
}
}
}
重启完出现相同路由规则标识已配置成功
3. 测试
1.测试Lvs

停掉 LVS 的 Master 节点

网站还可以正常访问

重启Master 节点,我们发现ip有漂移回来了


2.测试nginx
我们关闭170节点的Nginx服务器(假如宕机状态)

进入master节点进行查看集群信息

完成