千家信息网

搭建 LVS+HA网站服务群集

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,搭建keepalived+DR/NAT模式的高可用web群集,这篇博文以keepalived+DR的环境来搭建一个高可用的web服务群集。相关技术文档可以去本人主页查看:https://blog.51
千家信息网最后更新 2025年12月02日搭建 LVS+HA网站服务群集

搭建keepalived+DR/NAT模式的高可用web群集,这篇博文以keepalived+DR的环境来搭建一个高可用的web服务群集。

相关技术文档可以去本人主页查看:https://blog.51cto.com/14227204 ,https://blog.51cto.com/14227204/2438901

环境如下:


一、环境分析:

1、2个调度器和2个web节点使用同一个网段地址,可以直接和外网通信。为了共享存储的

安全性,一般将web节点和存储服务器规划到内网环境,所以web节点必须有两个及以上

网卡的接口。

2、我这里资源有限,也为了配置方便,所以调度器和web节点分别只有两个,在web访问请

求量不大的情况下,足够了,但是若访问请求比较大,那么最少要分别配置三个调度器和

web节点,如果只有两个web节点的话,访问量又比较大,那么一旦有一个宕机了,那剩下

一个独苗必定会因为扛不住激增的访问请求,而被打死。

3、准备系统映像,以便安装相关服务。

4、自行配置防火墙策略和除了VIP之外的IP地址(我这里直接关闭了防火墙)。

5、keepalived会自动调用IP_vs模块,所以无需手动加载。

二、开始搭建:

配置主调度器:

[root@lvs1 /]# yum -y install ipvsadm keepalived        # 安装keepalived 和 ipvsadm管理工具[root@lvs1 keepalived]# vim /etc/sysctl.conf        # 调整内核参数,关闭ICMP重定向...........net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.default.send_redirects = 0net.ipv4.conf.ens33.send_redirects = 0[root@lvs1 /]# sysctl -p                       # 刷新使配置生效net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.default.send_redirects = 0net.ipv4.conf.ens33.send_redirects = 0[root@lvs1 /]# cd /etc/keepalived/[root@lvs1 keepalived]# cp keepalived.conf keepalived.conf.bak        # 复制一份keepalived 主配文件作为备份,以免修改时出错[root@lvs1 /]# vim /etc/keepalived/keepalived.conf           # 编辑主配文件! Configuration File for keepalivedglobal_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc             # 当出错时,将报错信息发送到的收件人地址,可根据需要填写     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc    #发件人姓名、地址(可不做修改)      smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS1                #本服务器的名称改一下,在群集中所有调度器名称里必须唯一}  vrrp_instance VI_1 {    state MASTER             # 设为主调度器    interface ens33          #承载VIP地址的物理网卡接口根据实际情况改一下    virtual_router_id 51           priority 100          # 主调度器的优先级    advert_int 1    authentication {         # 主 从热备认证信息        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        # 指定群集 VIP地址        200.0.0.100    }   }virtual_server 200.0.0.100 80 {      # 虚拟服务器地址(VIP) 端口    delay_loop 15                # 健康检查的间隔时间    lb_algo rr                # 轮询调度算法    lb_kind DR              # 指定工作模式,这里为DR,也可改为NAT    ! persistence_timeout 50          #为了一会测试看到效果,将连接保持这行前加" !"将该行注释掉    protocol TCP        real_server 200.0.0.3 80 {      # web节点的地址及端口        weight 1        TCP_CHECK {            connect_port 80            connect_timeout 3            nb_get_retry 3                        delay_before_retry 3        }    }        real_server 200.0.0.4 80 {     # 另一 web节点地址及端口                weight 1                TCP_CHECK {                        connect_port 80          # 配置连接端口                        connect_timeout 3                        nb_get_retry 3                        delay_before_retry 3        }    }}[root@lvs1 /]# systemctl restart keepalived [root@lvs1 /]# systemctl enable keepalived

主调度器到这就告一段落配置完成了:

配置从调度器:


[root@localhost /]# yum -y install keepalived ipvsadm[root@localhost /]# scp root@200.0.0.1:/etc/sysctl.conf /etc/       # 可通过scp命令将配置较繁杂的复制过来root@200.0.0.1's password: sysctl.conf                                                                                                                                                                     100%  566     0.6KB/s   00:00    [root@localhost /]# sysctl -p[root@localhost /]# sysctl -p           # 刷新使配置生效net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.default.send_redirects = 0net.ipv4.conf.ens33.send_redirects = 0[root@localhost /]# vim /etc/keepalived/keepalived.conf ......................router_id LVS2                       # route-id 要不一样vrrp_instance VI_1 {    state BACKUP               # 状态改为 BACKUP 最好大写    interface ens33              # 网卡如果一样的话可不更改    virtual_router_id 51    priority 90                # 优先级要比主调度器小    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {               # 就需要改这些其他配置均与主调度器相同        200.0.0.100    }}[root@localhost /]# systemctl enable keepalived[root@localhost /]# systemctl restart  keepalived         # 重启服务使配置生效

若需要部署多个从调度器,按照以上这个从(备份)调度器配置即可

web1节点配置:


