搭建lvs + keepalivd DR模式,双机热备基础与高可用群集

搭建lvs + keepalivd DR模式,双机热备基础与高可用群集

这里只说keepalivd 软件的原理 lvs在下面一篇博客中

https://blog.csdn.net/weixin_52184735/article/details/115363231?spm=1001.2014.3001.5501

一,概念

keepalived起初是专门针对lvs设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能(判断lvs负载调度器,节点服务器的可用性,以及随时隔离并替换新的服务器),当故障机恢复后将其重新加入群集中。

1,热备份

keepalived采用VRRP(virtual Router Redundant Protocol, 虚拟路由冗余协议)热备份协议,以软件的方式实现liunx服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案————由多台路由器组成一个热备份组,通过虚拟ip地址对外提供服务,每个热备份组内同一时刻只有一台主路由提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由会自动接替(通过优先级决定顺序)

2,高可用

keepalived不仅仅做用于双机热备。使用keepalived构建lvs群集更加简便易用,主要优势体现在热备切换,提高可用性,对节点服务器进行健康检查,自动移除失效的节点,恢复后再重新加入。

二,工作原理

Layer3,4,5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。

Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

Layer5:Layer5对指定的URL执行HTTP GET。然后使用MD5算法对HTTP GET结果进行求和。如果这个总数与预期值不符,那么测试是错误的,服务器将从服务器池中移除。该模块对同一服务实施多URL获取检查。如果您使用承载多个应用程序服务器的服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常工作。MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的。
SSL_GET与HTTP_GET相同,但使用SSL连接到远程Web服务器。
MISC_CHECK:此检查允许用户定义的脚本作为运行状况检查程序运行。结果必须是0或1.该脚本在导演盒上运行,这是测试内部应用程序的理想方式。可以使用完整路径(即/path_to_script/script.sh)调用可以不带参数运行的脚本。那些需要参数的需要用双引号括起来(即“/path_to_script/script.sh arg 1 … arg n”)

作用
主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)

工作原理原文链接:https://blog.csdn.net/lupengfei1009/article/details/86514445

三,准备环境

主机 系统 ip地址 服务
wed服务器1 centos7 外:192.168.211.10 内:192.168.131.10 http
wed服务器2 centos7 外:192.168.211.11 内:192.168.131.11 nginx
调度器 centos7 外:192.168.211.12 内:192.168.131.12
备用调度器 centos7 外:192.168.211.13 内:192.168.131.13 nfs
测试机 windos10

安装 yum -y install net-tools 使用netstat 查看端口

配置wed服务1

安装http

yum install -y httpd

配置wed服务2

安装 nginx

解压

tar -zxf nginx-1.18.0.tar.gz -C /usr/src/

cd /usr/src/nginx-1.18.0/

配置:编译:安装

  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install

备用调度器(这里为了节约虚拟机我把nfs服务放在这里)

搭建nfs服务

rpm -qa nfs-utils rpcbind  //查询是否安装

yum install nfs-utils rpcbind  //安装nfs(两个软件)

systemctl start rpcbind && systemctl start nfs  //启动(注意按顺序)

vim /etc/exports //进入文件指定共享目录

/home/nfs_wed 192.168.131.0/24(rw,sync,no_root_squash)

保存退出

exportfs -a  //加载文件

showmount -e  //查看共享目录

注:关闭防火墙

cd /home/nfs_wed/

vim index.html<h1> 测试 </h1>
<h1>------</h1>
<h1> 天天向上</h1>
<h1>每天进步一点点</h1>
<h1>hahhahahahha</h1>

wed服务器1

挂载nfs共享目录

yum install -y rpcbind nfs-utils     //下载rpcbind(必须)
systemctl restart rpcbind     //开启
mount 192.168.131.13:/home/nfs_wed /var/www/html/  //挂载
df   //查看挂载情况

wed服务器2

挂载nfs共享目录

(方法一样,只有挂载目录不一样,这里就不解释了)

yum install -y rpcbind nfs-utils

 systemctl restart rpcbind
 mount 192.168.131.13:/home/nfs_wed /usr/local/nginx/html/
 df

查看效果

wed服务1

http要关闭 setenforce 0 (不然会失败)

在这里插入图片描述

wed服务2

注::nginx会乱码是正常的

