Keepalive 之 高可用实现

1  概述



本文将介绍三个Keepalive高可用的实现案例,分别是keepalive实现LVS高可用,keepalive通过fwmark实现LVS高可用,keepalive实现Nginx高可用。



2  实验准备



.(1) 各节点时间必须同步,这个操作很关键。工具有ntp  和chrony(CentOS7上开始启用)

.(2) 确保iptables及selinux不会成为阻碍。7上要停止firewalld服务和iptables

.(3) 各节点之间可通过主机名互相通信(对KA并非必须),建议使用/etc/hosts文件实现

172.18.50.63和73 上配置

echo"172.18.50.63  node1 ">>/etc/hosts

echo"172.18.50.73 node2">>/etc/hosts

.(4) 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA并非必须,但是建议配置)

两台都要设置

172.18.50.63上配置

ssh-keygen

ssh-copy-id -i /root/.ssh/id_rsa.pub 172.18.50.73

172.18.50.73上配置

ssh-keygen

ssh-copy-id -i /root/.ssh/id_rsa.pub 172.18.50.63

(5)多播地址

建议更改默认的多播地址,防止冲突,可以在配置文件里的全局加入选项vrrp_mcast_group4224.100.50.100。将组播地址调整为224.100.50.100。

网卡需要支持多播模式,默认网卡都开启多播功能,可以使用如下的命令关闭多播地址(不能关闭该功能,仅当学习):

ip link set dev eth1 multicast off.

(6)测试

通过抓包查看

tcpdump -i eth1 -nn host 组播ip,如下

tcpdump -i eth1 -nn host 224.50.50.50

注意,如果对应的主服务器的keepalived服务被停了,就会发一条优先级为0的状态。查看vip地址用ip a命令查看对应主机是否将VIP加入到网卡里



3 配置介绍



.虚拟服务器:

.配置参数:

有两个配置的方法

virtual_server  IP port 定义vip和端口,实现对该vip的统一调度

virtual_server  fwmark int:指在keepalive的机器上的防火墙mangle表打标签。同一标签的主机实现同一的调度。如对外同一服务有两个ip,vip1 和vip2,后端有4台RS,vip1和vip2在mangle表上打同一标签,后台的4台RS都配置这两个vip,那么keepalive服务器就可以实现访问这两个vip时,实现对这四台RS的统一调度

virtual_server  IP port | virtual_server  fwmark int
{
    ...
    real_server{
    ...
    }
    ...
}

常用参数

.delay_loop  <INT>:服务轮询的时间间隔
.lb_algo  rr|wrr|lc|wlc|lblc|sh|dh:定义调度方法
.lb_kind  NAT|DR|TUN:集群的类型
.persistence_timeout  <INT>:持久连接时长
.protocol TCP:服务协议,仅支持TCP
.sorry_server  <IPADDR>   <PORT>:所有RS故障时,备用服务器地址
#以下配置,有几台RS就要重复配置几遍
.real_server<IPADDR><PORT>
{
weight   <INT> RS权重
notify_up  <STRING>|<QUOTED-STRING> RS上线通知脚本
notify_down  <STRING>|<QUOTED-STRING> RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK   { ...}:定义当前主机的健康状态检测方法
}

KeepAlived配置检测

.HTTP_GET|SSL_GET:应用层检测
HTTP_GET|SSL_GET {
url{
path  <URL_PATH>:定义要监控的URL
status_code  <INT>:判断上述检测机制为健康状态的响应码
digest  <STRING>:判断为健康状态的响应的内容的校验码
}
connect_timeout  <INTEGER>:连接请求的超时时长
nb_get_retry  <INT>:重试次数
delay_before_retry  <INT>:重试之前的延迟时长
connect_ip   <IPADDRESS>:向当前RS哪个IP地址发起健康状态检测请求,分流,定义用来监控的网卡和提供服务的网卡不一样
connect_port  <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto   <IP ADDRESS>:发出健康状态检测请求时使用的源地址
bind_port  <PORT>:发出健康状态检测请求时使用的源端口
}
 
