Keepalived完成站点高可用,达成站点高可用方案

商厦里面 OA 系统要做线上高可用,制止单点故障,所以布置利用2台虚构机通过
Keepalived 工具来落到实处 nginx 的高可用(High
Avaiability),达到一台nginx入口服务器宕机,另一台备机自动接管服务的职能。(nginx做反向代理,达成后端应用服务器的负载均衡)飞快搭建请直接跳至
首节。

目录

  1. 概述
  2. 规划与准备干活
  3. 安装、部署Nginx和Keepalived
  4. 高可用方案–主主配置
  5. 高可用方案–主从布局
  6. Keepalived配置选项表达

大纲
一、前言
二、Keepalived 详解
三、情况希图
四、LVS+Keepalived 达成高可用的前端负载均衡器

1. Keepalived介绍

Keepalived是三个依照V凯雷德RP协议来实现的劳动高可用方案,可以应用其来防止IP单点故障,类似的工具还应该有heartbeat、corosync、pacemaker。但是它一般不会单独现身,而是与别的负载均衡手艺(如lvs、haproxy、nginx)一齐干活来完毕集群的高可用。

1. 概述

一、前言
     
这篇小说是前几篇文章的下结论,大家先简单的下结论一下大家前边讲明的内容,前边我们讲授了,LVS(负载均衡器)、Heartbeat、Corosync、Pacemaker、Web高可用集群、MySQL高可用集群、D君越DB、iscsi、gfs2、cLVM等,独一未有批注的正是LVS可用,也正是前面叁个高可用,大家这一篇博文首要教学内容。在说那么些前边大家得和大家研讨贰个主题材料,也是广大博友问的标题。Heartbeat、Corosync、Keepalived那三个集群组件大家毕竟选哪个好,首先笔者想表明的是,Heartbeat、Corosync是属于同一系列,Keepalived与Heartbeat、Corosync,根本不是一律类型的。Keepalived使用的vrrp协议格局,设想路由冗余商谈(Virtual Router Redundancy
Protocol,简称V凯雷德RP);Heartbeat或Corosync是依靠主机或互连网服务的高可用形式;简单的讲正是,Keepalived的目标是人云亦云路由器的高可用,Heartbeat或Corosync的指标是达成Service的高可用。所以一般Keepalived是兑现前端高可用,常用的前端高可用的构成有,就是我们周围的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。而Heartbeat或Corosync是落到实处劳务的高可用,常见的结缘有Heartbeat
v3(Corosync)+Pacemaker+NFS+Httpd 完毕Web服务器的高可用、Heartbeat
v3(Corosync)+Pacemaker+NFS+MySQL
达成MySQL服务器的高可用。总计一下,Keepalived中贯彻轻量级的高可用,一般用来前端高可用,且无需分享存款和储蓄,一般常用于七个节点的高可用。而Heartbeat(或Corosync)一般用来服务的高可用,且须要分享存款和储蓄,一般用于多节点的高可用。那个主题素材大家作证白了,又有博友会问了,这heartbaet与corosync大家又应该选用哪位好哎,小编想说咱俩一般用corosync,因为corosync的运维机制更优越heartbeat,就连从heartbeat分离出来的pacemaker都说在事后的支出在那之中更赞成于corosync,所现在后corosync+pacemaker是最好组合。但说实话作者对此软件未有任何侧向性,所以自身把持有的集群软件都和豪门说了弹指间,笔者以为无论是怎么软件,只要它能存活下来都有它的特点和应用领域,唯有把特定的软件放在特定的职位技艺发挥最大的效果与利益,那首先我们得对那几个软件有全数领悟。学习一种软件的最佳措施,便是去查官方文书档案。好了说了那么多希望大家全体收获,下边大家的话一说keepalived。

1.1 VRRP协议

VRRP全称 Virtual Router Redundancy Protocol,即
设想路由冗余研讨。能够以为它是落到实处路由器高可用的容错协议,就要N台提供同样功用的路由器组成一个路由器组(Router
Group),那几个组里面有二个master和三个backup,但在外头看来就疑似一台同样,构成虚构路由器,具有贰个设想IP(vip,也正是路由器所在局域网内别的机器的默许路由),据有那么些IP的master实际担负ARP相应和转账IP数据包,组中的其他路由器作为备份的剧中人物处于待命状态。master会发组播音信,当backup在逾期时间内收不到vrrp包时就以为master宕掉了,那时就须要依据V路虎极光RP的事先级来推举二个backup当master,保障路由器的高可用。

在VTiggoRP和煦落到实处里,设想路由器使用 00-00-5E-00-01-XX
作为虚拟MAC地址,XX正是不今不古的 V陆风X8ID (Virtual Router
IDentifier),这几个地方同时唯有贰个物理路由器占用。在编造路由器里面包车型地铁物理路由器组里面通过多播IP地址
224.0.0.18 来定期发送文告音讯。每一个Router都有四个 1-255
之间的刚开始阶段等第,等第最高的(highest
priority)将造成主要调节(master)路由器。通过降落master的优先权能够让远在backup状态的路由器抢占(pro-empt)主路由器的景况,多少个backup优先级同样的IP地址异常的大者为master,接管虚构IP。

亚洲必赢app官方下载 1

1.1 Keepalived介绍

Keepalived是几个基于V锐界RP协议来贯彻的劳动高可用方案,能够行使其来制止IP单点故障,类似的工具还会有heartbeat、corosync、pacemaker。可是它一般不会单独出现,而是与其余负载均衡技能(如LVS、HAProxy、Nginx)一同坐班来达到集群的高可用。