在这里插入图片描述

以上完成才往下面做

配置lvs 的DR模式

配置调度器

yum install -y ipvsadm //安装管理工具

配置虚拟接口地址(vip)

cd /etc/sysconfig/network-scripts/

 cp ifcfg-ens33 ifcfg-ens33:0

vim ifcfg-ens33:0

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:0
UUID=7b353156-27b0-455c-a01c-8cbcb5f18e41  
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.211.20   //是你的vip地址
NETMASK=255.255.255.0  //这个以后的都不要

  

 ifup ens33:0  //开启
 ifconfig ens33:0  //查看与自己配置是否匹配

调整/proc 响应参数

对于DR群集来说,由于lvs负载调度器和各节点需要公用一个vip地址,需要修改linux内核的重定向参数不然不知道那台机器响应

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

sysctl -p  //刷新一下

配置负载均衡分配策略

modprobe ip_vs //加载模块

ipvsadm -A -t 192.168.211.20:80 -s rr  //生成虚拟服务器

编写策略

ipvsadm -a -t 192.168.211.20:80 -r 192.168.211.10 -g -w 1
ipvsadm -a -t 192.168.211.20:80 -r 192.168.211.11 -g -w 1

保存策略

ipvsadm-save > /etc/sysconfig/ipvsadm

systemctl restart ipvsadm  //重启ipvsadm

配置节点服务器

wed服务1

 cd /etc/sysconfig/network-scripts/
  cp ifcfg-lo ifcfg-lo:0
  vim ifcfg-lo:0

修改

DEVICE=lo:0
IPADDR=192.168.211.20
NETMASK=255.255.255.255

ONBOOT=yes



  ifup lo:0  //开启
  ifconfig lo:0  //查看与自己配置是否匹配
  route add -host 192.168.211.20 dev lo:0  //添加一条路由

调整/proc 响应参数

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

sysctl -p

wed服务2

 cd /etc/sysconfig/network-scripts/
  cp ifcfg-lo ifcfg-lo:0
  vim ifcfg-lo:0

修改

DEVICE=lo:0
IPADDR=192.168.211.20
NETMASK=255.255.255.255

ONBOOT=yes



  ifup lo:0  //开启
  ifconfig lo:0  //查看与自己配置是否匹配
  route add -host 192.168.211.20 dev lo:0  //添加一条路由

调整/proc 响应参数

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

sysctl -p

测试(使用两个浏览器)

注:多刷几遍可能会有缓存

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

命令测试
ipvsadm -ln

在这里插入图片描述

以上完成才往下面做

搭建双机热备

在调度器上配置keepailved

下载包

wget http://www.keepalived.org/software/keepalived-1.4.5.tar.gz

解压包

tar -zxf keepalived-1.4.5.tar.gz

配置,编译,安装

./configure && make && make install

mkdir -p /etc/keepalived/

vim /etc/keepalived/keepalived.conf

global_defs {
    
    
    pancheng_1   // 名称
}

vrrp_instance VI_1 {
    
     // 定义vrrp 热备实例
    state MASTER  //热备份状态,MASTER 表示主服务器,BACKUP 表示备份服务器
    interface ens33  //承载vip地址的物理接口
    virtual_router_id 1  //虚拟路由的ID号,每一个必须一致
    priority 100    //优先级 ,越大越优先
    advert_int 1     // 通告间隔秒数(心跳频率)
    authentication {
    
         //认证信息每一个必须保持一致  
        auth_type PASS   //认证类型
        auth_pass 1234   //密码字串
    }
    virtual_ipaddress {
    
    
        192.168.211.20   //漂移地址
    }
}

开启服务

systemctl start keepalived  

ip addr //查看vip
在这里插入图片描述

在备用调度器上配置keeppailved

(配置基本一样)

也要配置lvs DR模式策略

调整/proc 响应参数

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

sysctl -p  //刷新一下

配置负载均衡分配策略

modprobe ip_vs //加载模块

ipvsadm -A -t 192.168.211.20:80 -s rr  //生成虚拟服务器

编写策略

ipvsadm -a -t 192.168.211.20:80 -r 192.168.211.10 -g -w 1
ipvsadm -a -t 192.168.211.20:80 -r 192.168.211.11 -g -w 1

