【 Keepalived 】Nginx or Http 主-备模式

一、主-备模式:

  操作系统:centos 6.4 x64

  ka1: 192.168.2.10

  ka2: 192.168.2.11

  vip: 192.168.2.200

ka1-master服务器配置

[ka1 [email protected]192.168.2.10 ~]#yum install  httpd keepalived -y    # 这里使用apache代替nginx,效果是一样的,然后直接yum安装keepalived
[ka1 [email protected]192.168.2.10 ~]#sed -i ‘[email protected]#ServerName www.example.com:[email protected] localhost:[email protected]‘ /etc/httpd/conf/httpd.conf
[ka1 [email protected]192.168.2.10 ~]#service httpd start  # 启动httpd
正在启动 httpd:                                           [确定]
[ka1 [email protected]192.168.2.10 ~]#echo "192.168.2.10" >> /var/www/html/index.html  # 添加测试页面
[ka1 [email protected]192.168.2.10 ~]#curl -I 192.168.2.10  # 测试访问http header 返回是否正常。这里为200 正常。
HTTP/1.1 200 OK
Date: Sun, 06 Dec 2015 11:16:10 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Sun, 06 Dec 2015 11:15:55 GMT
ETag: "5ff81-d-52638dd3bc5ea"
Accept-Ranges: bytes
Content-Length: 13
Connection: close
Content-Type: text/html; charset=UTF-8
[ka1 [email protected]192.168.2.10 ~]#cd /etc/keepalived/
[ka1 [email protected]192.168.2.10 /etc/keepalived]#ls
keepalived.conf
[ka1 [email protected]192.168.2.10 /etc/keepalived]#cp -a keepalived.conf keepalived.conf_bak  # 编写配置前一定要备份。
[ka1 [email protected]192.168.2.10 /etc/keepalived]#vim keepalived.conf  # keepalived配置如下:
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]    # 故障发生时给谁发邮件通知。这里使用root用户发送给本机
   }
   notification_email_from [email protected]  # 通知邮件从哪个地址发出
   smtp_server localhost  # 通知邮件的smtp地址。
   smtp_connect_timeout 30  # 连接smtp服务器的超时时间。
   router_id NodeA  # 标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}

vrrp_script check_nginx {    # 创建健康检测脚本
   script "/etc/keepalived/bash/check_nginx.sh"  # 脚本具体位置,这里注意:脚本是一定要有执行权限的。
   interval 5  # 脚本运行间隔
   weight -10  # 如果脚本执行失败,vrrp_instance的优先级会减少10个点。
}

vrrp_instance VI_1 {  # 用来定义对外提供服务的VIP区域及其相关属性。
    state MASTER  # 可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER,因此该项其实没有实质用途。
    interface eth0  # 节点固有IP(非VIP)的网卡,用来发VRRP包。该网卡应该为vip绑定的网卡
    virtual_router_id 51  # 取值在0-255之间,用来区分多个instance的VRRP组播。注意: 同一网段中virtual_router_id的值不能重复,否则会出错,相关错误信息如下。
    priority 100  # 用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)。
    advert_int 1  # 发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)。
    authentication {  # 认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位)。
        auth_type PASS
        auth_pass 1111
    }
    track_script {  # 在VI_1区域使用上面定义的check_nginx进行健康检测
        check_nginx
    }
    virtual_ipaddress {  # vip,不解释了。注意:这里设置VIP的时候一定要把掩码带上。
        192.168.2.200/24
    }
}

以上红色部分为修改内容部分。

[ka1 [email protected]192.168.2.10 /etc/keepalived]#mkdir bash  
[ka1 [email protected]192.168.2.10 /etc/keepalived/bash]#vim check_nginx.sh  # 编写脚本,内容如下,很简单,这里不多做解释。
#!/bin/bash

pidfile=/var/lock/subsys/`basename $0`.pid
if [ -f $pidfile ] && [ -e /proc/`cat $pidfile` ] ; then
    exit 1
fi
trap "rm -rf $pidfile ; exit 0" 1 2 3 15
echo $$ > $pidfile
maxfails=3
fails=0
success=0