VRRP(Virtual Router Redundancy
Protocol)
,即虚构路由冗余合计。能够感觉它是兑现路由器高可用的容错协议,将在多台提供平等效果的路由器组成一个路由器组(Router
Group),那一个组里面有三个master和五个backup,但在外场看来就像一台一样,构成设想路由器,具有一个虚拟IP(vip,也正是路由器所在局域网内别的机器的暗许路由),占领那几个IP的master实际负担ARP相应和中间转播IP数据包,组中的别样路由器作为备份的剧中人物处于待命状态。master会发组播消息,当backup在逾期时间内收不到vrrp包时就觉着master宕掉了,那时就供给遵照V凯雷德RP的早期级来推举多少个backup当master,保险途由器的高可用。

在V昂科威RP会谈落到实处里,虚构路由器使用 00-00-5E-00-01-XX
作为虚拟MAC地址,XX正是当世无双的 V中华VID (Virtual Router
IDentifier),这些地点同时唯有八个物理路由器占用。在设想路由器里面的物理路由器组里面通过多播IP地址
224.0.0.18 来定时发送公告音信。每一个Router都有三个 1-255
之间的优先品级,等级最高的(highest
priority)将成为主要调控(master)路由器。通过收缩master的优先权能够让处于backup状态的路由器抢占(pro-empt)主路由器的图景,多少个backup优先级一样的IP地址极大者为master,接管虚构IP。

亚洲必赢app官方下载 2

VRRP结构图

诚如Keepalived用于落到实处前端高可用,常用的前端高可用的结缘有,就是大家广阔的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。

连锁多元小说

与heartbeat/corosync等比较

看 http://www.linuxidc.com/Linux/2013-08/89227.htm

Heartbeat、Corosync、Keepalived那多个集群组件大家毕竟选哪个好,首先作者想表达的是,Heartbeat、Corosync是属于同一种类,Keepalived与Heartbeat、Corosync,根本不是一律类型的。Keepalived使用的vrrp协议格局,设想路由冗余商事(Virtual Router Redundancy
Protocol,简称V昂科威RP);Heartbeat或Corosync是依附主机或互连网服务的高可用格局;简单来讲正是,Keepalived的目标是模仿路由器的高可用,Heartbeat或Corosync的目的是兑现Service的高可用。

所以一般Keepalived是兑现前端高可用,常用的前端高可用的咬合有,就是大家普及的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。而Heartbeat或Corosync是落到实处劳务的高可用,常见的重组有Heartbeat
v3(Corosync)+Pacemaker+NFS+Httpd 完结Web服务器的高可用、Heartbeat
v3(Corosync)+Pacemaker+NFS+MySQL
完成MySQL服务器的高可用。总计一下,Keepalived中贯彻轻量级的高可用,一般用来前端高可用,且无需分享存款和储蓄,一般常用于几个节点的高可用。而Heartbeat(或Corosync)一般用来服务的高可用,且必要分享存款和储蓄,一般用来多节点的高可用。那么些难题我们证实白了。

又有博友会问了,那heartbaet与corosync大家又应该选拔哪个好啊,作者想说咱俩一般用corosync,因为corosync的运行机制更优越heartbeat,就连从heartbeat分离出来的pacemaker都说在其后的成本个中更侧向于corosync,所以今后corosync+pacemaker是最好结合。

1.2 Nginx + Keepalived

keepalived能够以为是V宝马X3RP协议在Linux上的兑现,首要有多少个模块,分别是core、check和vrrp。core模块为keepalived的为主,负担主进程的启航、维护以及全局配置文件的加载和深入分析。check肩负健检,包涵周围的各样检查方式。vrrp模块是来完毕V福特ExplorerRP协议的。本文基于如下的拓扑图:

亚洲必赢app官方下载 3

Nginx + Keepalived安排结构图

Corosync+Pacemaker+DRBD+MySQL 完成高可用(HA)的MySQL集群
http://www.linuxidc.com/Linux/2013-08/89036.htm

1.2 Keepalived + nginx

Keepalived完成站点高可用,达成站点高可用方案。keepalived能够感到是V逍客RP协议在Linux上的兑现,重要有几个模块,分别是core、check和vrrp。core模块为keepalived的着力,担负主进度的启航、维护以及全局配置文件的加载和深入分析。check肩负健检,富含广大的各个检查办法。vrrp模块是来贯彻VTiggoRP协议的。本文基于如下的拓扑图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+————-+
| uplink |
+————-+
|
+
MASTER keep|alived BACKUP
172.29.88.224 172.29.88.222 172.29.88.225
+————-+ +————-+ +————-+
| nginx01 |—-| virtualIP |—-| nginx02 |
+————-+ +————-+ +————-+
|
+——————+——————+
|||
+————-+ +————-+ +————-+
| web01 || web02 || web03 |
+————-+ +————-+ +————-+

2. 布署与打算专业

  1. 关闭SELinux

    为了保险Nginx和Keepalived之间的例行数据通讯,
    供给关闭Linux的SELinux。

      [root@localhost ~]# vi /etc/sysconfig/selinux 
      # This file controls the state of SELinux on the system.
      # SELINUX= can take one of these three values:
      #       enforcing - SELinux security policy is enforced.
      #       permissive - SELinux prints warnings instead of enforcing.
      #       disabled - SELinux is fully disabled.
      SELINUX=disabled
      # SELINUXTYPE= type of policy in use. Possible values are:
      #       targeted - Only targeted network daemons are protected.
      #       strict - Full SELinux protection.
      SELINUXTYPE=targeted
    
  2. 配置iptables

    布局iptables, 允许相应的端口通讯。

      [root@Docker-OA-98 ~]# vi /etc/sysconfig/iptables
     *filter
     :INPUT ACCEPT [0:0]
     :FORWARD ACCEPT [0:0]
     :OUTPUT ACCEPT [0:0]
     -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
     -A INPUT -p icmp -j ACCEPT
     -A INPUT -i lo -j ACCEPT
     -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
     -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
     -A INPUT -p tcp -m state --state NEW -m tcp --dport 89 -j ACCEPT
     -A INPUT -p tcp -m state --state NEW -m tcp --dport 9080 -j ACCEPT
     # 允许VRRP(虚拟路由冗余协议)通信
     -A INPUT -p vrrp -j ACCEPT
     # 允许Keepalived虚拟路由组播地址通信
     -A INPUT -d 224.0.0.18 -j ACCEPT
     -A INPUT -j REJECT --reject-with icmp-host-prohibited
     -A FORWARD -j REJECT --reject-with icmp-host-prohibited
     COMMIT
    
  3. 境况设计

