Centos 7搭建LVS+Keepalived高可用Web服务群集

一、LVS+Keepalived高可用群集

Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。使用Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。

在基于LVS+Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器。此博客将以DR模式的LVS群集为基础,增加一台从负载调度器,使用Keepalived来实现主、从调度器的热备,从而构建兼有负载均衡、高可用两种能力的LVS网站群集平台。

因为该服务涉及到了LVS技术,相关LVS概述及配置博文可以参考以下链接:
Centos 7之LVS负载均衡群集概述

构建基于地址转换(LVS—NAT)模式的负载均衡群集

构建基于直接路由模式(DR)的负载均衡群集

1、案例环境如下:

使用Keepalived构建LVS群集时,也需要用到ipvsadm管理工具,但大部分工作会由Keepalived自动完成,不需要手动执行ipvsadm(除了查看和监控群集以外)。

2、环境分析

1)、2个调度器和2个web节点使用同一个网段地址,可以直接和外网通信。为了共享存储的安全性,一般将web节点和存储服务器规划到内网环境,所以web节点必须有两个及以上网卡的接口。

2)、我这里资源有限,也为了配置方便,所以调度器和web节点分别只有两个,在web访问请求量不大的情况下,足够了,但是若访问请求比较大,那么最少要分别配置三个调度器和web节点,如果只有两个web节点的话,访问量又比较大,那么一旦有一个宕机了,那剩下一个独苗必定会因为扛不住激增的访问请求,而被打死。

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

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

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

3、最终效果

1)、客户端多次访问群集的VIP,得到的是同一个网页。

2)、主调度器宕机后,群集的VIP地址将会自动漂移到从(备份)调度器,此时,所有的调度任务由从调度器进行分配。当主调度器恢复运行后,群集的VIP地址会自动转移回主调度器,主调度器继续工作,从调度器转回备份状态。

3)、web节点宕机后,会被keepalived健康检查功能检测到,从而自动在web节点池中去除宕机的节点,待web节点恢复运行后,会被自动添加到web节点池中。

二、开始配置LVS+Keepalived高可用群集

1、部署第一台Web服务器

