从零开始的云计算生活——番外3,LVS+KeepAlived+Nginx高可用实现方案
目录
前言
一、环境搭建
1.环境准备
2.安装ipvsadm和keepalived(Lvs服务器),nginx服务器安装nginx
3.为两台RS配置虚拟ip(nginx服务器)
1.配置虚拟网络子接口
2.ARP响应级别与通告行为的概念
3.配置ARP
二、Keepalived+Lvs+Nginx高可用集群负载均衡的搭建
1. 配置 Master
2. 配置Lvs Backup
3. 测试
1.测试Lvs
2.测试nginx
前言
在大型网站中一般服务端会做集群,同时利用负载均衡器做负载均衡。这样有利于将大量的请求分散到各个服务器上,提升网站的响应速度。当然为了解决单点故障的问题,还会做热备份方案。这里演示利用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 keepalivedglobal_defs {router_id LVS_102
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_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# 协议 -tprotocol TCP# Real Server 配置 nginx服务ip+端口real_server 192.168.115.113 80 {# 轮询的权重, 默认有多少台, 就设置为多少个 1weight 1# 设置健康检查, 基于 tcpTCP_CHECK {# 检查的80端口connect_port 80# 检查的超时时间 2秒connect_timeout 2# 重试的次数 我们设置为2, 一般是5-7nb_get_retry 2# 设置间隔时间 3sdelay_before_retry 3}}real_server 192.168.115.114 80 {weight 1# 设置健康检查, 基于 tcpTCP_CHECK {# 检查的80端口connect_port 80# 检查的超时时间 2秒connect_timeout 2# 重试的次数 我们设置为2, 一般是5-7nb_get_retry 2# 设置间隔时间 3sdelay_before_retry 3}}
}
清除负载均衡的规则
重启keepalived, 使得配置生效
2. 配置Lvs Backup
步骤同 Master ,只有配置文件不一样
! Configuration File for keepalived
global_defs {#主服务器配置不同,名称随便起router_id LVS_103
}vrrp_instance VI_1 {#主服务器配置不同state BACKUPinterface ens33virtual_router_id 51#主服务器配置不同,权重需要比主服务器低priority 90advert_int 1authentication {auth_type PASSauth_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# 协议 -tprotocol TCP# Real Server 配置 nginx服务ip+端口real_server 192.168.115.100 80 {# 轮询的权重, 默认有多少台, 就设置为多少个 1weight 1# 设置健康检查, 基于 tcpTCP_CHECK {# 检查的80端口connect_port 80# 检查的超时时间 2秒connect_timeout 2# 重试的次数 我们设置为2, 一般是5-7nb_get_retry 2# 设置间隔时间 3sdelay_before_retry 3}}real_server 192.168.115.101 80 {weight 1# 设置健康检查, 基于 tcpTCP_CHECK {# 检查的80端口connect_port 80# 检查的超时时间 2秒connect_timeout 2# 重试的次数 我们设置为2, 一般是5-7nb_get_retry 2# 设置间隔时间 3sdelay_before_retry 3}}
}
重启完出现相同路由规则标识已配置成功
3. 测试
1.测试Lvs
停掉 LVS 的 Master 节点
网站还可以正常访问
重启Master 节点,我们发现ip有漂移回来了
2.测试nginx
我们关闭170节点的Nginx服务器(假如宕机状态)
进入master节点进行查看集群信息
完成