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
下一篇 2017-07-07

相关推荐

  • 10 文本处理のsed狗带

    sed 介绍 工作原理 语法 参数选项:-n, -e, -r, -f, -i 地址定界 编辑命令 查找替换 空间操作 练习 参考文档 sed介绍 sed是一个(stream editor)。         1) :使用sed只能在命令行下输入编辑命令来编辑文…

    Linux干货 2016-08-12
  • Ansible(From Wikipedia)

           Ansible 是一个免费的用于配置和管理计算机的的软件平台。它集成了软件部署,ad hoc任务执行,和管理配置的功能。它依赖Python2.4之后的版本和通过SSH或者PowerShell管理节点。模块工作在JSON格式,输出信息可以被任何编程语言再次编写。系统管理员可以使用YAML…

    Linux干货 2015-11-18
  • 图解Man

    个人浅见 欢迎指正

    Linux干货 2016-10-18
  • lvs初探

    1,lvs是什么 lvs是Linux Virtual Server缩写,linux虚拟服务器,担任负载调度器(load balance)的角色,它不提供任何服务,用户请求到这里的时候,它是将客户需求转发至后端真正提供服务的服务,LVS分为两部分组成,ipvsadm管理集群服务的命令行工具,ipvs,是内核模块。由于ipvs采用基于ip负载均衡技术,所以具有很…

    Linux干货 2016-10-30
  • linux权限管理

          今天来讲讲linux里面权限的问题,在linux系统中,有这么几类权限,r,w,x,s,t这么几类权限,系统中为什么要有权限这个东西呢,linux一切皆文件,有些文件不想让某些人看到,那么这个时候就需要设置文件的访问的权限了,文件的拥有者一般都是有权力修改删除文件的,但拥有者以外的人未必就能删除修…

    Linux干货 2016-08-04
  • 高级文件系统管理2

    五、btrfs文件系统     技术预览版     Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle,2007, CoW     核心特性:     …

    Linux干货 2016-09-09