前言

 此前实现的LVS-DR集群都有一个人很大的问题,Director是一个单点故障,一旦出现故障,对外服务将不可用。Keepalived就很好的解决了这一问题,实现VIP自动流动,一定程度上实现了负载均衡的效果(DNS解析负载均衡)。

环境:

  • OS:CentOS 7
  • LVS:DR模型,两台
  • Real Server:两台

一、配置两台LVS调度服务器

(1). 地址配置
LVS-1:

    HOSTNAME:node1
    DIP:172.16.20.10
    #配置过程不用多说

LVS-2:

    HOSTNAME:node2
    DIP:172.16.20.20

如下图:

(2). 配置keepalived
第一步需要安装以下软件:

yum install keepalived ipvsadm -y

 这两个包是必须的,一个提供高可用服务,一个提供集群服务;

lvs-1的keepalived配置
配置文件修改:

! Configuration File for keepalived
global_defs {
   notification_email {
        root@localhost
        #提示邮件发给谁
   }
   notification_email_from kpadmin@localhost #邮件发送者
   smtp_server 127.0.0.1
   #邮件服务地址
   smtp_connect_timeout 30
   router_id node1
   #和刚刚设置的主机名一致(建议一致),唯一标识
   vrrp_skip_check_adv_addr
   #vrrp_strict
   #此项一定要注释,否则vip不通
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script chk_mt {
        script "/etc/keepalived/down.sh"
        interval 1
        weight -2
}   #手动下线脚本,后面会贴出
vrrp_instance VI_1 {
    #定义vrrp实例,名称为VI_1
    state MASTER
    #定义为主服务
    interface ens33
    #物理网卡接口
    virtual_router_id 51
    #虚拟路由id
    priority 100
    #优先级
    advert_int 1
    #心跳时间
    authentication {
        auth_type PASS
        #认证机制,普通字符认证
        auth_pass 32acb08d
        #pass
    }
    track_script {
        chk_mt
    }   #调用手动下线脚本
    virtual_ipaddress {
        172.16.123.123/32 dev ens33 label ens33:0
        #定义VIP地址以及绑定的接口
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
    #当状态变更时,发送邮件的脚本,后文会给出
}

virtual_server 172.16.123.123 80 {
    #定义虚拟主机/Director(IP PORT)
    delay_loop 6
    #如果六次检测失败,就定义为失效Real
    lb_algo wrr
    #调度算法
    lb_kind DR
    #类型,DR类型
    #persistence_timeout 50
    #持久连接,测试的时候暂时关闭
    protocol TCP
    #使用TCP协议
    sorry_server 127.0.0.1 80
    #定义sorry_server(IP PORT)

    real_server 172.16.10.10 80 {
        #定义real server(IP PORT)
        weight 1
        #定义权重
        HTTP_GET {
        #健康检测机制,HTTP_GET
        url {
              path /
             #digest ff20ad2481f97b1754ef3e12ecd3a9cc
              status_code 200
                #健康检测,检测为跟,状态码为200即为正常
            }
            connect_timeout 3
            #检测超时时长
            nb_get_retry 3
            #检测等待时长
            delay_before_retry 3
        }
    }
    real_server 172.16.10.20 80 {
        #定义第二个Real Server
        weight 2
        HTTP_GET {
            url {
              path /
             #digest ff20ad2481f97b1754ef3e12ecd3a9cc
              status_code 200
                #健康检测,只看状态
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

lvs-2的keepalived配置
lvs-1的配置文件拷贝到lvs-2上,修改以下配置:

router_id node1 -->     router_id node2 #改为lvs-2的主机名
state MASTER    -->     state BACKUP  #改为备用主机
priority 100    -->     priority 99   #降低优先级

配置文件中的脚本
down.sh: 手动下线脚本

#!/bin/bash
#

if [ -f /etc/keepalived/down ];then
    exit 1
else
    exit 0
fi

notify.sh: 邮件通知脚本

#!/bin/bash
#

vip=172.16.100.1
contact='root@localhost'
#定义收件人
notify(){
        mailsubject="`hostname` to be $1:$vip floating"
        #主题
        mailbody="`date '+%F %H:%M:%S'`:vrrp transition,`hostname` changed to be $1"
        #主体
        echo ${mailbody} | mail -s "$mailsubject" $contact
}


case "$1" in
        master)
                notify master
                exit 0
        ;;
        backup)
                notify backup
                exit 0
        ;;
        fault)
                notify fault
                exit 0
        ;;
        *)
                echo "Usage:`basename $0` {master|backup|fault}"
                exit 1
        ;;
esac

(3). 启动服务

systemctl start keepalived
systemctl enable keepalived

启动服务,开机自动启动服务

二、配置两台Real Server

(1). 地址配置

Real-1:172.16.10.10
Real-2:172.16.10.20

(2). 启动httpd

systemctl start httpd 

(3). 编辑文档首页
内容分别如下:

real-1:Httpd Server-1
real-2:Httpd Server-2

(4). 配置vip

#!/bin/bash
#
VIP=172.16.123.123

case $1 in
    start)
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        ip addr add ${VIP}/32 dev lo:0
    ;;
    stop)
        ip addr del ${VIP}/32 dev lo:0
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ;;
esac

再两台Real Server分别运行此脚本

~]# script_name start


两台Real Server的地址详情

三、进行测试

测试主机:CentOS6
~]# for i in {1..30};do curl http://172.16.123.123;do
正常结果是这样的

可以停掉主的keepalived服务,检测是否生效


END

Hello World

最后修改:2019 年 10 月 15 日 06 : 00 PM
如果觉得我的文章对你有用,请随意赞赏