序号 服务器名称 主机名 IP地址 操作系统 备注
1 VIP1(Keepalived) 192.168.1.100 虚拟节点
2 VIP2(Keepalived) 192.168.1.101 主主模式
3 Nginx 01 Nginx-A-98 192.168.1.98 CentOS LInux 7.3  
4 Nginx 02 Nginx-B-99 192.168.1.99 CentOS LInux 7.3  
5 Tomcat 01 Tomcat-Web-91 192.168.202.91 CentOS LInux 7.3  
6 Tomcat 02 Tomcat-Web-92 192.168.202.92 CentOS LInux 7.3  
7 Tomcat 03 Tomcat-Web-93 192.168.202.93 CentOS LInux 7.3  

Linux 高可用(HA)集群之DRBD详解
http://www.linuxidc.com/Linux/2013-08/89035.htm

2. keepalived实现nginx高可用

3. 安装、部署Nginx与Keepalived

Linux 高可用(HA)集群之Pacemaker详解
http://www.linuxidc.com/Linux/2013-08/89037.htm

2.1安装

小编的条件是CentOS 6.2
X86_64,直接通过yum格局安装最简便易行:

1
2
3
# yum install -y keepalived
# keepalived -v
Keepalived v1.2.13 (03/19,2015)

 

3.1 安装Nginx与Keepalived

分别在服务器Nginx 01和Nginx 02安装Nginx和Keepalived。

# 安装Nginx
[root@Docker-OA-98 ~]# yum -y install nginx

# 安装Keepalived
[root@Docker-OA-98 ~]# yum -y install keepalived

Linux 高可用(HA)集群之Corosync详解
亚洲必赢app官方下载,http://www.linuxidc.com/Linux/2013-08/88733.htm

2.2 nginx监察和控制脚本

该脚本检验ngnix的运作处境,并在nginx进程不设有的时候尝试重新启航ngnix,即便开发银行失利则甘休keepalived,策画让别的机器接管。

