从零开始的云计算生活——番外3,LVS+KeepAlived+Nginx高可用实现方案_lvs+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.环境准备
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=1net.ipv4.conf.default.arp_ignore=1net.ipv4.conf.lo.arp_ignore=1net.ipv4.conf.all.arp_announce=2net.ipv4.conf.default.arp_announce=2net.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 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 keepalivedglobal_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节点进行查看集群信息
完成