群集架构--LVS+Keepalived高可用群集的搭建

背景

在这个高度信息化的IT时代,企业的生产系统、业务运营、销售和支持、以及日常管理等环节越来越依赖于计算机信息和服务,使得对高可用(HA)技术的应用需求大量上升,以便提供持续的、不间断的计算机系统或网络服务。

1.Keepalived概述

1.1 Keepalived工具介绍

专为LVS和HA设计的一款健康检查工具:

  • 支持故障自动切换(Failover);
  • 支持节点健康状态检查(Health Checking);
  • 官方网站: http://www.keepalived.org/

在这里插入图片描述

1.2 Keepalived实现原理

  • Keepalived采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。
    在这里插入图片描述

原理剖析:

VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案

  • 由多台路由器组成—个热备组,通过共用的虚拟IP地址对外提供服务;
  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态;
  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

1.3 Keepalived安装与启动

  • 在LVS群集环境中应用时,也需用到ipvsadm管理工具;
  • YUM安装Keepalived;
  • 启用Keepalived服务。

2.Keepalived案例

2.1 案例分析

  • 企业应用中,单台服务器承担应用存在单点故障的危险;
  • 单点故障一旦发生,企业服务将发生中断,造成极大的危害。

在这里插入图片描述

2.2 案例讲解

  • 双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器;
  • 实现基于Web服务的双机热备
    漂移地址:192.168.70.200
    主、备服务器:192.168.70.9、192.168.70.10
    提供的应用服务:Web
    在这里插入图片描述

3.配置Keepalived服务器

3.1 配置Keepalived master服务器

3.1.1 配置目录与主配置文件

  • Keepalived配置目录位于/etc/keepalived/
  • keepalived.conf是主配置文件
    global_defs {…}区段指定全局参数;
    vrrp_instance 实例名称{…}区段指正VRRP热备参数;
    注释文字以 “!” 符号开头;
    目录samples,提供了许多配置样例作为参考。

3.1.2 常用配置选项

  • router_id HA_TEST_R1:本路由器(服务器)的名称;
  • vrrp_instance VI_1:定义VRRP热备实例;
  • state MASTER:热备状态,MASTER表示主服务器;
  • interface ens33:承载VIP地址的物理接口;
  • virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致;
  • priority 100:优先级,数值越大优先级越高,默认为100;
  • advert_int 1:通告间隔秒数(心跳频率);
  • auth_type PASS:认证类型;
  • auth_pass 123456:密码字串;
  • virtual_ipaddress {vip}:指定漂移地址(VIP),可以有多个。

3.2 配置Keepalived slave服务器

Keepalived备份服务器的配置与master的配置有三个选项不同:

  • router_id:设为自有名称
  • state:设为BACKUP
  • priority:优先级值低于主服务器
  • 其他选项配置与master相同

4.Keepalived双机热备效果测试

测试双机热备的效果:

  • 主、备机均启用Web服务,设置不同内容;
  • 先后禁用、启用主服务器的网卡。

执行的测试:

扫描二维码关注公众号,回复: 12263267 查看本文章
  • 测试1:使用ping检测192.168.70.200的连通性;
  • 测试2:访问http://192.168.70.200,确认可用性及内容变化;
  • 测试3:查看日志文件 /var/log/messages 中的变化。

5.基于LVS+Keepalived高可用群集项目

5.1 项目环境

(1)LVS负载调度服务器两台

  • IP地址:192.168.70.9
    Virtual-ip:192.168.70.200
  • IP地址:192.168.70.10
    Virtual-ip:192.168.70.200

(2)Web站点服务器两台

  • IP地址:192.168.70.11 (SERVER AA)
  • IP地址:192.168.70.12(SERVER AB)
    注意:这里Web服务器的网关不需要指向调度器网卡

(3)NFS共享服务器一台

  • IP地址:192.168.70.13

(4)客户机一台,用于测试验证

  • IP地址:192.168.70.14

注意:需确保相同网段之间能互相通信

5.2 实验目的

  • 客户机访问虚拟地址 192.168.70.200 ,通过Keepalived热备主服务器,轮询的访问到Apache1和Apache2主机;当主服务器故障后,由备选服务器顶替,成为主服务器,并实现主服务器的功能
  • 搭建出nfs网络文件存储服务。

5.3 项目步骤

5.3.1 配置NFS存储服务器

[root@nfs ~]# rpm -qa | grep rpcbind		//默认虚拟机已安装rpcbind模块
rpcbind-0.2.0-42.el7.x86_64
[root@nfs ~]# yum -y install nfs-utils	//确认是否安装nfs-utils软件包
已加载插件:fastestmirror, langpacks
base                                                     | 3.6 kB     00:00     
Loading mirror speeds from cached hostfile
 * base: 