while [ 1 ]
do

    /usr/bin/wget --timeout=3 --tries=1 http://192.168.2.10/ -q -O /dev/null && ping -c1 192.168.2.1 &> /dev/null
    if [ $? -ne 0 ] ; then
        let fails=$[$fails+1]
        success=0
    else
        fails=0
        let success=$[$success+1]
    fi

    if [ $fails -ge $maxfails ] ; then
        fails=0
        success=0
        #check keepalived is running ? try to stop it
        /etc/init.d/keepalived status | grep running
        if [ $? -eq 0 ] ; then
            /bin/logger -is "local service fails $maxfails times ... try to stop keepalived."
            /etc/init.d/keepalived stop 2>&1 | /bin/logger
        fi

    fi

    if [ $success -gt $maxfails ] ; then
        #check keepalived is stopped ? try to start it
        /etc/init.d/keepalived status | grep 已停    # 脚本中这里要注意,如果系统是英文安装的为 grep stopped 如果是中文为 grep 已停
        if [ $? -eq 0 ] ; then
            logger -is "service changes normal, try to start keepalived ."
            /etc/init.d/keepalived start
        fi
        success=0
    fi
    sleep 3

done

[ka1 [email protected]192.168.2.10 /etc/keepalived/bash]#chmod +x check_nginx.sh
[ka1 [email protected]192.168.2.10 /etc/keepalived]#service keepalived start
正在启动 keepalived:                                      [确定]
[ka1 [email protected]192.168.2.10 /etc/keepalived/bash]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:39:92:4f brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.10/24 brd 192.168.2.255 scope global eth0
    inet 192.168.2.200/24 scope global secondary eth0    # 这里就已经绑定上了VIP
    inet6 fe80::20c:29ff:fe39:924f/64 scope link
       valid_lft forever preferred_lft forever

[ka1 [email protected]192.168.2.10 /etc/keepalived/bash]#ps auxfww | grep check_nginx.sh  # 查看配置文件中的脚本是否正常运行。
root       2596  0.0  0.0 103240   872 pts/1    S+   11:14   0:00          \_ grep check_nginx.sh
root       2473  0.0  0.1 108160  1504 ?        S    11:13   0:00 /bin/bash /etc/keepalived/bash/check_nginx.sh
[ka1 [email protected]192.168.2.10 /etc/keepalived/bash]#service keepalived stop    # 关闭keepalived进行测试。
停止 keepalived:                                          [确定]
[ka1 [email protected]192.168.2.10 /etc/keepalived/bash]#service keepalived status   # 等一会就可以看到keepalived
keepalived (pid  2696) 正在运行...

ka1 master主机配置完毕,ka2配置如下:

[ka2 [email protected]192.168.2.11 ~]#yum install httpd keepalived -y
[ka2 [email protected]192.168.2.11 ~]#sed -i ‘[email protected]#ServerName www.example.com:[email protected] localhost:[email protected]‘ /etc/httpd/conf/httpd.conf
[ka2 [email protected]192.168.2.11 ~]#service httpd start
正在启动 httpd:                                           [确定]
[ka2 [email protected]192.168.2.11 ~]#curl -I 192.168.2.11
HTTP/1.1 200 OK
Date: Sun, 06 Dec 2015 11:56:58 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Sun, 06 Dec 2015 11:56:47 GMT
ETag: "5fe4e-d-526396f6ac030"
Accept-Ranges: bytes
Content-Length: 13
Connection: close
Content-Type: text/html; charset=UTF-8

[ka2 [email protected]192.168.2.11 ~]#cd /etc/keepalived/
[ka2 [email protected]192.168.2.11 /etc/keepalived]#ls
keepalived.conf
[ka2 [email protected]192.168.2.11 /etc/keepalived]#cp -a keepalived.conf keepalived.conf_bak
[ka2 [email protected]192.168.2.11 /etc/keepalived]#scp 192.168.2.10:/etc/keepalived/keepalived.conf .
The authenticity of host ‘192.168.2.10 (192.168.2.10)‘ can‘t be established.
RSA key fingerprint is be:e8:09:ba:fd:95:29:ed:33:40:f5:81:75:22:03:90.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.2.10‘ (RSA) to the list of known hosts.
[email protected]192.168.2.10‘s password:
keepalived.conf                                                                                                                                            100%  606     0.6KB/s   00:00 