/etc/keepalived/check_nginx.sh

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
counter=$(ps -C nginx –no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/local/bin/nginx
sleep 2
counter=$(ps -C nginx –no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi

 

你也得以依照本身的事务必要,总括出在什么状态下关闭keepalived,如 curl
主页一而再2个3s未有响应则切换:
(谢谢网民对那些本子建议的几处语法错误,已考订)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# curl -IL http://localhost/member/login.htm
# curl –data "memberName=fengkan&password=22" http://localhost/member/login.htm
 
count=0
for (( k=0; k<2; k++ ))
do
check_code=$( curl –connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost/login.html -o /dev/null )
if [ "$check_code" != "200" ]; then
count=$(expr $count + 1)
sleep 3
continue
else
count=0
break
fi
done
if [ "$count" != "0" ]; then
# /etc/init.d/keepalived stop
exit 1
else
exit 0
fi

 

3.2 配置Nginx负载均衡

各自在服务器Nginx 01和Nginx02上配备Nginx的接纳负载均衡。

[root@Docker-OA-98 ~]# vi /etc/nginx/nginx.conf
upstream application01 {
  ip_hash;
  server 192.168.202.91:8080;
  server 192.168.202.92:8080;
  server 192.168.202.93:8080;
}

server {
    listen   80;
    listen   [::]:80;
    server_name  service.test01.com;
    #root         /usr/share/nginx/html;

    location / {
        proxy_pass  http://application01/;
        proxy_set_header  Host  $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  X-Real-IP     $remote_addr;

        access_log  /var/log/nginx/access.ecology.log  main;

        client_max_body_size 100m;
        client_body_buffer_size 1024k;

        proxy_connect_timeout 5000;
        proxy_read_timeout 5000;
        proxy_send_timeout 6000;
        proxy_buffer_size 1024k;
        proxy_buffers 4 512k;
        proxy_busy_buffers_size 1024k;
        proxy_temp_file_write_size 1024k;
    }

}

Heartbeat+MySQL+NFS 达成高可用(HA)的MySQL集群
http://www.linuxidc.com/Linux/2013-08/88663.htm

2.3 keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
! Configuration File for keepalived
global_defs {
notification_email {
zhouxiao@example.com
itsection@example.com
}
notification_email_from itsection@example.com
smtp_server mail.example.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
 
vrrp_script chk_nginx {
# script "killall -0 nginx"
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
fall 3
rise 2
}
 
vrrp_instance VI_1 {
state MASTER
interface eth0
mcast_src_ip 172.29.88.224
virtual_router_id 51
priority 101
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.29.88.222
}
track_script {
chk_nginx
}
}

在其他备机BACKUP上,只供给改换 state MASTER ->
state BACKUPpriority 101 ->
priority 100mcast_src_ip 172.29.88.224 ->
mcast_src_ip 172.29.88.225即可。

service keepalived restart

4. 高可用方案 — 主主格局

亚洲必赢app官方下载 4

主主情势

  • Nginx 01服务器Keepalived脚本配置

 [root@Nginx-A-98 src]# vim /etc/keepalived/keepalived.conf
  vrrp_script chk_nginx {
     script "/etc/keepalived/nginx_check.sh"    # 检测nginx状态的脚本路径
     interval 2                    # 检测时间间隔2s
     weight -20                    # 如果脚本的条件成立,权重-20
  }

  vrrp_instance VI_1 {            # VRRP实例名;多实例的情况下,名称必须不一致
      state MASTER                # 服务状态;MASTER(工作状态)BACKUP(备用状态)
      interface eth0              # VIP绑定网卡
      virtual_router_id 51        # 虚拟路由ID,主、备节点必须一致;多实例的情况下,ID必须不一致
      mcast_src_ip 192.168.1.98  # 本机IP
      nopreempt                   # 优先级高的设置,解决异常回复后再次抢占的问题
      priority 100                # 优先级;取值范围:0~254;MASTER > BACKUP
      advert_int 1                # 组播信息发送间隔,主、备节点必须一致,默认1s
      authentication {            # 验证信息;主、备节点必须一致
          auth_type PASS          # VRRP验证类型,PASS、AH两种
          auth_pass 1111          # VRRP验证密码,在同一个vrrp_instance下,主、从必须使用相同的密码才能正常通信
      }
       track_script {             # 将track_script块加入instance配置块
          chk_nginx               # 执行Nginx监控的服务
      }
      virtual_ipaddress {         # 虚拟IP池,主、备节点必须一致,可以定义多个VIP
          192.168.1.100            # 虚拟IP
      }
  }

 vrrp_instance VI_2 {
      state BACKUP
      interface eth0
      virtual_router_id 52
      mcast_src_ip 192.168.1.98
      priority 90
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      track_script {
          chk_nginx
      }
      virtual_ipaddress {
          192.168.1.101
      }
}
  • Nginx 02服务器Keepalived配置

[root@Nginx-B-99 src]# vim /etc/keepalived/keepalived.conf
  vrrp_script chk_nginx {
     script "/etc/keepalived/nginx_check.sh"
     interval 2
     weight -20
  }

  vrrp_instance VI_1 {
      state BACKUP
      interface eth0
      virtual_router_id 51
      mcast_src_ip 192.168.1.99
      priority 90
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      track_script {
          chk_nginx
      }
      virtual_ipaddress {
          192.168.1.100
      }   
  }   

  vrrp_instance VI_2 {
      state MASTER
      interface eth0
      virtual_router_id 52
      mcast_src_ip 192.168.1.99
      nopreempt
      priority 100
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      track_script {
          chk_nginx
      }
      virtual_ipaddress {
          192.168.1.101
      }
  }
  • Nginx状态监测脚本

独家在服务器Nginx 01和Nginx 02上加多Nginx状态监测脚本。

  [root@Nginx-A-98 keepalived]# vim /etc/keepalived/nginx_check.sh
  #!/bin/bash
  A=`ps -C nginx –no-header |wc -l`
  if [ $A -eq 0 ];then
          /usr/local/nginx/sbin/nginx
          sleep 2
          if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                  killall keepalived
          fi
  fi

笔者们也得以依据本人的事体必要,总括出在哪些状态下关闭keepalived,如 curl
主页接二连三2个5s没有响应则切换:

#!/bin/bash

count = 0
for (( k=0; k<2; k++ )) 
do 
    check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost/login.html -o /dev/null )
    if [ "$check_code" != "200" ]; then
        count = count +1
        continue
    else
        count = 0
        break
    fi
done
if [ "$count" != "0" ]; then
#   /etc/init.d/keepalived stop
    exit 1
else
    exit 0
fi

Linux 高可用(HA)集群之heartbeat基于crm进行能源处理详解
http://www.linuxidc.com/Linux/2013-08/89167.htm

2.4 配置选项表明

global_defs

  • notification_email
    keepalived在发出诸如切换操作时索要发送email通告地址,前边的
    smtp_server
    相比较也都清楚是邮件服务器地址。也得以经过另外措施报告警方,毕竟邮件不是实时通报的。
  • router_id
    机器标记,平时可设为hostname。故障爆发时,邮件文告会用到

vrrp_instance

  • state
    内定instance(Initial)的开首状态,正是说在布局好后,这台服务器的始发状态正是这里钦定的,但此间钦赐的不算,依然得要因而大选通过事先级来规定。假若这里安装为MASTEXC60,但倘若他的事先级不比其它一台,那么那台在出殡和埋葬布告时,会发送温馨的优先级,另外一台开掘优先级不及本身的高,那么她会就回抢占为MASTE凯雷德
  • interface
    实例绑定的网卡,因为在布局设想IP的时候必须是在已有的网卡上加上的
  • mcast_src_ip
    发送多播数据包时的源IP地址,这里注意了,这里其实就是在卓殊地点上发送VTucsonRP文告,这几个可怜首要,必要求选择稳定的网卡端口来发送,这里一定于heartbeat的心跳端口,若无设置那么就用暗中同意的绑定的网卡的IP,也便是interface钦命的IP地址
  • virtual_router_id
    这里设置V卡宴ID,这Ritter别首要,同样的VKugaID为一个组,他将决定多播的MAC地址
  • priority : 设置本节点的优先级,优先级高的为master
  • advert_int
    检查间隔,默感觉1秒。那正是V奥迪Q7RP的放大计时器,MASTE昂科拉每隔那样叁个小时间隔,就能够发送三个advertisement报文以公告组内其余路由器自个儿干活儿符合规律
  • authentication : 定义认证格局和密码,主从必须一律
  • virtual_ipaddress
    这里安装的正是VIP,也正是设想IP地址,他乘机state的变迁而扩充删除,当state为master的时候就增加,当state为backup的时候删除,这里最首要是有优先级来决定的,和state设置的值未有多大关系,这里能够设置三个IP地址
  • track_script : 引用VRRP脚本,即在 vrrp_script
    部分钦点的名字。定期运转它们来改换优先级,并最终引发主备切换。

vrrp_script
告知 keepalived 在如何情状下切换,所以进一步关键。可以有七个 vrrp_script

  • script : 自个儿写的检查评定脚本。也能够是单排命令如killall -0 nginx
  • interval 2 : 每2s检验三次
  • weight -5 : 检查实验战败(脚本重临非0)则优先级 -5
  • fall 2 : 检查测量检验一而再 2
    次失利才算鲜明是真战败。会用weight减弱优先级(1-255之内)
  • rise 1 : 检查测量试验 1 次成功正是成功。但不改动优先级

此处要提示一下script一般有2种写法:

  1. 通过脚本施行的归来结果,改换优先级,keepalived继续发送通告音信,backup比较优先级再决定
  2. 本子里面检验到特别,直接关门keepalived进程,backup机器接收不到advertisement会抢占IP

上文 vrrp_script
配置部分,killall -0 nginx属于第1种情况,/etc/keepalived/check_nginx.sh属于第2种状态(脚本中关闭keepalived)。个人更赞成于通过shell脚本剖断,但有卓殊时exit
1,平常退出exit 0,然后keepalived依照动态调度的 vrrp_instance
优先级公投决定是还是不是抢占VIP:

  • 借使脚本实践结果为0,何况weight配置的值大于0,则优先级相应的扩大
  • 假如脚本实施结果非0,并且weight配置的值小于0,则优先级相应的缩减

别的景况,原来配备的早期级不改变,即安插文件中priority对应的值。

提示:

  1. 优先级不会再三的滋长也许减弱
  2. 能够编写制定多少个检测脚本并为各种检验脚本设置不一致的weight(在布局中列出就行)
  3. 任凭升高优先级还是下落优先级,最后优先级的限定是在[1,254],不会并发优先级小于等于0照旧优先级大于等于255的事态
  4. 在MASTER节点的 vrrp_instance 中 配置 nopreempt
    ,当它可怜复苏后,就算它 prio
    越来越高也不会抢占,那样能够幸免不荒谬意况下做无谓的切换

如上能够落成利用脚本检查实验业务经过的图景,并动态调解优先级进而完成主备切换。

布置结束

在默许的keepalive.conf里面还大概有 virtual_server,real_server
那样的布局,大家那用不到,它是为lvs筹划的。 notify
能够定义在切换到MASTE帕杰罗或BACKUP时实施的台本,如有须求请自行google。

notify

5. 高可用方案 — 主从方式

亚洲必赢app官方下载 5

主干情势

  • Nginx 01服务器Keepalived脚本配置

 [root@Nginx-A-98 src]# vim /etc/keepalived/keepalived.conf
  vrrp_script chk_nginx {
     script "/etc/keepalived/nginx_check.sh"    # 检测nginx状态的脚本路径
     interval 2                    # 检测时间间隔2s
     weight -20                    # 如果脚本的条件成立,权重-20
  }

  vrrp_instance VI_1 {            # VRRP实例名;多实例的情况下,名称必须不一致
      state MASTER                # 服务状态;MASTER(工作状态)BACKUP(备用状态)
      interface eth0              # VIP绑定网卡
      virtual_router_id 51        # 虚拟路由ID,主、备节点必须一致;多实例的情况下,ID必须不一致
      mcast_src_ip 192.168.1.98  # 本机IP
      nopreempt                   # 优先级高的设置,解决异常回复后再次抢占的问题
      priority 100                # 优先级;取值范围:0~254;MASTER > BACKUP
      advert_int 1                # 组播信息发送间隔,主、备节点必须一致,默认1s
      authentication {            # 验证信息;主、备节点必须一致
          auth_type PASS          # VRRP验证类型,PASS、AH两种
          auth_pass 1111          # VRRP验证密码,在同一个vrrp_instance下,主、从必须使用相同的密码才能正常通信
      }
       track_script {             # 将track_script块加入instance配置块
          chk_nginx               # 执行Nginx监控的服务
      }
      virtual_ipaddress {         # 虚拟IP池,主、备节点必须一致,可以定义多个VIP
          192.168.1.100            # 虚拟IP
      }
  }
  • Nginx 02服务器Keepalived配置

[root@Nginx-B-99 src]# vim /etc/keepalived/keepalived.conf
  vrrp_script chk_nginx {
     script "/etc/keepalived/nginx_check.sh"
     interval 2
     weight -20
  }

  vrrp_instance VI_1 {
      state BACKUP
      interface eth0
      virtual_router_id 51
      mcast_src_ip 192.168.1.99
      priority 90
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      track_script {
          chk_nginx
      }
      virtual_ipaddress {
          192.168.1.100
      }   
  }
  • Nginx状态监测脚本

各自在服务器Nginx 01和Nginx 02上丰裕Nginx状态监测脚本。

  [root@Nginx-A-98 keepalived]# vim /etc/keepalived/nginx_check.sh
  #!/bin/bash
  A=`ps -C nginx –no-header |wc -l`
  if [ $A -eq 0 ];then
          /usr/local/nginx/sbin/nginx
          sleep 2
          if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                  killall keepalived
          fi
  fi

Heartbeat+httpd+NFS 完毕高可用的Web服务器
http://www.linuxidc.com/Linux/2013-08/88520.htm

2.5 nginx配置

本来nginx未有啥可安插的,因为它与keepalived并从未联系。但切记,2台nginx服务器上的陈设相应是截然一致的(rsync同步),这样能力形成对用户透明,nginx.conf
里面的 server_name 尽量使用域名来代表,然后dns分析那么些域名到虚构IP
172.29.88.222。

越多关于nginx内容安顿请参照他事他说加以考察
这里 。

6. Keepalived配置选项说明

Linux 高可用(HA)集群之Heartbeat详解
http://www.linuxidc.com/Linux/2013-08/88521.htm

3. 测试

基于上面的布署,起始化状态:172.29.88.224
(itoatest1,MASTEOdyssey,101),172.29.88.222(itoatest2,BACKUP,100),nginx和keepalived都运营,虚构IP
172.29.88.222 在 itoatest1 上:

1
2
3
4
5
# 使用ip命令配置的地址,ifconfig查看不了
[root@itoatest1 nginx-1.6]# ip a|grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 172.29.88.224/24 brd 172.29.88.255 scope global eth0
inet 172.29.88.222/32 scope global eth0

 

浏览器访谈 172.29.88.222 或域名,OK。

一直关闭 itoatest1
上的nginx:/usr/local/nginx-1.6/sbin/nginx -s stop

1
2
3
[root@localhost keepalived]# ip a|grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 172.29.88.224/24 brd 172.29.88.255 scope global eth0

 

vip消失,漂移到 itoatest2:

亚洲必赢app官方下载 6

与此同一时间能够看看两台服务器上 /var/log/messages

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## itoatest1
Jun 5 16:44:01 itoatest1 Keepalived_vrrp[44875]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.29.88.222
Jun 5 16:44:06 itoatest1 Keepalived_vrrp[44875]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.29.88.222
Jun 5 16:44:46 itoatest1 Keepalived_vrrp[44875]: VRRP_Script(chk_nginx) failed
Jun 5 16:44:48 itoatest1 Keepalived_vrrp[44875]: VRRP_Instance(VI_1) Received higher prio advert
Jun 5 16:44:48 itoatest1 Keepalived_vrrp[44875]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jun 5 16:44:48 itoatest1 Keepalived_vrrp[44875]: VRRP_Instance(VI_1) removing protocol VIPs.
Jun 5 16:44:48 itoatest1 Keepalived_healthcheckers[44874]: Netlink reflector reports IP 172.29.88.222 removed
 
## itoatest2
Jun 5 16:44:00 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun 5 16:44:00 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) Received higher prio advert
Jun 5 16:44:00 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jun 5 16:44:48 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) forcing a new MASTER election
Jun 5 16:44:48 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) forcing a new MASTER election
Jun 5 16:44:49 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun 5 16:44:50 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) Entering MASTER STATE
Jun 5 16:44:50 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) setting protocol VIPs.
Jun 5 16:44:50 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.29.88.222
Jun 5 16:44:50 itoatest2 Keepalived_healthcheckers[35554]: Netlink reflector reports IP 172.29.88.222 added
Jun 5 16:44:55 itoatest2 Keepalived_vrrp[35555]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.29.88.222

 

