前言:

本篇文章主要讲述了新版本Rocky-9中怎么实现LVS(DR式)+Keepalived+Nginx实现高可用的案例详解(双机热备、LVS负载均衡),现在大部分文章都是讲述老版本centeros7 or centeros8中LVS的配置,这边文章主要针对的是新版本的使用者。

LVS 的 DR 模式(Direct Routing,直接路由模式)是 Linux 虚拟服务器(LVS)实现负载均衡的核心方案之一,聚焦 “请求转发高效、响应直连客户端”

这里阐述了Rocky-9.6版本中怎么去实现LVS的dr模式并且用keepalived实现监听lvs和nginx的心跳做到高可用性

LVS(dr模式)工作原理:

lVS DR 模式工作原理可概括为 “请求改 MAC 转发,响应直连客户端”:

  1. 请求阶段:客户端向集群虚拟 IP(VIP)发请求,Director 接收后,仅修改数据帧的目标 MAC 为选中的 Real Server(RS)的 MAC(IP 层不变,目标仍为 VIP),通过二层网络转发给 RS;
  2. 响应阶段:RS 的回环接口(lo)已绑定 VIP,可直接处理目标为 VIP 的请求,处理完后直接将响应(源 IP 为 VIP)发回客户端,无需经过 Director。

(关键前提:Director 与 RS 同网段,且通过 ARP 抑制避免 VIP 的 MAC 冲突。)

环境配置

系统主机名ip服务虚拟ip
Rocky-9.6LVS主192.168.56.134lvs+keepalived192.168.56.123
Rocky-9.6LVS备192.168.56.135lvs+keepalived192.168.56.123
Rocky-9.6Nginx-html-01192.168.56.136http192.168.56.123
Rocky-9.6Nginx-html-02192.168.56.128http192.168.56.123
Rocky-9.6Examine192.168.56.137检查验证

所有服务器防火墙需要关闭

systemctl stop firewalld

nginx默认80端口保持开放

实现过程

1.LVS主服务器配置(192.168.56.134)
1.1安装ipvsadm和keepalived

ps:这里的ipvsadm是用于管理Linux内核中的LVS,而在这里不需要配置ipvsadm但是需要用到它的服务,配置ipvsadm部分会集合在keepalived中,相当于再用keepalived去调用管理ipvsadm

yum -y install ipvsadm keepalived
1.2.加载ip_vs模块

ps:ip_vs 是 Linux 内核的 IP 虚拟服务器(IP Virtual Server,LVS 核心组件) 模块,为系统提供 四层(TCP/UDP)负载均衡能力,若未加载 ip_vs,系统无法识别 LVS 相关工具(如 ipvsadm 命令会报错 Protocol not available),负载均衡功能完全失效。

modprobe ip_vs
1.3.修改内核参数,关闭icmp重定向
vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.enp0s8.send_redirects=0  #根据自己网卡更改,可以用ip a查看

1.4.使配置生效
sysctl -p
1.5.配置keepalived
vi /etc/keepalived/keepalived.conf #存放keepalived文件的地址

删除原本配置(vi编辑器中使用)

:1,$d

添加配置

 global_defs {
       router_id LVS_DEVEL1
   }
   vrrp_instance VI_1 {           #实例组名称
       state MASTER               #角色名称,MASTER代表主,BACKUP代表备
       interface enp0s8           #网卡名称,不同版本不同名称
       virtual_router_id 51       #实例组编号
       priority 100               #权重值默认为100
       advert_int 1               
       authentication {
           auth_type PASS         #授权信息,默认不需要更改
           auth_pass 1111
       }
       virtual_ipaddress {
            192.168.56.123        #虚拟ip地址(vip),可以一个也可以多个 
       }
   }
   virtual_server 192.168.56.123 80 {   #虚拟ip地址值,即客户端访问的入口
       delay_loop 3                     # 后端服务器健康检查的时间间隔(单位:秒)
       lb_algo wrr                      #指定 负载均衡调度算法,wrr为加权轮询 rr为平均分配
       lb_kind DR                       #指定 LVS 工作模式 
       persistence_timeout 0            #会话保持时长(单位:秒)
       protocol TCP                     #指定负载均衡的 网络协议
       real_server 192.168.56.136 80 {  #后端真实服务器,即实际提供服务的机器
           weight 2                     #该 Real Server 的 权重
           TCP_CHECK {                  #定义健康检查的具体方式
               connect_timeout 10       #TCP 连接超时时间
               retry 3                  #健康检查的 重试次数
               delay_before_retry 3     #两次重试之间的间隔时间(单位:秒)
               connect_port 80          #指定 健康检查的目标端口
           }
       }
       real_server 192.168.56.128 80 {
           weight 1
           TCP_CHECK {
               connect_timeout 10
               retry 3
               delay_before_retry 3
               connect_port 80
           }
       }
   }