软件包 1:nfs-utils-1.3.0-0.48.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@nfs ~]# mkdir /opt/web1
[root@nfs ~]# mkdir /opt/web2
[root@nfs ~]# echo "<h1>this is web1.</h1>" > /opt/web1/index.html
[root@nfs ~]# echo "<h1>this is web2.</h1>" > /opt/web2/index.html
[root@nfs ~]# vi /etc/exports
/opt/web1 192.168.70.11/32 (ro)
/opt/web2 192.168.70.12/32 (ro)
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# showmount -e
Export list for nfs:
/opt/web2 (everyone)
/opt/web1 (everyone)

5.3.2 配置Web站点服务器

  • 在Web1上进行的配置
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# showmount -e 192.168.70.13
Export list for 192.168.70.13:
/opt/web2 (everyone)
/opt/web1 (everyone)
[root@web1 ~]# mount 192.168.70.13:/opt/web1 /var/www/html
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      55954/httpd   
[root@web1 ~]# vi web1.sh
#!/bin/bash
#lvs_dr模式 web1
ifconfig lo:0 192.168.70.200 broadcast 192.168.70.200 netmask 255.255.255.255 up
route add -host 192.168.70.200 dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null

[root@web1 ~]# sh web1.sh
[root@web1 ~]# ifconfig		//查看虚拟端口
[root@web1 ~]# route -n 	//查看路由
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.70.10   0.0.0.0         UG    100    0        0 ens33
192.168.70.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.70.200  0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

在这里插入图片描述
在这里插入图片描述

  • 在Web2上进行的配置
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# mount 192.168.70.13:/opt/web2 /var/www/html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      54695/httpd 
[root@web2 ~]# vi web2.sh
#!/bin/bash
#lvs_dr模式 web2
ifconfig lo:0 192.168.70.200 broadcast 192.168.70.200 netmask 255.255.255.255 up
route add -host 192.168.70.200 dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null

[root@web2 ~]# sh web2.sh
[root@web2 ~]# ifconfig		//查看虚拟端口
[root@web2 ~]# route -n 	//查看路由
kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.70.10   0.0.0.0         UG    100    0        0 ens33
192.168.70.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.70.200  0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

在这里插入图片描述
在这里插入图片描述

5.3.3 配置LVS调度器

导入keepalived软件包
在这里插入图片描述
1)在LVS两台调度器上进行以下相同的配置

  • 加载ip_vs模块
[root@lvs ~]# modprobe ip_vs     	  '//加载ip_vs模块'
[root@lvs ~]# cat /proc/net/ip_vs      '//查看ip_vs版本信息'
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  • 安装ipvsadm
[root@lvs ~]# yum -y install ipvsadm
  • 配置相关环境,编译安装
[root@lvs ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs ~]# tar zxvf keepalived-2.0.13.tar.gz
[root@lvs ~]# cd keepalived-2.0.13/
[root@lvs keepalived-2.0.13]# ./configure --prefix=/
[root@lvs keepalived-2.0.13]# make && make install
[root@lvs keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@lvs keepalived-2.0.13]# systemctl enable keepalived.service
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

2)在LVS_1上的配置

[root@lvs_1 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    
    
	router_id lvs_1
}
vrrp_instance vi_1 {
    
    
	state MASTER
	interface ens33
	virtual_router_id 51
	priority 110
	advert int 1
	authentication {
    
    
	 auth_type PASS
	 auth_pass 6666
	}
	virtual_ipaddress {
    
    
	 192.168.70.200
	}
}
virtual_server 192.168.70.200 80 {
    
    
	delay_loop 6
	lb_algo rr
	lb_kind DR
	persistence_timeout 6
	protocol TCP
real_server 192.168.70.11 80 {
    
    
	weight 1
	TCP_CHECK {
    
    
	 connect_port 80
	 connect_timeout 3
	 nb_get_retry 3
	 delay_before_retry 3
	}
}
real_server 192.168.70.12 80 {
    
    
	weight 1
	TCP_CHECK {
    
    
	 connect_port 80
	 connect_timeout 3
	 nb_get_retry 3
	 delay_before_retry 3
	}
}
}
[root@lvs_1 ~]# systemctl start keepalived.service
[root@lvs_1 ~]# ipaddr

在这里插入图片描述

[root@lvs_1 ~]# 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.70.200:80 rr
  -> 192.168.70.11:80             Route   1      0          0         
  -> 192.168.70.12:80             Route   1      0          0 

3)在LVS_2上的配置

[root@lvs_2 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    
    
        router_id lvs_2
}
vrrp_instance vi_1 {
    
    
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 105
......//其他的和LVS_1配置相同

[root@lvs_2 ~]# systemctl start keepalived.service
[root@lvs_2 ~]# systemctl status keepalived.service

在这里插入图片描述

[root@lvs_2 ~]# 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.70.200:80 rr persistent 6
  -> 192.168.70.11:80             Route   1      0          0         
  -> 192.168.70.12:80             Route   1      0          0

5.4 验证结果

  • 在客户机上验证,访问浏览器得
    在这里插入图片描述
    在这里插入图片描述

  • 查看调度明细

在这里插入图片描述
在这里插入图片描述

  • 当主服务器故障后
[root@lvs_1 ~]# systemctl stop keepalived.service

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42449832/article/details/110940851