您也能够因此在两台服务器上抓包来查阅 优先级priority 的变型:

1
2
3
## itoatest1 上
## 直接输出,或后加 -w itoatest-kl.cap存入文件用wireshark查看
# tcpdump -vvv -n -i eth0 dst 224.0.0.18 and src 172.29.88.224

 

亚洲必赢app官方下载 7

推荐阅读

CentOS 6.2实战安排Nginx+MySQL+PHP
http://www.linuxidc.com/Linux/2013-09/90020.htm

使用Nginx搭建WEB服务器
http://www.linuxidc.com/Linux/2013-09/89768.htm

Memcached 安装及运营脚本
http://www.linuxidc.com/Linux/2013-07/87641.htm

PHP中使用Memcached的特性难题
http://www.linuxidc.com/Linux/2013-06/85883.htm

Ubuntu下安装Memcached及命令解释
http://www.linuxidc.com/Linux/2013-06/85832.htm

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全经过
http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3下Nginx品质调优
http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3下配置Nginx加载ngx_pagespeed模块
http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4安装配置Nginx+Pcre+php-fpm
http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx
的事无巨细介绍
:请点这里
Nginx
的下载地址
:请点这里

本文长久更新链接地址:http://www.linuxidc.com/Linux/2016-12/137883.htm

