LVS-DR+keepalived高可用群集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS-DR+keepalived高可用群集相关的知识,希望对你有一定的参考价值。

LVS-DR+keepalived高可用群集

  • LVS负载均衡采用直连路由工作模式(LVS-DR),采用半开放的网络结构,结构与IP隧道模式类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络,负载调节器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。

  • Keepalived采用VRRP热备份协议,以软件的方式实现服务机的多机热备功能。其主要用来提供故障切换和健康检查功能——判断LVS负载调度器、节点服务器的可能性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。

LVS-DR+keepalived结构拓补图

技术分享图片

实验环境

主机 操作系统 IP 软件
LVS主调度器 CentOS-7.3x86_64 192.168.100.101 keepalived、ipvsadm
LVS从调度器 CentOS-7.3x86_64 192.168.100.102 keepalived、ipvsadm
web1服务器 CentOS-7.3x86_64 192.168.100.103 httpd
web2服务器 CentOS-7.3x86_64 192.168.100.104 httpd
  • 注:VIP为192.168.100.50

LVS调度服务器设置

  • 主从调度服务器设置基本相同,不同之处将会注明;

开启路由转发功能,关闭proc响应重定向功能;

vi /etc/sysctl.conf

net.ipv4.ip_forward=1   //开启路由转发功能
net.ipv4.conf.all.send_redirects = 0        
net.ipv4.conf.default.send_redirects = 0    
net.ipv4.conf.eth0.send_redirects = 0       
//关闭proc响应重定向功能

sysctl -p //立即生效

设置虚拟网卡,并启动虚拟网卡;

cd /etc/sysconfig/network-scripts

cp ifcfg-ens33 ifcfg-ens33:0

vim ifcfg-ens33:0

DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.255     //注意:子网掩码必须全为1

ifup ens33:0

配置负载分配策略(编写脚本方便管理);

cd /etc/init.d

vim dr.sh //脚本名

#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.50
RIP1=192.168.100.103
RIP2=192.168.100.104
case "$1" in
start)
        /sbin/service ipvsadm start
        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev ens33:0
        /sbin/ipvsadm -A -t $VIP:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
        echo "ipvsadm starting --------------------[ok]"
        ;;
        stop)
        /sbin/ipvsadm -C
    /sbin/service ipvsadm stop
        ifconfig ens33:0 down
        route del $VIP
        echo "ipvsamd stoped----------------------[ok]"
         ;;
        status)
        if [ ! -e /var/lock/subsys/ipvsadm ];then
        echo "ipvsadm stoped---------------"
        exit 1
                else
                echo "ipvsamd Runing ---------[ok]"
        fi
        ;;
        *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        esac
        exit 0

chmod +x dr.sh //提权

service dr.sh start //开启服务

配置keepalived(编写脚本方便管理);

yum install keepalived -y

vi /etc/keepalived/keepalived.conf

global_defs {
  notification_email {
     [email protected]
   }
   notification_email_from benet [email protected]
   smtp_server 127.0.0.1        //指定本地
   smtp_connect_timeout 30
   router_id LVS_01             //指定名称,备份服务名称不同
}

vrrp_instance VI_1 {
    state MASTER                //备份服务器为BACKUP
    interface ens33             //接口为ens33      
    virtual_router_id 10        //组号;备份服务器相同
    priority 100                //优先级;备份服务器小于主服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        192.168.100.50          //指定VIP地址
    }
}

virtual_server 192.168.100.10 80 {
     delay_loop 6
     lb_algo rr
     lb_kind DR                 //指定工作模式
     persistence_timeout 60
     protocol TCP

    real_server 192.168.100.103 80 {    //web1服务器IP和端口
        weight 1                //权重
        TCP_CHECK {             //健康检查方式
         connect_port 80        //端口
             connect_timeout 3  //连接超时
             nb_get_retry 3     //重试次数
             delay_before_retry 3   //重试间隔时间(秒)
    }
}
    real_server 192.168.100.104 80 {    //web2服务器IP和端口
        weight 1
        TCP_CHECK {
         connect_port 80
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
     }
  }
}

systemctl start keepalived.service //启动服务

ip addr show dev ens33:0 //查看虚拟网卡

关闭防火墙和安全功能

systemctl stop firewalld.service

setenforce 0

web服务器配置

  • 两台web服务器配置相同,设置不同的测试首页作为区分。

安装http服务,启动http服务,关闭防火墙与安全功能;

yum install httpd -y

systemctl start httpd.service

systemctl stop firewalld.service

setenforce 0

创建http服务的测试首页,/var/www/html (两台web服务器测试首页内容不同);

echo "this is web1 test " > /var/www/html/index.html //web1服务器

echo "this is web2 test " > /var/www/html/index.html //web2服务器

配置虚拟IP地址(VIP):ifcfg-lo:0(若使用远程连接的虚拟机,切勿重启,否则会中断远程连接)

cd /etc/sysconfig/network-scripts

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.100.50
NETMASK=255.255.255.255
ONBOOT=yes

调整proc响应参数(使用脚本,脚本文件提权,启动脚本);

cd /etc/init.d/

vim web.sh //脚本名

#!/bin/bash
VIP=192.168.100.10
        case "$1" in
        start)
                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                /sbin/route add -host $VIP dev lo:0
                echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
                sysctl -p >/dev/null 2>&1
                echo "RealServer Start OK "
                ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                echo "RealServer Stopd"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0

chmod +x web.sh

service web.sh start

启动虚拟网卡;

ifup lo:0

在虚拟机中可输入 firefox "http://127.0.0.1/" & 命令使用火狐浏览器进入测试首页

service web.sh stop
service web.sh start //(建议重启服务)

技术分享图片技术分享图片

登录测试

-在客户机浏览器中输入VIP:192.168.100.50,即可将进入web服务器测试首页,多刷新几次,可进入连个不同的测试首页;技术分享图片技术分享图片

以上是关于LVS-DR+keepalived高可用群集的主要内容,如果未能解决你的问题,请参考以下文章

LVS-DR+keepalived高可用群集

Web服务器群集——LVS-DR+Keepalived高可用集群

LVS-DR与Keepalived高可用群集

[Linux]-构建LVS-DR模式+Keepalived高可用群集

部署LVS-DR + keepalived 高可用群集

基于LVS-DR群集模式+keepalived实现高可用