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

相关推荐

  • 搜索引擎-网络爬虫

     通用搜索引擎的处理对象是互联网网页,目前网页数量以百亿计,搜索引擎的网络爬虫能够高效地将海量的网页数据传下载到本地,在本地 形成互联网网页的镜像备份。它是搜索引擎系统中很关键也很基础的构件。 1. 网络爬虫本质就是浏览器http请求。      浏览器和网络爬虫是两种不同的网络客户端,都以相同的方式来获取网…

    Linux干货 2015-11-18
  • N25第一周作业

    第一周作业 一、计算机由硬件系统和软件系统两部分组成如下: 计算机硬件由CPU、内存、输入设备、输出设备组成。 1、中央处理器(CPU,Central Processing Unit)   CPU的功能主要是对输入指令的判断和运算;CPU包括运算器、控制器和寄存器三部分; (1)、运算器   执行各种算术和逻辑运算操作,计算机运行时,运算…

    Linux干货 2016-12-05
  • 第四周 文件操作

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 [root@localhost ~]# cp -a /etc/skel /home/tuser1 [root@localhost ~]# chmod -R go= /home/tuser1 [root@localhost ~]…

    Linux干货 2017-12-24
  • 计算机的组成及其功能

    1.计算机的组成及其功能 1.1计算机的硬件基本结构 从ENIAC到当前最先进的计算机都采用的是冯·诺依曼体系结构分别是:控制器,运算器,存储器,输入与输出设备 控制器:将指令逐条从存储器中取出,经译码分析后向全机发出相应         的操作控制信号作用于其他部件,使各部件有…

    Linux干货 2016-10-28
  • MySQL主从复制:半同步、异步

            MySQL主从复制:半同步、异步 前言 如何对MySQL进行扩展? MySQL Replication WorkFlow MySQL主从复制模式 实战演练 MySQL异步复制实现 MySQL半同步复制实现 实验中的思考 总结 mysql 前言 本篇我们介绍MySQ…

    Linux干货 2016-04-28
  • 7 文件系统权限(二):权限

    rwx, chmod, chgrp, chown, SUID, SGID, Sticky, chattr, lsattr, umask, ACL, setfacl, getfacl 权限 假设这样几个场景:     1) A用户在/testdir目录中创建了A.txt文件,B用户是否可以删除、修改、移动、重命…

    Linux干货 2016-08-19