亚洲必赢app官方下载 8

6.1 global_defs

  • notification_email :
    keepalived在发生诸如切换操作时索要发送email文告地址,前边的
    smtp_server
    相比较也都知情是邮件服务器地址。也足以透过其它格局报告警察方,毕竟邮件不是实时通报的。
  • router_id :
    机器标志,常常可设为hostname。故障发生时,邮件通告会用到

Linux 高可用(HA)集群基本概念详解
http://www.linuxidc.com/Linux/2013-08/88522.htm

6.2 vrrp_instance

  • state :
    钦点instance(Initial)的开端状态,正是说在配备好后,那台服务器的起先状态正是此处钦命的,但那边钦赐的不算,依然得要透过大选通过先行级来明确。假使这里设置为MASTE大切诺基,但假诺她的前期级不比其他一台,那么那台在发送布告时,会发送温馨的优先级,另外一台发现优先级不比自身的高,那么他会就回抢占为MASTECRUISER
  • interface :
    实例绑定的网卡,因为在配备虚构IP的时候必须是在已有的网卡上助长的
  • mcast_src_ip :
    发送多播数据包时的源IP地址,这里注意了,这里实在就是在非常地点上发送VPRADORP文告,那一个丰富首要,应当要选用牢固的网卡端口来发送,这里相当于heartbeat的心跳端口,若无设置那么就用暗中认可的绑定的网卡的IP,也便是interface钦赐的IP地址
  • virtual_router_id :
    这里安装V奥迪Q3ID,这里特别首要,同样的VXC90ID为贰个组,他将调控多播的MAC地址
  • priority : 设置本节点的优先级,优先级高的为master
  • advert_int :
    检查间隔,默以为1秒。那就是V牧马人RP的电火花计时器,MASTESportage每隔那样二个时间距离,就能够发送一个advertisement报文以布告组内其余路由器本人干活儿符合规律
  • authentication : 定义认证情势和密码,主从必须一致
  • virtual_ipaddress :
    这里安装的便是VIP,也便是编造IP地址,他乘机state的改换而充实删除,当state为master的时候就增进,当state为backup的时候删除,这里最主即便有优先级来决定的,和state设置的值未有多大关系,这里能够设置四个IP地址
  • track_script : 引用VRRP脚本,即在 vrrp_script
    部分钦赐的名字。定时运转它们来退换优先级,并最终引发主备切换。

