zoukankan      html  css  js  c++  java
  • 7-nginx-keepalived配置主从双击热备

    nginx的高可用解决方案

    keepalive 是 VRRP 协议的完美实现, 通过vip(虚拟ip)来实现主从双击热备, 自动切换的高可用方案, nginx的主从是通过keepalived实现的

    通过权重进行主从切换的

    keepalived 是为ipvs开发的, 会自动执行健康检查, 如果需要给其他服务提供高可用, 需要舍弃健康检查, 并自己手写检查脚本添加到vrrp中

    通常部署在2台服务器上, 一主一备, 一旦master检测出问题, 将自己切换为backup状态, 并通知另一个为master, 通过切换VIP实现

    http://www.keepalived.org

    1, 安装keepalived, 多台nginx的服务器上分别安装

    yum install keepalived

    也可以通过本地安装包进行安装

    最新版本 Version 2.0.6

    $ wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz
    $ tar -zxvf keepalived-1.2.15.tar.gz
    
    $ cd keepalived
    -1.2.15 $ ./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64 $ make && make install $ ln -s /usr/local/sbin/keepalived /sbin/

    最后创建软连接是为了, service keepalived start 进行启动

    配置开机启动: 目录可能不对, 在1.2.15的基础上直接修改的, 没有试验

    cp /usr/local/sbin/keepalibed/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
    cp /usr/local/src/keepalived/etc/sysconfig/keepalived /etc/sysconfig
    dhmod +x /etc/init.d/keepalived
    chkconfig --add keepalived
    chkconfig keepalived on

    2, 修改keepavlied配置

     修改keepalived.conf

     主机: 

    # 全局配置
    global_defs { notification_email { test@
    163.com  # 发送的邮箱 } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_MASTER } vrrp_script chk_http_port { script "/home/keepalived/check_nginx_pid.sh" interval 2 #(检测脚本执行的间隔) weight 2      # 权重 }
    # 虚拟冗余luyou vrrp_instance VI_1 { #state MASTER state BACKUP nopreempt #设置非抢占模式时,修改“state MASTER”为“state BACKUP”,添加“nopreempt“
    interface bond0  # 网卡名 virtual_router_id 51  # 在一个网络中唯一 priority 100      # 优先级 advert_int 1      # 出问题, 优先级减少 authentication { auth_type PASS  # 心跳设置 auth_pass 1111 } track_script { chk_http_port #(调用检测脚本) } virtual_ipaddress {  # 虚拟ip地址 192.168.208.126    # 多个虚拟ip换行即可 } }

    从机配置: 

    global_defs {
       notification_email {
         test@163.com
       }
       notification_email_from keepalived@localhost 
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_BACKUP
    }
    vrrp_script chk_http_port {
    script "/home/keepalived/check_nginx_pid.sh"
    interval 2                           #(检测脚本执行的间隔)
    weight 2    # 权重, 从机可以小一点
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface bond0
        virtual_router_id 51
        priority 66
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
    }
    track_script {
    chk_http_port            #(调用检测脚本)
    }
        virtual_ipaddress {
            192.168.208.126
        }
    }

    主机和从机的配置值在权重上有所差别, 别的都一样, 另外看了一些博客好多配置的权重都一样, 没有测试

    3, vim /etc/keepalived/keepalived.conf

    或者拷贝过来: 

    cp $KEEP_HOME/etc/keepalived/keepavlied.conf /etc/keepalived/
    #!/bin/bash
    if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
    then
     /usr/local/nginx/sbin/nginx
     sleep 5
     if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
     then
     killall keepalived
     fi
    fi

    4, 绑定虚拟ip, 就可以了

    由于时间太久, 这次做补充, 没有找到原始的文档!!!!! 根据自己的vip进行修改

    https://blog.csdn.net/huoyuanshen/article/details/68483188

    ifconfig eth0:0 166.111.69.100 netmask 255.255.255.0 up

    keepalive 相关参数说明: 

     ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         admin@lvtao.net             #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
       }
       notification_email_from  admin@lvtao.net        #设置邮件的发送地址
       smtp_server 127.0.0.1                                #设置smtp server地址
       smtp_connect_timeout 30                              #设置连接smtp server的超时时间
       router_id LVS_DEVEL                                  #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
    }
    
    vrrp_instance VI_1 {
        state MASTER              #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
        interface eth0            #指定HA监测网络的接口
        virtual_router_id 51      #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
        priority 100              #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
        advert_int 1              #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {          #设置验证类型和密码
            auth_type PASS        #设置验证类型,主要有PASS和AH两种
            auth_pass 1111        #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
        }
        virtual_ipaddress {       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
            10.0.0.148
        }
    }
    
    virtual_server 10.0.0.148 80 {      #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
        delay_loop 6                    #设置运行情况检查时间,单位是秒
        lb_algo rr                      #设置负载调度算法,这里设置为rr,即轮询算法
        lb_kind DR                      #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
        persistence_timeout 50          #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
                                        #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
                                        #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作,
                                        #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
        protocol TCP                    #指定转发协议类型,有TCP和UDP两种
    
        real_server 10.0.0.137 80 {     #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
            weight 3                    #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
                                        #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
            TCP_CHECK {                 #realserver的状态检测设置部分,单位是秒
                connect_timeout 10      #表示3秒无响应超时
                nb_get_retry 3          #表示重试次数
                delay_before_retry 3    #表示重试间隔
                connect_port 80
            }
        }
        real_server 10.0.0.139 80 {
            weight 3
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }
  • 相关阅读:
    Django model 常用方法记录
    程序员的注意事项
    硬件天使的使用
    你是否应该成为一名全栈工程师?
    web技术
    6个处理上面代码异味的重构方法(手法)
    git 命定
    ie console报错
    apache 省略index.php访问
    myisam和innodb的区别
  • 原文地址:https://www.cnblogs.com/wenbronk/p/6597286.html
Copyright © 2011-2022 走看看