热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

一、LVS+Keepalived高可用群集Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不

一、LVS+Keepalived高可用群集

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

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

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

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

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

浅谈Keepalived双机热备

1、案例环境如下:

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

使用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服务器

[root@centos01 ~]# yum -y install httpd  
[root@centos01 ~]# echo "www.benet.com" >
/var/www/html/index.html   
[root@centos01 ~]# systemctl start httpd   
[root@centos01 ~]# systemctl enable httpd
[root@centos01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo 
/etc/sysconfig/network-scripts/ifcfg-lo:0   
           
[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
         
DEVICE=lo:0   
IPADDR=192.168.100.253   
NETMASK=255.255.255.255   
OnBOOT=yes

[root@centos01 ~]# systemctl restart network   
[root@centos01 ~]# ifconfig    
lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        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  mtu 65536
        inet 192.168.100.253  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
[root@centos01 ~]# vim /etc/sysctl.conf 
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@centos01 ~]# 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服务器

[root@centos02 ~]# yum -y install httpd  
[root@centos02 ~]# echo "www.accp.com" >
/var/www/html/index.html   
[root@centos02 ~]# systemctl start httpd  
[root@centos02 ~]# systemctl enable httpd   
[root@centos02 ~]# scp root@192.168.100.10:/etc/sysconfig/network-scripts/ifcfg-lo:0
/etc/sysconfig/network-scripts/  

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  
Warning: Permanently added '192.168.100.10' (ECDSA) to the list of known hosts.
root@192.168.100.10's password:   
ifcfg-lo:0                                                          100%   70    53.3KB/s   00:00    
[root@centos02 ~]# scp root@192.168.100.10:/etc/sysctl.conf /etc/sysctl.conf    
            
root@192.168.100.10's password:    
sysctl.conf                                                         100%  660   304.3KB/s   00:00   
[root@centos02 ~]# systemctl restart network  
[root@centos02 ~]# ifconfig    
lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        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  mtu 65536
        inet 192.168.100.253  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
[root@centos02 ~]# 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、部署主调度器

[root@centos04 ~]# yum -y install keepalived ipvsadm 
[root@centos04 ~]# 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
[root@centos04 ~]# sysctl -p      
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@centos04 ~]# cd /etc/keepalived/
[root@centos04 keepalived]# cp keepalived.conf keepalived.conf.bak          
[root@centos04 keepalived]# vim keepalived.conf 

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL1
}

vrrp_instance VI_1 {         
    state MASTER             
    interface ens32            
    virtual_router_id 51
    priority 100            
    advert_int 1           
    authentication {       
        auth_type PASS   
        auth_pass 1111       
    }
    virtual_ipaddress {
        192.168.100.253     
    }
}

virtual_server 192.168.100.253 80 { 
    delay_loop 6            
    lb_algo rr   
    lb_kind DR   
    persistence_timeout 50   
    protocol TCP          

real_server 192.168.100.10 80 {       
        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 {        
        weight 1            
        TCP_CHECK {    
            connect_port 80     
            connect_timeout 3   
            nb_get_retry 3          
            delay_before_retry 3   
        }
    }
}

 
[root@centos04 ~]# systemctl restart keepalived 
[root@centos04 ~]# systemctl enable keepalived 

4、配置从调度器

[root@centos05 ~]# yum -y install ipvsadm keepalived   
                  
[root@centos05 ~]# scp root@192.168.100.40:/etc/sysctl.conf /etc/              

root@192.168.100.40 s password:            
sysctl.conf                                 100%  566   205.8KB/s   00:00    
[root@centos05 ~]# sysctl -p               
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@centos05 ~]# scp root@192.168.100.40:/etc/keepalived/keepalived.conf
/etc/keepalived/      
             
root@192.168.100.40's password:       
keepalived.conf                                                                                     100%  803     2.1MB/s   00:00  
[root@centos05 ~]# vim /etc/keepalived/keepalived.conf 

   router_id LVS_HA_Backup    
    state BACKUP         
    interface ens32
    priority 99      
[root@centos05 ~]# systemctl start keepalived     
[root@centos05 ~]# chkconfig --level 35 keepalived on   

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

5、配置客户端访问

客户端测试访问VIP地址:192.168.100.253
Centos 7搭建LVS+Keepalived高可用Web服务群集

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

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

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

6、配置NFS服务器

[root@centos03 ~]# yum -y install rpcbind nfs-utils   
[root@centos03 ~]# mkdir /web   
[root@centos03 ~]# echo "www.nfs.com" > /web/index.html
              
[root@centos03 ~]# vim /etc/exports      
/web    192.168.100.10(ro) 192.168.100.20(rw)  
[root@centos03 ~]# systemctl start rpcbind      
[root@centos03 ~]# systemctl enable rpcbind     
[root@centos03 ~]# systemctl enable nfs   
[root@centos03 ~]# 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服务器挂载共享目录

[root@centos01 ~]# mount 192.168.100.30:/web /var/www/html/    
          
[root@centos01 ~]# cat /var/www/html/index.html  
www.nfs.com
[root@centos01 ~]# vim /etc/fstab        
192.168.100.30:/web     /var/www/html/                            nfs     defaults        0 0
[root@centos01 ~]# systemctl restart httpd     

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

[root@centos02 ~]# mount 192.168.100.30:/web /var/www/html/    
          
[root@centos02 ~]# cat /var/www/html/index.html        
www.nfs.com
[root@centos02 ~]# vim /etc/fstab   
192.168.100.30:/web     /var/www/html/                            nfs     defaults        0 0
[root@centos02 ~]# systemctl restart httpd       

8、客户端再次访问测试

这次,客户端无论怎么刷新,看到的页面永远都是www.nfs.com
Centos 7搭建LVS+Keepalived高可用Web服务群集

9、案例相关的查询命令

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

[root@centos04 ~]# ip a show dev ens32   
     
ens32:  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    
       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@centos04 ~]# ipvsadm -ln     
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节点

[root@centos05 ~]# ip a show dev ens32   
ens32:  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    
       valid_lft forever preferred_lft forever
    inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@centos05 ~]# ipvsadm -ln 
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)查看调度器故障切换时的日志消息

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

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


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • RingBuffer,或者说CircularBuffer,是一个长度固定的缓冲区,当从一端插入元素超过指定的最大长度时,缓冲区另一端的元素 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 51nod3221祝寿(反向建图优化)
    题目链接感觉忘记了好多东西。求有向图中其余点到一个点的最短距离可以将该图翻转后rundijkstra#include#include ... [详细]
  • A-Score UVA-1585水 ... [详细]
author-avatar
mobiledu2502875577
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有