[root@web1 /]# cd /etc/sysconfig/network-scripts/[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0[root@web1 network-scripts]# vim ifcfg-lo:0DEVICE=lo:0IPADDR=200.0.0.100               # VIP  地址NETMASK=255.255.255.255          # 掩码为1ONBOOT=yes[root@web1 network-scripts]# ifup lo:0      # 启动虚接口[root@web1 network-scripts]# ifconfig lo:0      # 查看配置有无生效lo:0: flags=73  mtu 65536        inet 200.0.0.100  netmask 255.255.255.255        loop  txqueuelen 1  (Local Loopback)[root@web1 /]# route add -host 200.0.0.100 dev lo:0            # 添加本地路由[root@web1 /]# vim /etc/rc.local               #设置开机自动,添加这条路由记录                              ................................/sbin/route add -host 200.0.0.100 dev lo:0[root@web1 /]# vim /etc/sysctl.conf     # 调整/proc参数,关闭 ARP响应net.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.default.arp_ignore = 1net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2[root@web1 /]# sysctl -p             # 刷新使配置生效net.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.default.arp_ignore = 1net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2[root@web1 /]# yum -y install httpd[root@web1 /]# echo test1.com > /var/www/html/index.html[root@web1 /]# systemctl start httpd[root@web1 /]# systemctl enable httpd

web2节点和web1节点配置相同,这里我就省略了,但是这里我为了方便看出验证效果,将web2的测试文件写为test2.com

若访问到的是同一页面,在排除配置上错误的情况下,可以打开多个网页,或者稍等一会再刷新,因为它可能有一个保持连接的时间,所以会存在延迟。

三、搭建 NFS 共享存储服务:

[root@nfs /]# mkdir opt/wwwroot[root@nfs /]# vim /etc/exports       # 编写配置文件/opt/wwwroot    192.168.1.0/24(rw,sync,no_root_squash)[root@nfs /]# systemctl restart nfs         # 重启服务使配置生效[root@nfs /]# systemctl restart rpcbind[root@nfs /]# showmount -e                  # 查看本机发布的挂载目录Export list for nfs:/opt/wwwroot 192.168.1.0/24[root@nfs /]# echo nfs.test.com > /opt/wwwroot/index.html

所有节点挂载共享存储目录:

[root@web1 /]# showmount -e 192.168.1.5       # 查看共享服务器共享的所有目录Export list for 192.168.1.5:/opt/wwwroot 192.168.1.0/24[root@web1 /]# mount 192.168.1.5:/opt/wwwroot/ /var/www/html/         # 挂载到本地[root@web1 /]# vim /etc/fstab               #设置自动挂载                    .........................192.168.1.5:/opt/wwwroot  /var/www/html   nfs   defaults,_netdev 0 0

web1和web2都需要挂载


1)VIP在哪个调度器上,查询该调度器承载VIP地址的物理接口,即可看到VIP地址(VIP地址在备份调度器上查不到的):

[root@LVS1 ~]# ip a show dev ens33              #查询承载VIP地址的物理网卡ens332: ens33:  ate UP groupn 1000   link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ff   inet 200.0.0.1/24 brd 200.0.0.255 scope global noprefixroute ens33      valid_lft forever preferred_lft forever   inet 200.0.0.100/32 scope global ens33                   #VIP地址。      valid_lft forever preferred_lft forever   inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute       valid_lft forever preferred_lft forever

2)查询有哪些web节点:

[root@LVS1 ~]# ipvsadm -ln                  #查询web节点池及VIPIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags   RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  200.0.0.100:80 rr     200.0.0.3:80                 Route   1      0          0           200.0.0.4:80                 Route   1      0          0

3)模拟Web2节点和主调度器宕机,并在备份调度器上再次查询VIP以及web节点:

[root@LVS2 ~]# ip a show dev ens33       #可以看到VIP地址已经转移到了备份调度器上2: ens33:      link/ether 00:0c:29:9a:09:98 brd ff:ff:ff:ff:ff:ff    inet 200.0.0.2/24 brd 200.0.0.255 scope global noprefixroute ens33       valid_lft forever preferred_lft forever    inet 200.0.0.100/32 scope global ens33                      #VIP地址。       valid_lft forever preferred_lft forever    inet6 fe80::3050:1a9b:5956:5297/64 scope link noprefixroute        valid_lft forever preferred_lft forever[root@LVS2 ~]# ipvsadm -ln                   #Web2节点宕机后,就查不到了。IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  200.0.0.100:80 rr  -> 200.0.0.3:80                 Route   1      0          0             #当主调度器或Web2节点恢复正常后,将会自动添加到群集中,并且正常运行。

4)查看调度器故障切换时的日志消息:

[root@LVS2 ~]# tail -30 /var/log/messages



调度 配置 节点 地址 服务 备份 查询 接口 文件 服务器 环境 端口 网卡 存储 两个 情况 物理 目录 相同 可不 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何删除网络安全 多媒体软件开发课程 吉天下网络技术有限公司 分布式数据库非聚集索引 lt软件开发是学什么的 分组 取最新的一条数据库 服务器如何禁止某个ip端口 水利水电工程移民数据库 竞技世界网络技术公司旗下游戏 网络安全要注意教学设计 黄浦区智能网络技术公司 数据库中的二维表是什么意思 柯罗诺兽数据库 游戏开发中客户端与服务器端 商城网站服务器申请条件 服务器ip地址怎么映射 中国电信网络技术二面会提问什么 软件开发当前形势 南宁市青秀区聚龙网络技术工作室 学校网络安全谨防诈骗课件ppt 昆山创新软件开发职能 阳泉软件开发培训机构 软件开发可以做些什么 启动数据库服务的监听 软件开发走什么会计科目 生物制药相关数据库 天津网络安全实验室 法国初创软件开发公司 初级网络技术员 安卓怎么清理软件登录数据库
0