[[email protected] ~]# yum -y install httpd  <!--安装httpd服务-->
[[email protected] ~]# echo "www.benet.com" >
/var/www/html/index.html   <!--创建网站主页,写入测试数据-->
[[email protected] ~]# systemctl start httpd   <!--启动httpd服务-->
[[email protected] ~]# systemctl enable httpd<!--设置开机自动启动-->
[[email protected] ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-lo:0
           <!--复制lo:0网卡配置文件-->
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
         <!--编辑lo:0网卡配置文件-->
DEVICE=lo:0   <!--修改网卡名字-->
IPADDR=192.168.100.253   <!--配置VIP地址-->
NETMASK=255.255.255.255   <!--配置子网掩码-->
ONBOOT=yes
<!--保留上面四行配置项即可,多余的行删除-->
[[email protected] ~]# systemctl restart network   <!--重启网卡服务-->
[[email protected] ~]# ifconfig    <!--查看配置是否生效-->
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 488  bytes 39520 (38.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 488  bytes 39520 (38.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.253  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
[[email protected] ~]# vim /etc/sysctl.conf <!--修改web服务器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
[[email protected] ~]# 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

2、部署第二台Web服务器

[[email protected] ~]# yum -y install httpd  <!--安装httpd服务-->
[[email protected] ~]# echo "www.accp.com" >
/var/www/html/index.html   <!--创建网站主页,写入测试数据-->
[[email protected] ~]# systemctl start httpd  <!--启动httpd服务-->
[[email protected] ~]# systemctl enable httpd   <!--设置开机自动启动-->
[[email protected] ~]# scp [email protected]:/etc/sysconfig/network-scripts/ifcfg-lo:0
/etc/sysconfig/network-scripts/
<!--拷贝 第一台网站服务器的lo:0网卡配置文件到第二台网站服务器-->
The authenticity of host ‘192.168.100.10 (192.168.100.10)‘ can‘t be established.
ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I.
ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b.
Are you sure you want to continue connecting (yes/no)? yes  <!--输入yes-->
Warning: Permanently added ‘192.168.100.10‘ (ECDSA) to the list of known hosts.
[email protected]‘s password:   <!--输入密码-->
ifcfg-lo:0                                                          100%   70    53.3KB/s   00:00
[[email protected] ~]# scp [email protected]:/etc/sysctl.conf /etc/sysctl.conf
            <!--拷贝ARP响应到第二台网站服务器-->
[email protected]‘s password:    <!--输入密码-->
sysctl.conf                                                         100%  660   304.3KB/s   00:00
[[email protected] ~]# systemctl restart network  <!--重启网卡服务-->
[[email protected] ~]# ifconfig    <!--查看是否配置生效-->
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 496  bytes 40064 (39.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 496  bytes 40064 (39.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.253  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
[[email protected] ~]# 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

3、部署主调度器

[[email protected] ~]# yum -y install keepalived ipvsadm <!--安装所需工具-->
[[email protected] ~]# vim /etc/sysctl.conf <!--调整内核参数,写入下面三行-->
            .....................
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[[email protected] ~]# sysctl -p      <!--刷新一下-->
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[[email protected] ~]# cd /etc/keepalived/
[[email protected] keepalived]# cp keepalived.conf keepalived.conf.bak          <!--备份配置文件-->
[[email protected] keepalived]# vim keepalived.conf <!--编辑keepalived配置文件-->

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL1<!--本服务器的名称改一下,在群集中所有调度器名称里必须唯一-->
}

vrrp_instance VI_1 {         <!--定义VRRP热备实例-->
    state MASTER             <!--设置为主调度器-->
    interface ens32            <!--承载VIP地址的物理网卡接口根据实际情况改一下-->
    virtual_router_id 51<!--虚拟路由器的ID号,每个热备组保持一致-->
    priority 100            <!--优先级,数值越大优先级越高-->
    advert_int 1           <!--通告间隔秒数(心跳频率)-->
    authentication {       <!--认证信息,每个热备组保持一致-->
        auth_type PASS   <!--认证类型-->
        auth_pass 1111       <!--密码字串-->
    }
    virtual_ipaddress {
        192.168.100.253     <!--指定漂移IP地址(VIP),可以有多个-->
    }
}

virtual_server 192.168.100.253 80 { <!--改为VIP地址及所需端口-->
    delay_loop 6            <!--健康检查的间隔时间(秒)-->
    lb_algo rr   <!--根据需要改一下负载调度算法,rr表示轮询-->
    lb_kind DR   <!--设置工作模式为DR(直接路由)模式-->
    persistence_timeout 50   <!--连接保持时间-->
    protocol TCP          <!--应用服务采用的是TCP协议-->

real_server 192.168.100.10 80 {       <!--一个web节点的配置,real_server 192.168.100.10 80 {  ..... }是复制下面的。复制过来后,更改一下节点IP地址即可-->
        weight 1                 <!--节点的权重-->
        TCP_CHECK {       <!--健康检查方式-->
            connect_port 80   <!--检查的目标端口-->
            connect_timeout 3     <!--连接超时(秒)-->
            nb_get_retry 3       <!--重试次数-->
            delay_before_retry 3   <!--重试间隔(秒)-->
        }
    }

    real_server 192.168.100.20 80 {        <!--一个web节点的配置,改动完成后,有几个节点就复制几份real_serve 192.168.100.20 80  {  ..... }到该行的上方,最好别往下面粘贴,以防大括号丢失-->
        weight 1            <!--节点的权重-->
        TCP_CHECK {    <!--健康检查方式-->
            connect_port 80     <!--检查的目标端口-->
            connect_timeout 3   <!--连接超时(秒)-->
            nb_get_retry 3          <!--重试次数-->
            delay_before_retry 3   <!--重试间隔(秒)-->
        }
    }
}

 <!--以下还有很多配置项,我这里有98行,全部删除即可,若不删除时重启服务可能报错-->
[[email protected] ~]# systemctl restart keepalived <!--重启服务-->
[[email protected] ~]# systemctl enable keepalived <!--设置开机自启动-->

4、配置从调度器

[[email protected] ~]# yum -y install ipvsadm keepalived
                  <!--安装ipvsadm和keepalived软件包-->
[[email protected] ~]# scp [email protected]:/etc/sysctl.conf /etc/
<!--将主调度器的/proc参数文件复制过来-->
[email protected] s password:            <!--输入主调度器的用户密码-->
sysctl.conf                                 100%  566   205.8KB/s   00:00
[[email protected] ~]# sysctl -p               <!--刷新-->
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[[email protected] ~]# scp [email protected]:/etc/keepalived/keepalived.conf
/etc/keepalived/
             <!--拷贝主节点的keepalived主配置文件到从节点服务器上-->
[email protected]‘s password:       <!--输入密码-->
keepalived.conf                                                                                     100%  803     2.1MB/s   00:00
[[email protected] ~]# vim /etc/keepalived/keepalived.conf <!--修改keepalived主配置文件-->
<!--若两台服务器都是ens32网卡的话,那么所需该的只有以下三项(其他项保持默认)-->
   router_id LVS_HA_Backup    <!--将route_id改为不一样的,route_id必须是唯一的-->
    state BACKUP         <!--状态改为BACKUP,注意大小写-->
    interface ens32
    priority 99      <!--优先级要比主调度器小,并且不可与其他备份调度器优先级冲突-->
[[email protected] ~]# systemctl start keepalived     <!--启动keepalived服务-->
[[email protected] ~]# chkconfig --level 35 keepalived on   <!--设置开机自动启动-->

至此,主、从调度器也配置完成了,若需要部署多个从调度器,按照以上这个从(备份)调度器配置即可。

5、配置客户端访问

客户端测试访问VIP地址:192.168.100.253

为了测试,所以才在每个web节点准备不同的网页文件,以便测试是否有负载均衡的效果,现在效果已经有了,所以要搭建共享存储服务器,所有的web节点都从共享存储服务器读取网页文件向client提供,以便向client提供相同的网页文件。

接下来开始配置共享存储服务器

6、配置NFS服务器

[[email protected] ~]# yum -y install rpcbind nfs-utils   <!--安装所需软件包-->
[[email protected] ~]# mkdir /web   <!--创建共享网站根目录-->
[[email protected] ~]# echo "www.nfs.com" > /web/index.html
              <!--创建网站主页,写入测试数据-->
[[email protected] ~]# vim /etc/exports      <!--修改nfs主配置文件共享/web目录-->
/web    192.168.100.10(ro) 192.168.100.20(rw)
[[email protected] ~]# systemctl start rpcbind      <!---启动相关服务->
[[email protected] ~]# systemctl start nfs      <!--启动相关服务-->
[[email protected] ~]# systemctl enable rpcbind     <!--设置开机自动启动-->
[[email protected] ~]# systemctl enable nfs   <!--设置开机自动启动-->
[[email protected] ~]# showmount -e 192.168.100.30   <!--查看共享目录-->
Export list for 192.168.100.30:
/web 192.168.100.20,192.168.100.10

7、Web站点挂载共享存储目录

1)Web节点1服务器挂载共享目录

[[email protected] ~]# mount 192.168.100.30:/web /var/www/html/
          <!--挂载共享目录到网站服务器的根目录-->
[[email protected] ~]# cat /var/www/html/index.html  <!--查看是否挂载成功-->
www.nfs.com
[[email protected] ~]# vim /etc/fstab        <!--设置自动挂载-->
192.168.100.30:/web     /var/www/html/                            nfs     defaults        0 0
[[email protected] ~]# systemctl restart httpd     <!--重新启动httpd服务-->

2)Web节点2服务器挂载共享目录

[[email protected] ~]# mount 192.168.100.30:/web /var/www/html/
          <!--挂载共享目录到网站服务器的根目录-->
[[email protected] ~]# cat /var/www/html/index.html        <!--查看是否挂载成功-->
www.nfs.com
[[email protected] ~]# vim /etc/fstab   <!--设置自动挂载-->
192.168.100.30:/web     /var/www/html/                            nfs     defaults        0 0
[[email protected] ~]# systemctl restart httpd       <!--重新启动httpd服务-->

8、客户端再次访问测试

这次,客户端无论怎么刷新,看到的页面永远都是www.nfs.com

9、案例相关的查询命令

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

[[email protected] ~]# ip a show dev ens32
     <!--查询承载VIP地址的物理网卡ens32或者使用ip a命令也可以查看VIP地址-->
ens32: <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 192.168.100.40/24 brd 192.168.100.255 scope global noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet 192.168.100.253/32 scope global ens32    <!--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节点

[[email protected] ~]# ipvsadm -ln     <!--查询web节点池及VIP-->
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.253:80 rr persistent 50
  -> 192.168.100.10:80            Route   1      0          0
  -> 192.168.100.20:80            Route   1      0          0         

3)模拟第二台Web节点和主调度器故障,并在备份调度器上再次查询VIP以及web节点

[[email protected] ~]# ip a show dev ens32   <!--可以看到VIP地址已经转移到了备份调度器上-->
ens32: <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 192.168.100.40/24 brd 192.168.100.255 scope global noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet 192.168.100.253/32 scope global ens32    <!--VIP地址-->
       valid_lft forever preferred_lft forever
    inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[[email protected] ~]# ipvsadm -ln <!--Web2节点宕机后,就查不到了。-->
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.253:80 rr
  -> 192.168.100.10:80            Route   1      0          0         

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

[[email protected] ~]# tail -30 /var/log/messages

—————— 本文至此结束,感谢阅读 ——————

原文地址:https://blog.51cto.com/14156658/2457917

时间: 2024-10-27 11:05:21

Centos 7搭建LVS+Keepalived高可用Web服务群集的相关文章

搭建:LVS+Keepalived高可用Web服务群集环境

该服务涉及到的技术较多,相关技术文档的具体解释可以参考以下链接: Centos 7基于DR(直接路由)模式的负载均衡配置详解: Centos 7基于NAT(地址转换)模式的负载均衡配置详解: LVS负载均衡群集详解: 上面的博文结合,可以搭建出keepalived+DR/NAT模式的高可用web群集,这篇博文以keepalived+DR的环境来搭建一个高可用的web服务群集. 该博文以配置为主,并且按照生产环境来配置,可照搬,环境如下: 一.环境分析: 1.2个调度器和2个web节点使用同一个网

搭建LVS+Keepalived高可用负载集群

搭建LVS+Keepalived高可用负载集群 最近,本屌接到公司的任务,公司新上20台服务器,需要搭建一整套架构来运行公司的业务,其中有应用服务器,认证服务器,数据库服务器等.服务器基础架构中的应用服务器集群要有高可用性,且需要负载均衡.当我接到这个任务的时候,脑子里第一个想法就是LVS+Keepalived. 由于公司资金有限,直接上硬件的负载均衡设备是不可能的了,所以只好使用软件来实现,LVS在负载均衡集群中无疑是一种很好的方案,使用LVS可以同时分发10台以下的设备,用在我们这个项目中是

搭建LVS+keepalived高可用负载均衡集群

重点:各节点之间同步时间 netdate time.windows.com 1.关闭防火墙和SELinux    service iptables stop   setenforce 0 2.环境规划 3.配置  1)DR1     安装ipvsadm     yum -y install ipvsadm     安装keepalived  yum -y install keepalived     修改keepalived配置文件 vim /etc/keepalived/keepalived.