1.6.启动keepalived服务
systemctl start keepalived
systemctl enable keepalived #开机自启动
1.7.查看是否成功创建虚拟ip
ip a

这里可以看到虚拟ip 192.168.56.123以及成功在网卡enp0s8中创建了

2.LVS备用服务器配置(192.168.56.135)

其他步骤和LVS主同步,区别仅在于keepalived配置文件

vi /etc/keepalived/keepalived.conf 

修改配置

 global_defs {
       router_id LVS_DEVEL2
   }
   vrrp_instance VI_1 {
       state BACKUP
       interface enp0s8
       virtual_router_id 51
       priority 99             #这里权重比主小
       advert_int 1
       authentication {
           auth_type PASS
           auth_pass 1111
       }
       virtual_ipaddress {
           192.168.56.123
       }
   }
   virtual_server 192.168.56.123 80 {
       delay_loop 3
       lb_algo wrr
       lb_kind DR
       persistence_timeout 0
       protocol TCP
       real_server 192.168.56.136 80 {
           weight 1                       #注意这里权限,方便后面测试
           TCP_CHECK {
               connect_timeout 10
               retry 3
               delay_before_retry 3
               connect_port 80
           }
       }
       real_server 192.168.56.128 80 {
           weight 2                       #注意这里权限,方便后面测试
           TCP_CHECK {
               connect_timeout 10
               retry 3
               delay_before_retry 3
               connect_port 80
           }
       }
   }

ps:这里将两台nginx服务器的权重修改的目的是方便最后测试的时候判断是否成功从主服务器切换到备用服务器。

3.Nginx主-01配置(192.168.56.136)
3.1.安装nginx
yum install nginx
3.2.修改nginx网页内容
cd /usr/share/nginx/html/
vi index.html

删除原本网页内容

:1,$d

修改内容

ps:看个人喜好修改这里是方便最后的测试

<pre>
Nginx-01111111111
<pre>
3.3.配置虚拟ip
ip addr add 192.168.56.123/32 dev lo
4.Nginx备-02配置(192.168.56.128)
4.1.安装nginx
yum install nginx
4.2.修改nginx网页内容
cd /usr/share/nginx/html/
vi index.html

删除原本网页内容

:1,$d

修改内容

ps:看个人喜好修改这里是方便最后的测试

<pre>
Nginx-02222222222
<pre>

4.3.配置虚拟ip
ip addr add 192.168.56.123/32 dev lo
5.验证是否成功启动并且配置成功
5.1用cmd访问虚拟ip地址(vip:192.168.56.123)

ps:测试中发现使用浏览器只会显示单一网页,因为浏览器会出现缓存问题体现不出配置的效果

并且使用服务器192.168.56.137时也出现这种情况(作者没有找出原因,希望有大佬可以在评论区解答一下)

curl 192.168.56.123

查看是否会出现nginx中配置的网页页面

这里可以看到成功访问到设置的测试页面中了,并且通过两次01,一次02,可以判断出现在是在LVS主服务器当中。

5.2测试当一台存放网站的nginx服务器停用后是否会自动到另外一台中

这里我们把其中一台存放nginx网站的服务器启动(这里以Nginx主(192.168.56.136)为例子)

关闭nginx主服务器

halt

然后重新在cmd中测试

curl 192.168.56.123

这里可以看到以及成功转移到nginx备服务器中,并且不再访问nginx主服务器

重新启动nginx主服务器

ps:重新启动后需要重新配置虚拟ip,并且要检查端口80是否开放,以及防火墙是否关闭

再次验证

5.3测试当主LVS服务器停用后是否会自动飘到另外一台中

关闭LVS主服务器(192.168.56.134)

halt

再次用cmd测试

这里发现停掉主服务器之后任然可以访问到192.168.56.123,并且通过两次02,一次01,可以判断出现在是在LVS备用服务器中。

总结

大概就是以上操作,如果有不对的地方欢迎在评论区讨论我也会修改,感谢大家观看!

更多推荐