.TCP_CHECK {
connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto  <IP ADDRESS>:发出健康状态检测请求时使用的源地址
bind_port <PORT>:发出健康状态检测请求时使用的源端口
connect_timeout <INTEGER>:连接请求的超时时长
}



4  案例实现



所有实验会用到通知脚本和RS配置脚本,所以,将这两个脚本单独放置

4.1示例通知脚本

这里例子是发邮件的脚本,实际情况当角色发生变化的时候,需要服务器执行什么操作可以直接写入脚本里,而不仅仅是发邮件通知,从而实现其他应用的高可用。

#!/bin/bash
#
contact=‘[email protected]‘
notify() {
mailsubject="$(hostname) to be $1, vip
floating"
mailbody="$(date +‘%F %T‘): vrrp transition,
$(hostname) changed to be $1"
echo "$mailbody" | mail -s
"$mailsubject" $contact
}
case  $1  in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0)
{master|backup|fault}"
exit 1
;;
esac

.脚本的调用方法:

直接写入配置文件VRRPD配置段里

notify_master  "/etc/keepalived/notify.sh master"
notify_backup  "/etc/keepalived/notify.sh backup"
notify_fault   "/etc/keepalived/notify.sh fault"

重启服务,用mail查看

4.2 RS配置

#!/bin/bash
#
#******************************************************************************
#Author:                 Sunny
#Date:                 2017-10-24
#FileName:                  lvs_dr_rs.sh
#version:                 1.0
#Your change info:      
#Description:                   For auto set RS_dr
#DOC URL:               http://ghbsunny.blog.51cto.com/7759574/1975813 
#Copyright(C):                2017  All rights reserved
#*****************************************************************************
vip=172.18.50.80
mask=‘255.255.255.255‘
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
service httpd start &> /dev/null && echo "The httpd Server is Ready!"
echo "<h1>`hostname`</h1>" > /var/www/html/index.html

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
    ifconfig $dev $vip netmask $mask broadcast $vip up
    echo "The RS Server is Ready!"
    ;;  
stop)
    ifconfig $dev down
    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 "The RS Server is Canceled!"
    ;;  
*) 
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;  
esac

4.3  keepalive实现LVS高可用

实现效果是当有请求过来时,根据轮询规则调度到后端RS,同时实现了对RS的健康性检查,同时实现VS的高可用

拓扑图如下

4.3.1 HA1 配置如下

! Configuration File for keepalived

global_defs {
   notification_email {
   		[email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.50.50.50
}

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass sunny
    }
    virtual_ipaddress {
		172.18.50.80
    }
	notify_master "/etc/keepalived/vip1_notify.sh master"
    notify_backup "/etc/keepalived/vip1_notify.sh backup"
    notify_fault  "/etc/keepalived/vip1_notify.sh fault"
 virtual_server 172.18.50.80 80 {
 delay_loop 3
 lb_algo wrr 
 lb_kind DR
 protocol TCP 
 sorry_server 127.0.0.1 80
    real_server 172.18.50.65 80 {
    weight 2
    HTTP_GET {
        url {
        path /
        status_code 200 
        }   
    connect_timeout 1
    nb_get_retry 2
    delay_before_retry 1
    }   
    }   
    real_server 172.18.50.75 80 {
    weight 1
    HTTP_GET {
        url {
        path /
        status_code 200 
        }   
    connet_timeout 1
    nb_get_retry 2
    delay_before_retry 1
        }   
    }   
 }
}

HA2只需调整优先级,stats 为BACKUP,网卡等相关信息,其他不变,RS配置参考3.2,注意VIP使用32位,防止路由问题,导致调度不通,然后测试

4.4  keepalive通过fwmark实现LVS高可用

基于fwmark双主模式的lvs集群,基于fwmark,实现双主高可用的前提下,根据防火墙prerouting链上的mark会将所有的请求均匀调度。

4.4.1 打标签

在两台63和73上keepalive机器上防火墙的mangle表打标签,命令如下

iptables -t mangle -A PREROUTING -d172.18.50.80,172.18.50.90 -p tcp --dport 80 -j MARK --set-mark 6

4.4.2 HA1 上配置