[ka2 [email protected]192.168.2.11 /etc/keepalived]#vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server localhost
   smtp_connect_timeout 30
   router_id NodeB
}

vrrp_script check_nginx {
   script "/etc/keepalived/bash/check_nginx.sh"
   interval 5
   weight -10
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        check_nginx
    }
    virtual_ipaddress {
        192.168.2.200/24
    }
}
红色部分为修改内容
[ka2 [email protected]192.168.2.11 /etc/keepalived]#mkdir bash
[ka2 [email protected]192.168.2.11 /etc/keepalived]#cd bash
[ka2 [email protected]192.168.2.11 /etc/keepalived/bash]#scp 192.168.2.10:/etc/keepalived/bash/check_nginx.sh .  # 这里脚本拷贝过来以后,需要修改下IP地址。
[email protected]192.168.2.10‘s password:
check_nginx.sh                                                                                                                                             100% 1224     1.2KB/s   00:00
[ka2 [email protected]192.168.2.11 /etc/keepalived]#service keepalived restart
停止 keepalived:                                          [确定]
正在启动 keepalived:                                      [确定]

[ka2 [email protected]192.168.2.11 /etc/keepalived]#ps auxfww  | grep check_nginx.sh
root       2233  0.0  0.0 103240   868 pts/1    S+   20:09   0:00  |       \_ grep check_nginx.sh
root       2204  0.0  0.1 108160  1500 ?        S    20:08   0:00 /bin/bash /etc/keepalived/bash/check_nginx.sh
[ka2 [email protected]192.168.2.11 /var]#service keepalived stop
停止 keepalived:                                          [确定]
[ka2 [email protected]192.168.2.11 /etc/keepalived]#service keepalived status
keepalived (pid  2479) 正在运行...

两台keepalived主机配置完毕,测试如下:

keepalived设置ka1为Master   IP: 192.168.2.10

接下来down掉 ka1的httpd服务,再次访问:

当ka1 master 主机故障解除,启动httpd进程后,再次访问:

这种主备模式的使用,BACKUP主机只是作为备用主机,一旦MASTER主机故障解除,就要拿回主权。在配置过程中,如果出现问题,多查看/var/log/messages 日志文件,我在配置过程中曾出现过问题。

如果在测试环节出现问题,请使用 sh -x 脚本名来排查脚本问题。

时间: 2024-10-20 01:20:53

【 Keepalived 】Nginx or Http 主-备模式的相关文章

Nginx + Keepalived(主备模式)实现负载均衡高可用浅析

概述 目前关于负载均衡和高可用的架构方案能找到相当多且详尽的资料,此篇是自己学习相关内容的一个总结,防止将来遗忘再次重新查找资料,也避免踩相同的坑. 此次配置的负载均衡与高可用架构:Nginx + Keepalived(主备模式),Nginx 使用反向代理实现七层负载均衡. 众所周知,Nginx 是一款自由的.开源的.高性能HTTP服务器和反向代理服务器,也是一个IMAP.POP3.SMTP代理服务器. 也就是说Nginx本身就可以托管网站(类似于Tomcat一样),进行HTTP服务处理,也可以

L10 keepalived 基本使用(主备模式)