二、Keepalived 详解
1.Keepalived 定义
      Keepalived
是一个根据V汉兰达RP协议来落到实处的LVS服务高可用方案,能够选择其来制止单点故障。三个LVS服务会有2台服务器运营Keepalived,一台为主服务器(MASTEOdyssey),一台为备份服务器(BACKUP),不过对外表现为一个虚拟IP,主服务器会发送特定的新闻给备份服务器,当备份服务器收不到这些新闻的时候,即主服务器宕机的时候,
备份服务器就能接管设想IP,继续提供劳务,进而保障了高可用性。Keepalived是V途达RP的应有尽有兑现,由此在介绍keepalived以前,先介绍一下V索罗德RP的原理。
2.V奇骏RP 协议简要介绍
在切切实实的网络处境中,两台须要通讯的主机大许多景况下并从未直接的情理连接。对于那样的动静,它们之间路由哪些选用?主机怎么着选定到达指标主机的下一跳路由,这几个主题材料一般的化解办法有三种:
在主机上选取动态路由和睦(OdysseyIP、OSPF等)

6.3 vrrp_script

告知 keepalived 在什么样状态下切换,所以进一步关键。能够存在多少个vrrp_script。

  • script : 本身写的检验脚本。也能够是单排命令如killall -0 nginx
  • interval 2 : 每2s检查评定贰回
  • weight -5 : 检验战败(脚本重返非0)则优先级 -5
  • fall 2 : 检查评定延续 2
    次败北才算鲜明是真退步。会用weight收缩优先级(1-255之内)
  • rise 1 : 检查测量试验 1 次成功就是成功。但不修改优先级

此处要提示一下script一般有2种写法:

  • 通过脚本实施的回来结果,退换优先级,keepalived继续发送文告新闻,backup相比较优先级再决定
  • 剧本里面检验到极度,直接关门keepalived进程,backup机器接收不到advertisement会抢占IP

上文 vrrp_script
配置部分,killall -0 nginx属于第1种情况,/etc/keepalived/check_nginx.sh属于第2种状态(脚本中关闭keepalived)。个人更赞成于通过shell脚本剖断,但有极度时exit
1,平常退出exit 0,然后keepalived依据动态调度的 vrrp_instance
优先级公投决定是不是抢占VIP:

  • 万一脚本实行结果为0,並且weight配置的值大于0,则先行级相应的增添
  • 只要脚本实行结果非0,并且weight配置的值小于0,则优先级相应的回降

其余情况,原来配备的预先级不改变,即陈设文件中priority对应的值。

提示:

  1. 事先级不会不断的滋长可能下跌
  2. 能够编写制定多个检验脚本并为各种检查评定脚本设置差异的weight(在配备中列出就行)
  3. 随意升高优先级依然下落优先级,最后优先级的限定是在[1,254],不会并发优先级小于等于0要么优先级大于等于255的事态
  4. 在MASTER节点的 vrrp_instance 中 配置 nopreempt
    ,当它不行复苏后,即便它 prio
    更加高也不会抢占,那样能够幸免符合规律情况下做无谓的切换

以上方可成功利用脚本检查评定业务进程的景况,并动态调度优先级进而完结主备切换。

局地有关Keepalived相关课程会集

CentOS 7下Keepalived + HAProxy 搭建配置详解 
http://www.linuxidc.com/Linux/2017-03/141593.htm

Keepalived高可用集群应用场景与配置
http://www.linuxidc.com/Linux/2017-03/141866.htm

Nginx+Keepalived达成站点高可用 
http://www.linuxidc.com/Linux/2016-12/137883.htm

Nginx+Keepalived实现站点高可用(负载均衡) 
http://www.linuxidc.com/Linux/2016-12/138221.htm

创设高可用集群Keepalived+Haproxy负载均衡
http://www.linuxidc.com/Linux/2016-12/138917.htm

Nginx+Keepalived双机热备(主主形式) 
http://www.linuxidc.com/Linux/2017-10/148061.htm

CentOS6.5下 Keepalived高可用服务单实例配置
http://www.linuxidc.com/Linux/2016-12/138110.htm

Keepalived安装与布置
http://www.linuxidc.com/Linux/2017-02/140421.htm

Nginx之Keepalived高可用 
http://www.linuxidc.com/Linux/2017-05/143708.htm

Linux下Keepalived服务安装文书档案 
http://www.linuxidc.com/Linux/2017-03/141441.htm

正文永远更新链接地址:http://www.linuxidc.com/Linux/2017-11/148405.htm

亚洲必赢app官方下载 9

在主机上陈设静态路由

很领悟,在主机上安顿动态路由是特别不合实际的,因为保管、维护资金财产以及是不是协理等比比较多题材。配置静态路由就变得可怜盛行,但路由器(或许说暗中认可网关default
gateway)却时时成为单点故障。V昂CoraRP的目的正是为着化解静态路由单点故障难题,VRAV4RP通过一公投(election)协议来动态的将路由职责交给LAN中虚构路由器中的某台VSportageRP路由器。
3.VRRP 专业体制
     
在三个V普拉多RP虚构路由器中,有多台物理的VLX570RP路由器,然则那多台的物理的机械并不能够而且专门的学问,而是由一台名称叫MASTELX570的负责路由工作,别的的都以BACKUP,MASTE科雷傲并不是一步一趋,VEnclaveRP让各种V宝马7系RP路由器参加公投,最后折桂的正是MASTERubicon。MASTE瑞虎具有一点特权,比方,具有设想路由器的IP地址,大家的主机就是用那么些IP地址作为静态路由的。具有特权的MASTE陆风X8要肩负转发发送给网关地址的包和响应ARP诉求。
     