! Configuration File for keepalived

global_defs {
   notification_email {
   		[email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.50.50.50
}

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass sunny
    }
    virtual_ipaddress {
		172.18.50.80
    }
	notify_master "/etc/keepalived/vip1_notify.sh master"
    notify_backup "/etc/keepalived/vip1_notify.sh backup"
    notify_fault  "/etc/keepalived/vip1_notify.sh fault"
}

 virtual_server fwmark 6 {
 delay_loop 3
 lb_algo wrr 
 lb_kind DR
 protocol TCP 
 sorry_server 127.0.0.1 80
    real_server 172.18.50.65 80 {
    weight 1
    HTTP_GET {
        url {
        path /
        status_code 200 
        }   
    connect_timeout 1
    nb_get_retry 2
    delay_before_retry 1
    }   
    }   
    real_server 172.18.50.75 80 {
    weight 1
    HTTP_GET {
        url {
        path /
        status_code 200 
        }   
    connet_timeout 1
    nb_get_retry 2
    delay_before_retry 1
        }   
	}  
}

4.4.3 配置RS1和RS2,参考3.2,然后进行测试

4.5  keepalive实现Nginx高可用

.keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整

.vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外

.track_script:调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script

.分两步:(1)先定义一个脚本;(2) 调用此脚本。

vrrp_script  <SCRIPT_NAME> {
script " " #这里写脚本的真实路径,也可以是bash命令
interval INT  #多久执行一次脚本
weight  -INT #当主服务异常,把之前定义的vrrp权重减掉多少,减少得比backup的值还低,这样就可以实现对别得应用的高可用性的支持
}
track_script {
#以下是调用脚本,这里相当于是虚拟路由器的代码段
SCRIPT_NAME_1
SCRIPT_NAME_2
}

示例:高可用nginx服务

两台nginx服务器上分别安装keepalive,通过脚本检查keepalive 和 nginx是否存在,实现高可用。

一般只有一台keepalive的级别高,所以该机器的nginx起作用,负责调度,当nginx异常,权重减去20后,备用的keepalive起作用,备用机器删的nginx接管工作。后端的RS是定义在nginx的http配置段里

chk_down 的函数作用是检查/etc/keepalived/down文件存在时,就返回1,就将keepalive权重减去20。vip将配置到另一台主机,使得备用主机生效。当/etc/keepalived/down删掉后,该主机的优先级就会自动加上20.重新抢占vip。

chk_nginx 的函数作用是检查nginx是否正常运行,当nginx异常时,就将keepalive优先级减去20。vip将配置到另一台主机,使得另一台的keepalive生效当nginx重新工作后,该主机的优先级就会自动加上20.重新抢占vip。

4.5.1 HA1配置如下

! Configuration File for keepalived

global_defs {
   notification_email {
   		[email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.50.50.50
}

vrrp_script  chk_down {
script "[[ -f   /etc/keepalived/down ]] && exit 1 || exit 0"
interval  1
weight  -20 
 }

vrrp_script  chk_nginx {
script "killall -0 nginx && exit 0 || exit 1"
interval 1
weight  -20
fall 2 
rise 1 
}

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass sunny
    }
    virtual_ipaddress {
		172.18.50.80
    }
	notify_master "/etc/keepalived/vip1_notify.sh master"
    notify_backup "/etc/keepalived/vip1_notify.sh backup"
    notify_fault  "/etc/keepalived/vip1_notify.sh fault"

	track_script {
	 chk_down
	 chk_nginx
	   }

}

4.5.2 nginx 配置如下

    http{
        ......
          upstream websrvs {
        server 172.18.50.75:80 weight=1;
        server 172.18.50.65:80 weight=2;
        server 127.0.0.1:8000 backup;
            }   
        ......
    }   

    server {
        .....
            location / { 
        proxy_pass http://websrvs;
            }   
        ......
    }

4.5.3 测试

创建/etc/keeplived/down文件以及关闭keepalive查看实验

时间: 2024-10-09 02:48:51

Keepalive 之 高可用实现的相关文章

keepalive && Nginx 高可用配置

