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

相关推荐

  • 通过虚拟机制作RAID5

    制作RAID5的过程,包括制作RAID5的制作,增加和删除RAID

    2017-12-10
  • Linux-第一周作业

    1.计算机组成及其功能 计算机主要分为三部分: A、输入单元:包括键盘、鼠标、扫描仪、手写板、触摸屏等。 B、中央处理器(CPU):含有算术逻辑、控制、记忆等单元。 C、输出单元:例如屏幕、打印机等。 我们通过输入设备(如鼠标与键盘)来将一些数据输入到PC里面,然后再由PC的功能处理成为图表或文章等信息后,将结果传输到输出设备,如屏幕或打印机上面,这是计算机…

    Linux干货 2016-07-07
  • mysql进阶之MySQL查询

    一、MySQL多表查询和子查询 别名:as        表别名        字段别名        查询结果亦可命名别名   联结查询:事先将两张或多张表join,根…

    2016-11-18
  • 第四周博客作业

    趁着这几天有时间,先把第四周的作业写了,好在没有什么新的知识点考核。  1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel/ /home/tuser1 […

    Linux干货 2016-12-21
  • 源码编译安装dropbear

    tar -jxf dropbear-2013.58.tar.bz2 cd dropbear-2013.58 ./configure make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp” make PROGRAMS=”dropbear dbclie…

    Linux干货 2017-10-21
  • Linux基础知识(一)

     本文的主要内容是:  1.计算机基本组成及其功能  2.linux的发行版,以及他们之间的联系和区别  3.Linux的哲学思想  4.Linux的上的命令的使用格式  5.基础命令 ifconfig,echo,tty,startx,export,pwd,history,shutdown,powe…

    Linux干货 2016-09-17