VENVISIONRP通过选举重协会议来促成设想路由器的成效,全体的说道报文都是由此IP多播(multicast)包(多播地址224.0.0.18)方式发送的。虚构路由器由VRubiconID(范围0-255)和一组IP地址组成,对外表现为多少个周知的MAC地址。所以,在三个虚构路由
器中,不管何人是MASTESportage,对外都以均等的MAC和IP(称之为VIP)。客户端主机并无需因为MASTE翼虎的改换而修改自个儿的路由配置,对客户端的话,这种主从的切换是晶莹剔透的。
     
在贰个虚拟路由器中,唯有作为MASTE奥迪Q5的V奥迪Q3RP路由器会一向发送VENVISIONRP文告音讯(V传祺RPAdvertisement
message),BACKUP不会抢占MASTEHighlander,除非它的优先级(priority)越来越高。当MASTE奥德赛不可用时(BACKUP收不到文告消息),
多台BACKUP中优先级最高的那台会被私吞为MASTE大切诺基。这种抢占是丰硕便捷的(<1s),以管教服务的三翻五次性。由于安全性思考,V途乐RP包使用了加密协议进行加密。
4.VENCORERP 专业流程
(1).初始化:   
路由器运行时,就算路由器的初期级是255(最高优先级,路由器材备路由器地址),要发送V索罗德RP布告音信,并发送广播ARP音信布告路由器IP地址对应的MAC地址为路由虚构MAC,设置布告新闻反应计时器计划定期发送V大切诺基RP文告新闻,转为MASTE奥迪Q7状态;不然走入BACKUP状态,设置停车计时器检查按时检查是或不是接受MASTELAND的文告音信。
(2).Master
设置定期通告电火花计时器;

用V中华VRP虚构MAC地址响应路由器IP地址的ARP央浼;

转载目标MAC是VEnclaveRP设想MAC的数码包;

举个例子是杜撰路由器IP的具备者,将接受指标地址是编造路由器IP的数据包,不然屏弃;

当接过shutdown的事件时去除定期文告放大计时器,发送优先权级为0的公告包,转开端化状态;

假如定时布告反应计时器超时时,发送V奥迪Q5RP文告新闻;

接到V哈弗RP布告音讯时,尽管优先权为0,发送VENVISIONRP公告信息;不然判定数据的优先级是不是超越本机,或等于并且实际IP地址大于当地实际IP,设置定期文告沙漏,重置主机超时沙漏,转BACKUP状态;不然的话,遗弃该文告包;

(3).Backup
设置主机超时计时器;

不能够响应针对设想路由器IP的ARP央求音讯;

抛弃全部指标MAC地址是虚构路由器MAC地址的数额包;

不收受指标是编造路由器IP的具备数据包;

当接到shutdown的事件时去除主机超时停车计时器,转早先化状态;

主机超时定时器超时的时候,发送V普拉多RP文告音信,广播ARP地址消息,转MASTE逍客状态;

接到VLANDRP通知消息时,倘使优先权为0,表示步向MASTE帕杰罗大选;不然决断数据的优先级是不是抢先本机,假诺高的话断定MASTE宝马7系有效,重新恢复设置主机超时沙漏;不然的话,吐弃该文告包;

5.ARP查询管理
     
当其中主机通过ARP查询设想路由器IP地址对应的MAC地址时,MASTE普拉多路由器回复的MAC地址为虚构的VRubiconRP的MAC地址,并不是实在网卡的
MAC地址,这样在路由器切换时让内网机器觉察不到;而在路由器重新运转时,不可能积极发送本机网卡的实际MAC地址。若是设想路由器开启的ARP代理
(proxy_arp)功用,代理的ARP回应也回应V汉兰达RP虚拟MAC地址;好了V奥迪Q5RP的粗略讲授就到那边,大家下去解说一下Keepalived的案例。

三、情形希图
1.操作系统
CentOS 6.4 X86_64

2.软件版本
ipvsadm.x86_64 0:1.25-10.el6                 

keepalived.x86_64 0:1.2.7-3.el6     

httpd-2.2.15-29.el6.centos.x86_64

3.实验拓扑

亚洲必赢app官方下载 10

4.时间一齐
node1:
[root@node1 ~]# ntpdate 202.120.2.101

node2:
[root@node2 ~]# ntpdate 202.120.2.101

master:
[root@master ~]# ntpdate 202.120.2.101

slave:
[root@slave ~]# ntpdate 202.120.2.101

5.主机名相互深入分析
node1:
[root@node1 ~]# cat /etc/hosts 
127.0.0.1  localhost localhost.localdomain localhost4
localhost4.localdomain4   
::1        localhost localhost.localdomain localhost6
localhost6.localdomain6   
192.168.18.201    node1.test.com    node1   
192.168.18.202    node2.test.com    node2

node2:
[root@node2 ~]# cat /etc/hosts 
127.0.0.1  localhost localhost.localdomain localhost4
localhost4.localdomain4   
::1        localhost localhost.localdomain localhost6
localhost6.localdomain6   
192.168.18.201    node1.test.com    node1   
192.168.18.202    node2.test.com    node2

6.安装yum源
node1:
[root@node1 ~]# rpm -ivh

[root@node1 ~]# rpm -ivh

node2:
[root@node2 ~]# rpm -ivh

[root@node2 ~]# rpm -ivh

master:
[root@master ~]# rpm -ivh

[root@master ~]# rpm -ivh

slave:
[root@slave ~]# rpm -ivh

[root@slave ~]# rpm -ivh

接下去请看第2页的精粹内容:http://www.linuxidc.com/Linux/2013-08/89227p2.htm

亚洲必赢app官方下载 11

发表评论

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

网站地图xml地图