keepalived是一个用于做双机热备(HA)的软件,常和haproxy联合起来做热备+负载均衡,达到高可用. 运行原理 keepalived通过选举(看服务器设置的权重)挑选出一台热备服务器做MASTER机器,MASTER机器会被分配到一个指定的虚拟ip,外部程序可通过该ip访问这台服务器,如果这台服务器出现故障(断网,重启,或者本机器上的keepalived crash等),keepalived会从其他的备份机器上重选(还是看服务器设置的权重)一台机器做MASTER并分配同样的虚拟IP,充

通过haproxy + keepalive 实现高可用负载均衡

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HAProxy相比LVS的使用要简单很多,功能方面也很丰富.当 前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器.内部协议通信服务器等),和7层(HTTP).在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量.7层模式下,HAProxy会分析协议,

keepalive构建高可用LVS集群

一.什么是keepalived? 利用虚拟路由冗余协议(vrrp)技术,实现lvs的高可用,也可以对nginx和haproxy等轻量级带有负载均衡的软件进行高可用.因为keepalived非常轻量级,速度非常快,配置简单,所以受到众多企业运维人员青睐. 参考资料:http://outofmemory.cn/wiki/keepalived-configuration 二.虚拟路由备份协议 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协

nginx+keepalive实现高可用负载均衡

一:实验环境 主nginx负载均衡器:192.168.10.63 (通过keepalived配置了VIP:192.168.10.188供外使用)副nginx负载均衡器:192.168.10.200(通过keepalived配置了VIP:192.168.10.188供外使用)拓扑图:二:安装nginx和keepalived(用yum安装,在此处不编译安装了,用阿里云的yum仓库)yum install nginx -yyum install keepalived -y 三:配置nginx服务器:m

nginx+keepalive 实现高可用负载均衡方案

转:http://ju.outofmemory.cn/entry/52165 主nginx负载均衡器:172.26.11.99  (通过keepalived配置了VIP:172.26.11.101供外使用)副nginx负载均衡器:172.26.11.100 (通过keepalived配置了VIP:172.26.11.101供外使用) 后端web服务器:172.26.11.73172.26.11.74 一.172.26.11.99 以及 172.26.11.100的关键nginx配置如下:vim

客户需求:nginx + keepalive 实现高可用 +后端的负载均衡

突然接到客户需求,需要使用nginx + keepalive 实现HA + LB,下面是主要的配置内容: 软件包直接从官网获取 操作系统环境:RHEL 6.8 X86_64 版本号:nginx-自定 keepalived-1.2.13-5.el6_6.x86_64.rpm IP地址分配:VIP: 192.168.56.10/24 RIP: 192.168.56.11/24  192.168.56.12/24 安装软件 yum -y install nginx keepalived #将nginx

用lvs+keepalive构建高可用的后端nginx+tomcat

nginx和tomcat实现动静分离,加快访问网站的速度. 工作流程就是     lvs---->keepalive---->nginx负载均衡---->tomcat 准备四台服务器: 1.   web1 :192.168.4.10 2.   web2 :192.168.4.11 3.   keep_master :192.168.4.20 4.   kepp_slave :192.168.4.21 web1和web2上: (web2一样) nginx安装过程省略... 1.  配置ng

L10.1 LVS:keepalive实现ipvs高可用

使用LVS DR模式进行负载均衡,keepalive做高可用. 步骤: 1,配置RS. 2,ipvsadm配置node1,node2 为DR,测试分别做为DR是成功的. 3,配置keepalived实现ipvsadm的功能. 4, 测试. 实验拓扑: 1,配置RS node3,node4,为RS node3,node4执行脚本 vim lvs_dr_rs.sh #!/bin/bash # vip="192.168.0.50" interface="lo:0" cas

keepalived实现LVS集群的高可用(1)

HA集群:高可用集群: 实现方式:vrrp协议和ais完备HA集群 vrrp可以由keepalived实现 ais可以由heartbeat和corosync vrrp协议:虚拟冗余路由协议 VRRP为虚拟路由冗余协议,目的就是为了解决静态路由单点故障问题.在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MAS