构建LVS+Keepalived高可用群集

防伪码:不必向我诉说春天,我的心里并没有秋寒 第六章 构建LVS+Keepalived高可用群集 前言:keeplived是专门针对LVS设计的一款辅助工具,主要功能是实现故障切换和健康检查,官方网站:http://www.keepalived.org.类似于我们以前学习过的HSRP热备份路由协议,HSRP是思科的私有协议,而VRRP是通用协议,都是为了实现故障切换,当一台路由器发生故障的时候,另一台马上接替工作,用户感觉不到服务器发生了问题,而且不会中断服务.我们今天学习的双机热备是就是利用了

CentOS7.4—构建LVS+Keepalived高可用群集

LVS+Keepalived高可用群集 目录第一部分 环境准备第二部分 使用Keepalived搭建双机热备第三部分 配置Web节点服务器第四部分 测试LVS+Keepalived高可用群集 第一部分 环境准备一:调度器两台(双机热备)系统:Linux-CentOS 7.4IP地址:192.168.80.10(主)IP地址:192.168.80.20(备)二:Web服务器两台系统:Linux-CentOS 7.4IP地址:192.168.80.30(SERVER AA)IP地址:192.168.

LVS+keepalived 高可用群集

LVS+keepalived 高可用群集 实验目的: 使用 keepalived 实现 LVS 双机热备. 实验环境: 主机 操作系统 IP地址 主要软件 LVS 负载调度器 CentOS 7.3 x86_64 192.168.217.128 keepalived LVS 负载调度器 CentOS 7.3 x86_64 192.168.217.129 keepalived web 服务器 1 CentOS 7.3 x86_64 192.168.217.130 http web 服务器 2 Cen

Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境】