配置keepalive基本主备模式 配置说明: 要求默认情况下由节点node1提供服务,当节点node1不可用时,由节点node2提供服务(即虚拟IP漂移至节点node2). 节点node1 192.168.0.20 (主节点) 节点node2 192.168.0.21(备用节点) 虚拟IP(对外提供服务的IP 192.168.0.60 ping node 192.168.0.22(用于节点自身状态监测) 内容: 1,节点node1上的配置文件 2,节点node2配置 3,使用脚本防止脑裂. 4

HA集群之keepalived详解/基于keepalived+LVS-DR构建HA主备模型(一)

一.理论部分:     keepalived是vrrp协议的实现:原生设计目的为高可用ipvs服务:keepalived能够配置文件中的定义生成ipvs规则:并能够对各RealServer的健康状态进行检测:  vrrp协议:虚拟冗余路由协议:早期只是主要在路由器上提供的一种非常简单的完成将多个物理设备组建成一个虚拟设备,并且在多个物理设备之间漂移地址一种协议:非常轻量化,性能非常好.而keepalived无非就是通过vrrp协议在Linux主机上通过一个守护进程,把Linux主机扮演成路由器,

Keepalived+Nginx实现双主高可用负载均衡

Keepalived+Nginx实现双主高可用负载均衡 一.部署Nginx+keepalived高可用有两种配置方案: 1.Nginx+keepalived 主从配置 前端使用两台机器,使用一个VIP,即其中一台为主负责全部请求,一台为备,只用在主出现故障时,才会替代主处理请求,平常处于闲置状态,此方案不够理想.  2.Nginx+keepalived 双主配置 前端使用2台机器,使用两个VIP,互为主备,不考虑其他情况时均衡处理请求,当其中一台机器出现故障时,另一台负责处理对两台机器的请求,此

redis演练(6) redis复制(主备模式)

redis是一款面向分布式的Nosql产品,天生对主备模式有很好的支持,而且配置一套完整的主备模式,非常简单.针对redis,主备模式配置非常简单,但线上意义重大. 主要内容 1.CAP理论 2.简单redis的复制原理 3.redis replaction相关配置参数解析 4.配置星型模型主备模式 5.配置有向无欢模型主备模式 1.研磨redis的复制与集群概念 redis的复制与集群,刚开始我把两者闹了个误会,在不断深入学习过程中及时改正了. 简单区分一下. redis复制:可以理解为把re

centos6上实现双网卡绑定-主备模式

网卡绑定,将多块物理网卡绑定,对外呈现为一块逻辑网卡.这样做的好处一是增加带宽,二是提供冗余增加安全性.一般多用棱块网卡做绑定. 常见的网卡绑定模式有如下三种: mode0:轮询链路 mode1:主备链路 node3:广播链路 绑定后多块网卡对外提供一个ip地址个一个mac地址 本实验中以model1为例进行操作: 第1步: 在/etc/sysconfig/network-scripts/目录下创建绑定网卡文件,如 ifcfg-bond0 第2步; 编辑ifcfg-bond0 DEVICE=bo

Linux RHEL6.4绑定双网卡主备模式

1.查看服务器版本 lsb_release -a 2.然后进入网卡信息目录:cd /etc/sysconfig/network-scripts 3.接着我们要新建一个文件,文件名为ifcfg-bond0,可以通过三种方式来创建. (vi ifcfg-bond0; touch ifcfg-bond0; cp ifcfg-eth0 ifcfg-bond0)这里我选择最后一种 执行 cp ifcfg-eth0 ifcfg-bond0 后在 /etc/sysconfig/network-scripts目

测试redis+keepalived实现简单的主备切换

转自: 测试redis+keepalived实现简单的主备切换 - Try My Best 尽力而为 - ITeye技术网站http://raising.iteye.com/blog/2311757 keepalived是一个是集群管理中保证集群高可用的一个服务软件,它具备心跳检测的功能.运用在redis上,则是具备主备切换的控制功能. keepalived的主备切换方案的设计思想如下: 当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby: 当 

CentOS6.5和CentOS7.0双网卡主备模式配置

双网卡主备模式配置(bond0) 1     简述 通过双网卡设置主备模式,实现当一块网卡宕掉时,另外一块网卡可以自动顶替宕掉的网卡工作,保障网络正常访问. 2     实现 2.1.  查看网卡信息 执行ifconfig -a命令 2.2.  修改网卡配置文件 切换工作目录 cd /etc/sysconfig/network-scripts/ 修改网卡配置文件ifcfg-eth0 ,保证以下几项内容正确: TYPE=Ethernet BOOTPROTO=dhcp ONBOOT=yes MAST