一、keepalived工作原理

keepalive高可用对之间是通过VRRP通信的。

1、VRRP,全称Virutal  Router  Redundancy Protocol(虚拟路由冗余协议),VRRP的出现是为了解决静态路由的单点故障。

2、VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的。

3、VRRP使用IP多播(Multicast)方式实现高可用之间的通信,默认多播地址为:224.0.0.18。

4、工作时主节点发包,备节点接包。当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选。

5、VRRP使用了加密协议加密数据,但keepalive官方目前还是推荐使用明文的方式配置认证类型和密码。

二、keepalived服务工作原理

keepalived高可用对之间通过VRRP进行通信,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此在工作时会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

在keepalive服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒。

blob.png

实验环境:

A机:ip 192.168.10.201 RHEL 7.0

B机:ip 192.168.10.202 RHEL 7.3

C机:ip 192.168.10.203 RHEL 7.3–Real Server 1

D机:ip 192.168.10.204 CentOS 6.8–Real Server 2

VIP:192.168.10.188

一、A、B机配置:

1、安装keepalived、ipvsadm

#yum install keepalived ipvsadm -y

2、配置keepalived:B机和A机的配置大体相同,注意下面配置文件中的红色字体。以下的配置为A机的配置。

2.1 vim  /etc/keepalived/keepalived.conf

global_defs {

   notification_email {

       root@localhost

   }

   notification_email_from kaadmin@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_mcast_group4 224.0.1.118

}

vrrp_script chk_mt {

   script "/etc/keepalived/hlcheck.sh"

   interval 1

   weight -2

}

vrrp_instance VI_1 {

    state MASTER   #主LVS为MASTER,备用为:BACKUP

    interface eno16777736 #备用的是RHEL7.3系统,要改为ens33

    virtual_router_id 51

    priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 6ae2fa680744 #可使用 openssl rand -hex 6产生

    }

    virtual_ipaddress {

        192.168.10.188/16 dev eno16777736 label eno16777736:1 #指定虚拟IP地址,7.3系统网卡为ens33

    }

    track_script {

       chk_mt

    }

   notify_master "/etc/keepalived/notify.sh master"

   notify_backup "/etc/keepalived/notify.sh backup"

   notify_fault "/etc/keepalived/notify.sh fault"

}

virtual_server 192.168.10.188 80 {

    delay_loop 6 # 设置健康检查时间,单位是秒

    lb_algo wrr #LVS调度算法有rr、wrr、sh、dh、lc、wjc、sed等

    lb_kind DR #使用DR(直接路由),还有NAT、TUN等模式

    nat_mask 255.255.0.0

    protocol TCP

    sorry_server 127.0.0.1 80

    real_server 192.168.10.203 80 {

        weight 1 # 配置节点权值,数字越大权重越高

        HTTP_GET {

            url {

              path /

              status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server 192.168.10.204 80 {

        weight 2

        HTTP_GET {

            url {

              path /

              status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

2.2 vim  /etc/keepalived/notify.sh

vip=192.168.10.188

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

#    /etc/rc.d/init.d/haproxy start

    exit 0

    ;;

 backup)

   notify backup

   exit 0

   ;;

 fault)

  notify fault

  exit 0

  ;;

 *)

  echo 'Usage:`basename $0` {master|backup|fault}'

  exit 1

  ;;

esac

2.3 vim  /etc/keepalived/hlcheck.sh

#!/bin/bash

[[ -f /etc/keepalived/down ]] && exit 1 || exit 0

chmod +x /etc/keepalived/hlcheck.sh


B机的配置跟A机大体相同,注意修改上面的文件的红色字体部分即可。

二、配置RS1(Real Server 1)和RS2(Real Server 2)

RS1、RS2配置:

1、配置脚本: # vim /root/set.sh

#!/bin/bash

SNS_VIP=192.168.10.188

case $1 in

start)

        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

        /sbin/route add -host $SNS_VIP dev lo:0

   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

        echo "RealServer Start OK…"

;;

stop)

        ifconfig lo:0 down

        route del $SNS_VIP >/dev/null 2>&1

   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

        echo "RealServer Stop…"

;;

esac

2、运行配置脚本:

[root@node3 ~]# bash  set.sh start

blob.png

3、配置脚本复制到/etc/init.d设置开机启动执行脚本

[root@node3 ~]# cp set.sh /etc/init.d

# echo "/etc/init.d/set.sh start" >> /etc/rc.local

#chmod +x /etc/rc.d/rc.local

4、安装httpd

yum install httpd -y

5、配置httpd测试页:

vim  /var/www/html/index.html

RS1测试页的内容为:RS1 ==> RHEL 7.3 192.168.10.203

RS2测试页的内容为:RS2 ==> CentOS 6.8 192.168.10.204

5、RS1、RS2启动httpd服务

RS1:systemctl start httpd

RS2:service httpd start

三、A机、B机启动keepalived服务

systemctl start keepalved

为了方便测试,A、B、C、D四台机都清空防火墙或关闭防火墙

blob.png

浏览器打开:192.168.10.188

blob.png

OK测试正常。。。

 

分类: Linux服务

发表评论

电子邮件地址不会被公开。 必填项已用*标注