保存策略

ipvsadm-save > /etc/sysconfig/ipvsadm

systemctl restart ipvsadm  //重启ipvsadm

安装keepalived

下载包

wget http://www.keepalived.org/software/keepalived-1.4.5.tar.gz

解压包

tar -zxf keepalived-1.4.5.tar.gz

配置,编译,安装

./configure && make && make install

mkdir -p /etc/keepalived/

vim /etc/keepalived/keepalived.conf
global_defs {
    
    
pancheng_2 // 名称
}

vrrp_instance VI_1 {
    
     // 定义vrrp 热备实例
state BACKUP //热备份状态,MASTER 表示主服务器,BACKUP 表示备份服务器
interface ens33 //承载vip地址的物理接口
virtual_router_id 1 //虚拟路由的ID号,每一个必须一致
priority 99 //优先级 ,越大越优先
advert_int 1 // 通告间隔秒数(心跳频率)
authentication {
    
     //认证信息每一个必须保持一致
auth_type PASS //认证类型
auth_pass 1234 //密码字串
}
virtual_ipaddress {
    
    
192.168.211.20 //漂移地址
}
}

开启服务

systemctl start keepalived

ip addr //查看vip(因为此时主服务器仍然在线,VIP地址任然由主服务器控制,其他都处于备用状态,所以备份服务器中将不会添加vip地址到ens33物理接口上

在这里插入图片描述

测试:

先测试是否可以访问

可以访问后;在测试ens33关闭

在这里插入图片描述

发现备用调度器已经自动生成成vip了

在这里插入图片描述

浏览器测试

先开启ens33

输入vip地址访问

在这里插入图片描述

ipvsadm -ln //查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5iLx7rX-1617525991781)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210403150838911.png)]

有变化

备用调度器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G2crpXQW-1617525991783)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210403150928031.png)]

没变化

关闭主调度器ens33

浏览器(清缓存)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Br4jL0ie-1617525991785)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210403151114944.png)]

会卡一下

ipvsadm -ln

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-viuUu2wx-1617525991786)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210403151310715.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQodxfCw-1617525991790)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210403151337253.png)]

最后在开启ens33

浏览器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-riMOxqJ2-1617525991792)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210403151617872.png)]

ipvsadm -ln

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qg1ibe3p-1617525991794)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210403151551363.png)]

又有变化了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w4r4heyH-1617525991796)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210403151656486.png)]

ok

以上完成才往下做

搭建高可用群集

主调度器

vim /etc/keepalived/keepalived.conf 

​      ................

virtual_server 192.168.211.20 80 {
    
        //虚拟IP地址(vip),端口
    delay_loop 6    // 健康检查的间隔时间
    lb_algo rr  // 轮询(rr)调度算法
    lb_kind DR  //采用的什么群集工作模式 (NAT,DR)
    !persistence_timeout 50  //连接保持时间(秒) 若启用请去掉!号
    protocol TCP  //应用服务采用的TCP协议

    real_server 192.168.211.10 80 {
    
     //第一个wed服务器节点的ip地址,端口
        weight 1 //权重
           TCP_CHECK {
    
      //健康检查方式
            connect_port 80  //检查的端口目标
            connect_timeout 3  //连接超时(秒)
            retry 3  //重试次数
            delay_before_retry 3  //重试间隔
       }
    }
    real_server 192.168.211.11 80 {
    
    
        weight 1
           TCP_CHECK {
    
    
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
       }
    }
}

备份调度器

(配置一样)

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

    real_server 192.168.211.10 80 {
    
    
        weight 1
           TCP_CHECK {
    
    
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
       }
    }
    real_server 192.168.211.11 80 {
    
    
        weight 1
           TCP_CHECK {
    
    
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
       }
    }
}

重启测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDqguKD8-1617525991800)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210404013936719.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QequYynG-1617525991801)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210404013948628.png)]

ipvsadm -lnc

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z3fAVnTR-1617525991803)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210404014040620.png)]

关闭后ens33

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UbHrQMnx-1617525991819)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210404014142799.png)]

只要有两台真正服务器就可以制作负载均衡

ok
尚在学习有错误请指出!!!!!谢谢。

猜你喜欢

转载自blog.csdn.net/weixin_52184735/article/details/115430364
今日推荐