1.环境说明: 系统版本:Ubuntu 14.04 LVS1物理IP:14.17.64.2   初始接管VIP:14.17.64.13 LVS2物理IP:14.17.64.3   初始接管VIP:14.17.64.14 真实web服务器IP:14.17.64.4-12 实现效果:去往14.17.64.13或14的报文,转发给14.17.64.4-12中的一台服务器处理,实现负载均衡. 要求1:当一台真实web服务器故障后,自动把该IP从负载均衡中踢除,恢复后自动加入集群. 要求2:当一台LVS服

Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】

1.环境说明: 系统版本:Ubuntu 14.04 LVS1物理IP:14.17.64.2   初始接管VIP:14.17.64.13 LVS2物理IP:14.17.64.3   初始接管VIP:14.17.64.14 真实web服务器IP:14.17.64.4-12 实现效果:去往14.17.64.13或14的报文,转发给14.17.64.4-12中的一台服务器处理,实现负载均衡. 要求1:当一台真实web服务器故障后,自动把该IP从负载均衡中踢除,恢复后自动加入集群. 要求2:当一台LVS服

linux企业常用服务---lvs+Keepalived高可用集群

部署前准备: iptables和selinux没配置,关掉 挂载系统镜像作为本地yum源,修改yum文件 源码包准备keepalived-1.2.13.tar.gz 环境介绍: 主服务器ip:192.168.100.157(keeplived+lvs) 从服务器ip:192.168.100.156(keeplived+lvs) 节点服务器ip:192.168.100.153-192.168.100.155(httpd) 集群vip:192.168.100.95 1.安装keepalived(在两