专栏首页小手冰凉搭建 LVS+HA网站服务群集

搭建 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 = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@lvs1 /]# sysctl -p                       # 刷新使配置生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.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 keepalived

global_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 = 0
net.ipv4.conf.default.send_redirects = 0
net.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:0
DEVICE=lo:0
IPADDR=200.0.0.100               # VIP  地址
NETMASK=255.255.255.255          # 掩码为1
ONBOOT=yes
[root@web1 network-scripts]# ifup lo:0      # 启动虚接口
[root@web1 network-scripts]# ifconfig lo:0      # 查看配置有无生效
lo:0: flags=73<UP,LOOPBACK,RUNNING>  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 = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@web1 /]# sysctl -p             # 刷新使配置生效
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 InActConn
TCP  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: <BROADCAST,MULTICAST,UP,LOWER_UP> 
    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 InActConn
TCP  200.0.0.100:80 rr
  -> 200.0.0.3:80                 Route   1      0          0         
    #当主调度器或Web2节点恢复正常后,将会自动添加到群集中,并且正常运行。

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Apache深度优化

    一、开启apache的Gzip(deflate)功能 gzip可以极大的加速网站,压缩比率通常在40%~80%之间,在之前的版本中,Gizp是第三方压缩工具,但...

    小手冰凉
  • Redis 群集部署

    一、Redis群集相关概念 Redis是从3.0版本开始支持cluter的,采用的是hash槽方式,可以将多个Redis实例整合在一起,形成一个群集,也就是将数...

    小手冰凉
  • Linux 弱口令检测和端口扫描

    在 Internet 环境中,过于简单的口令是服务器面临的最大风险,对于任何一个承担着安全责任的管理员,及时找出这些弱口令账号是非常必要的。 John the ...

    小手冰凉
  • Linux基础(day56)

    14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早...

    运维小白
  • 附012.Kubeadm部署高可用Kubernetes

    Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master。HA有通常有如下两...

    木二
  • PHP二叉树(一):平衡二叉树(AVL)

    平衡二叉树 <?php /** * description: 平衡二叉树 */ //结点 class Node { public $key; ...

    琯琯
  • 腾讯云新用户云服务器代金券及最新秒杀优惠活动

    目前国内云计算市场竞争异常激烈,尤其是国内的腾讯云商家促销活动一波接一波的进行,对于有需要的用户确实得到不小的实惠。但是这样给予国内的主机商确实是比较大的打击...

    郑州人
  • 7天学会腾讯云服务器建站(一) – 腾讯云服务器选择与系统安装

    以前我们站长选择主机、服务器都会选择海外主机商,海外主机商相对便宜一些,但是随着这几年国内主机商的发展,以及类似腾讯云服务商的出现,我们考虑到速度、稳定以及商家...

    老蒋
  • linux每日命令(29):chown命令

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管...

    用户1214487
  • Golang Leetcode 337. House Robber III.go

    版权声明:原创勿转 https://blog.csdn.net/anakinsun/arti...

    anakinsun

扫码关注云+社区

领取腾讯云代金券