keepalived双主模型高可用Nginx服务

配置前提:
(1) 各节点时间必须同步;
            ntp, chrony
(2) 确保iptables及selinux不会成为阻碍;
(3) 各节点之间可通过主机名互相通信(对KA并非必须);
            建议使用/etc/hosts文件实现;

(4) 确保各节点的用于集群服务的接口支持MULTICAST通信;

keepalived双主模型高可用Nginx服务

            ip link set multicast on interface

配置语法:
    配置虚拟路由器:
    vrrp_instance <STRING> {
                                    ………
                                }
    专用参数:
            state MASTER|BACKUP:当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP;
            interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口;
            virtual_router_id VRID:当前虚拟路由器的惟一标识,范围是0-255;
            priority 100:当前主机在此虚拟路径器中的优先级;范围1-254;
            advert_int 1:vrrp通告的时间间隔;
     authentication {
            auth_type AH|PASS
            auth_pass <PASSWORD>(这里为任意的8个字符,各节点要保持一致

可以用“openssl rand -base64 7”生成

            }
    virtual_ipaddress {
        <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
            例如:192.168.200.17/24 dev eth1
                      192.168.200.18/24 dev eth2 label eth2:1
        }
    track_interface {
                eth0
                eth1
                …
            }
配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;
    nopreempt:定义工作模式为非抢占模式;
    preempt_delay 300:抢占式模式下,节点上线后触发新选举操作的延迟时长;

vrrp_script <SCRIPT_NAME> {
                    script “”
                    interval INT 每隔多长时间脚本执行一次
                    weight -INT 减去的优先级
                }
track_script {                               #跟踪监控脚本,放在vrrp_instance中
                SCRIPT_NAME_1
                SCRIPT_NAME_2
                            …
                }

双主模型示例:

vim /etc/keepalived/keepalived.conf

    节点一配置:

! Configuration File for keepalived
global_defs {
            notification_email {
            root@localhost
        }
notification_email_from keepalived@localhost
                smtp_server 127.0.0.1
                smtp_connect_timeout 30
                router_id node1
               vrrp_mcast_group4 224.0.100.19(组播地址自行定义)

    }
keepalived双主模型高可用Nginx服务

    节点二配置:

! Configuration File for keepalived
global_defs {
            notification_email {
            root@localhost
        }
notification_email_from keepalived@localhost
                smtp_server 127.0.0.1
                smtp_connect_timeout 30
                router_id node2
               vrrp_mcast_group4 224.0.100.19(组播地址自行定义,要与节点一一直)

    }

keepalived双主模型高可用Nginx服务

通过systemctl status keepalived.service查看结果

高可用:
        keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整;
分两步:(1) 先定义一个脚本,为MASTER时启动nginx,BACKUP时关闭nginx,对于双主模型,只需启动不能关闭,地址转移走后可以重启,但是不能关闭;(2) 调用此脚本;

在各个节点上定义通知脚本,放在vrrp_instance中:

    notify_master <STRING>|<QUOTED-STRING>:当前节点成为主节点时触发的脚本;
    notify_backup <STRING>|<QUOTED-STRING>:当前节点转为备节点时触发的脚本;
    notify_fault <STRING>|<QUOTED-STRING>:当前节点转为“失败”状态时触发的脚本;

    notify <STRING>|<QUOTED-STRING>:通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知;

通知脚本配置:

keepalived双主模型高可用Nginx服务

节点配置示例:

在配置文件中加入下图中的配置

vrrp_script chk_down {
        script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”
       ……….
}

vrrp_script chk_nginx {
        script “killall -0 nginx && exit 0 || exit 1” killall -0 测试能否杀掉进程 用来查询nginx进程是否存在

        interval 1
    ………

        fall 1 检查1次
        rise  1 若是之后检查是正常的则把权重加回去
}

配置示例:

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.0.100.19
}

vrrp_script chk_down {
        script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”
        weight -10
        interval 1
        fall 1
        rise 1
}
vrrp_script chk_ngx {
        script ” killall -0 nginx && exit 0 || exit 1″
        weight -10
        interval 1
        fall 1
        rise 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass tEtMBpfA
    }
    virtual_ipaddress {
        172.16.0.66/16 dev ens33 label ens33:0
    }
track_script {
                chk_down
                chk_nginx
   }
        notify_master “/etc/keepalived/notify.sh master”
        notify_backup “/etc/keepalived/notify.sh backup”
        notify_fault “/etc/keepalived/notify.sh fault”
}
vrrp_instance VI_2 {
    state  BACKUP
    interface ens33
    virtual_router_id 41
    priority 96
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass d/aiJhXT
    }
    virtual_ipaddress {
        172.16.0.67/16 dev ens33 label ens33:1
                }
    }
track_script {
                chk_down
                chk_nginx
   }
        notify_master “/etc/keepalived/notify.sh master”
        notify_backup “/etc/keepalived/notify.sh backup”
        notify_fault “/etc/keepalived/notify.sh fault”

}


原创文章,作者:Immortals、zcy,如若转载,请注明出处:http://www.178linux.com/79409

(0)
Immortals、zcyImmortals、zcy
上一篇 2017-07-06 20:12
下一篇 2017-07-07 01:56

相关推荐

  • 深入浅出Docker(一):Docker核心技术预览

    原文链接:http://www.infoq.com/cn/articles/docker-core-technology-preview/ 【编者按】Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上,基于Go语言开发并遵从Apache2.0协议开源。Docker提供了一种在安全、可重复的环境中自…

    2015-04-10
  • 第十四周作业

    系统的INPUT和OUTPUT默认策略为DROP; 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机; ]# iptables -P INPUT DROP #INPUT默认策略为DROP ]# iptables -P OUTPUT DROP…

    Linux干货 2017-04-12
  • 磁盘管理(1)

    1、磁盘结构(机械硬盘) (1)磁盘构成: 磁臂(机械手臂):连接并固定磁头 马达(电机):可以转动盘片,让磁臂上的磁头可以在盘片上读写数据 扇区:最小的物理存储单位,每个扇区为512bytes 磁头:可以读写数据 盘片:主要记录数据 柱面:将扇区组成一个圆就是柱面,柱面是分区的最小单位 (2)磁盘接口 并口:IDE  SCSI&nbsp…

    Linux干货 2016-08-30
  • 在VMware workstations中安装CentOS-7-x86_64-Everything-1611.ISO

      对于最近在Linux学习的过程中,许多同学对CentOS系统的详细配置还不熟悉,于是我编写此详细步骤供大家参考。 工具: VMware workstations; CentOS-7-x86_64-Everything-1611.iso; 准备工作:  1、先要下载一个系统镜像centOS-7-x86_64-Everythin…

    2017-07-11
  • linux命令 kill命令详则

    kill命令 kill用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息(默认)为SIGTERM(15),可经指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。 语法 kill(选项)(参数) 选项 -a:当处理当前进程时,不限制命令名和进程号的对应关系; &…

    2017-08-21
  • Apache-httpd工作模型

    httpd   httpd是由apache软件基金会开发的一款著名的web服务器软件。由于其开放源代码,并且拥有跨平台、功能强大、安全稳定等特性,而被广泛使用。早期httpd是在修修补补的基础上成长起来的,所以早期也叫作a pachey server,由于开发httpd的组织叫作apache,因此httpd也被称作apache。httpd有三个长线维护版本,…

    Linux干货 2017-02-15