了解RabbitMQ+haProxy+keepalived的使用-php教程

资源魔 50 0

媒介

若有谬误,随时指正,十分感激!

为何要应用haProxy+keepalived呢?

为了AMQP效劳的稳固性

起首先说下为何要应用haProxy。

我正在两台效劳器上建了AMQP集群,辨别是10.71.13.24以及10.71.13.25,当前简称为2四、25效劳器。假定AMQP客户端间接衔接24或25。假如24|25效劳器宕机了,那末衔接24|25的AMQP客户端就无奈工作,生产者也无奈进行失常生产(如下以24举例代表24|25单机的状况)。再者单机衔接可能造成单机负载太高,而其余效劳器闲暇的状态。此时则能够经过haProxy完成负载平衡。

正在内陆的设置装备摆设如:

global
    #log 127.0.0.1 local0 #[日记输入设置装备摆设,一切日记都记载正在本机,经过local0输入]
    log 127.0.0.1 local1 notice #界说haproxy 日记级别[error warringinfo debug]      
    daemon #当前台方式运转harpoxy
    nbproc 2 #设置过程数目
    maxconn 4096 #默许最年夜衔接数,需思考ulimit-n限度
    #user haproxy #运转haproxy的用户
    pidfile /var/run/haproxy.pid #haproxy 过程PID文件
    #group www #运转haproxy的用户所正在的组
    #ulimit-n 65535 #ulimit 的数目限度
    #chroot /usr/share/haproxy #chroot运转门路
    #debug #haproxy 调试级别,倡议只正在开启单过程的时分调试
    #quiet

########默许设置装备摆设############
defaults
    log global
    log 127.0.0.1 local0 info
    mode http #默许的模式mode { tcp|http|health },tcp是4层,http是7层,health只会前往OK
    option httplog #日记种别,采纳httplog
    option dontlognull #没有记载衰弱反省日记信息
    retries 3 #两次衔接失败就以为是效劳器不成用,也能够经过前面设置
    option forwardfor #假如后端效劳器需求取得客户端实在ip需求设置装备摆设的参数,能够从Http Header中取得客户端ip
    option httpclose #每一次申请终了后自动封闭http通道,haproxy没有支持keep-alive,只能模仿这类模式的完成
    option redispatch #当serverId对应的效劳器挂掉后,强迫定向到其余衰弱的效劳器,当前将没有支持
    option abortonclose #当效劳器负载很高的时分,主动完结掉以后行列步队解决比拟久的链接
    maxconn 4096 #默许的最年夜衔接数
    #timeout http-keep-alive10s #默许耐久衔接超不时间
    #timeout http-request 10s #默许http申请超不时间
    #timeout queue 1m #默许行列步队超不时间
    balance roundrobin #设置默许负载平衡形式,轮询形式
    #balance source #设置默许负载平衡形式,相似于nginx的ip_hash
    #balnace leastconn #设置默许负载平衡形式,最小衔接数
    timeout connect 5s #衔接超时
    timeout client 120s # 客户端超时
    timeout server 120s #效劳端超时
    timeout check 2000 #心跳检测超时ms
#绑定设置装备摆设
listen rabbitmq_cluster
    bind 0.0.0.0:5678
    mode http #设置装备摆设TCP模式
    balance roundrobin
    #RabbitMQ集群节点设置装备摆设
    server rmq_node_13_24 10.71.13.24:5672 check inter 5000 rise 2 fall 3 weight 1
    server rmq_node_13_25 10.71.13.25:5672 check inter 5000 rise 2 fall 3 weight 1
    # server <name> <ip>:<port> check inter <value> rise <value> fall <value> weight <value>
    # check inter <value>:每一隔5000ms检测AMQP效劳能否可用
    # rise <value>:检测到2次可用则可被确认再次可用。
    # fall <value>:检测到3次无奈衔接则以为效劳不成用
    # weight <value>:权重

设置装备摆设完haProxy.cfg之后,启动haProxy:sudo /etc/init.d/haproxy start。(haproxy启动剧本见最初)
设置装备摆设解析:以前衔接的socket是10.71.13.24:5672,如今衔接的socket是10.71.13.24:5678。正在25也能够按24的设置装备摆设COPY一份,因而无论衔接的是哪一个效劳器的5678端口终极都能完成负载平衡。而后仍是有一个成绩不处理,假如某个效劳器宕机了怎样办?这就是为何要引入keepalived了。

再谈keepalived的应用

对于keepalived的原理我没有熟,也就不外多的去解读。今朝我只是想要处理我碰着的成绩。为理解决AMQP终极可以稳固效劳,于是请求了一个虚构IP-VIP:10.71.13.254。经过这个VIP则能够开端设置装备摆设keepalived.conf了。

! Configuration File for keepalived

global_defs {
   router_id Node_Master  # 路由ID,主备的不克不及相反}vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 5
    weight 2}vrrp_instance VI_1 {
    state MASTER  #keepalived的脚色。Master示意主效劳器,从效劳器设置为BACKUP
    interface eth1 #指定检测网卡,设置装备摆设成eth0之后我无奈衔接到AMQP效劳
    virtual_router_id 1
    priority 100 #优先级,BACKUP机械上的优先级至多小于50
    advert_int 1 #设置主备之间的检测工夫,单元为s
    authentication {
        auth_type PASS
        auth_pass root123    }

    track_script {
        chk_haproxy    }

    virtual_ipaddress { #VIP地点,能够设置多个        10.71.13.254
    }}virtual_server 10.71.13.254 5672 { # 设置虚构效劳器
    delay_loop 6 #设置运转状况反省工夫,单元s
    lb_algo wrr #设置负载调剂算法,共有rr、wrr、lc、wlc、lblc、lblcr、dh、sh 这8种
    lb_kind DR #设置LVS完成的负载平衡机制形式 VS/DR
    persistence_timeout 50 #指定正在肯定工夫内来自同一IP的衔接将会被转发到同一RealServer中
    protocol TCP

    # 这个real_server 即LVS的三年夜局部之一的RealServer,这里特指RabbitMQ效劳
    real_server 10.71.13.24 5678 { #设置装备摆设效劳节点
        weight 1  #设置装备摆设权重        TCP_CHECK {
            nb_get retry 3
            connect_timeout 3
            delay_before_retry 3
            connect_port 5672
        }
    }

    real_server 10.71.13.25 5678 {
        weight 1
        TCP_CHECK {
            nb_get retry 3
            connect_timeout 3
            delay_before_retry 3
            connect_port 5672
        }
    }
  }virtual_server 10.71.13.254 15672 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 10.71.13.24 15672 {
        weight 1
        TCP_CHECK {
            nb_get retry 3
            connect_timeout 3
            delay_before_retry 3
            connect_port 15672
        }
    }
    real_server 10.71.13.25 15672 {
        weight 1
        TCP_CHECK {
            nb_get retry 3
            connect_timeout 3
            delay_before_retry 3
            connect_port 15672
        }
    }}

check_haproxy.sh剧本的目的是为了避免haProxy效劳曾经不成用而keepalived可用的状况,该剧本会测验考试从新启动haProxy,假如启动不可功则封闭keepalived。这样keepalived的VIP就会漂移到BACKUP备份机,从而持续保障效劳。剧本的设置装备摆设以下:

#! /bin/bashif [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
    sudo service haproxy restartfisleep 2if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
    sudo service keepalived stopfi

正在25效劳器上的设置装备摆设以及24的效劳器根本分歧,留意修正属性:route_id、state、priority。
而后启动keepalived:sudo /etc/init.d/keepalived start。(启动剧本见最初)

启动完keepalived之后,咱们再次衔接AMQP效劳就变为了:10.71.13.254:5762,由于master是24效劳器,以是实际实在呼应的效劳是10.71.13.24:5678以及10.71.13.25:5678。由于采纳的是加权轮询且权重都是1,24以及25会轮番呼应VIP的申请。正在haProxy中监听了5678端口,而且采纳了轮询机制散发到24以及25的5672端口。会发现keepalived的以及haProxy都应用了轮询机制,能不克不及把此中的某一处去掉呢?添加了VIP之后假如master宕机之后,就会选举一个从机成为主机,接管原主机的效劳。当人工修复好了原主机之后,从机会把效劳从新还给主机去接管,本人复原成原来的状态。

haProxy以及keepalived的启动剧本

haProxy的启动剧本

#! /bin/shset -ePATH=/sbin:/bin:/usr/sbin:/usr/binPROGDIR=/opt/haproxy-1.7.11PROGNAME=haproxyDAEMON=$PROGDIR/$PROGNAMECONFIG=$PROGDIR/conf/$PROGNAME.cfg
# PIDFILE=$PROGDIR/conf/$PROGNAME.pidPIDFILE=/var/run/haproxy.pidDESC="HAProxy daemon"SCRIPTNAME=/etc/init.d/$PROGNAME# Gracefully exit if the package has been removed.test -x $DAEMON || exit 0start(){
       echo -e "Starting $DESC: $PROGNAME\n"
       $DAEMON -f $CONFIG
       echo "."}stop(){
       echo -e "Stopping $DESC: $PROGNAME\n"
       haproxy_pid="$(cat $PIDFILE)"
       kill $haproxy_pid
       echo "."}restart(){
       echo -e "Restarting $DESC: $PROGNAME\n"
       $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
       echo "."}case "$1" in
 start)
       start       ;;
 stop)
       stop       ;;
 restart)
       restart       ;;
 *)
       echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
       exit 1
       ;;esac

exit 0

keepalived启动剧本:

#!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79# description: Start and stop Keepalived

# Source function library. /etc/rc.d/init.d/functions

# Source configuration file (we set KEEPALIVED_OPTIONS there). /etc/sysconfig/keepalivedRETVAL=0prog="keepalived"start() {
    echo -n $"Starting $prog: "
    daemon keepalived ${KEEPALIVED_OPTIONS}
    RETVAL=$?
    echo    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog}stop() {
    echo -n $"Stopping $prog: "
    killproc keepalived    RETVAL=$?
    echo    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog}reload() {
    echo -n $"Reloading $prog: "
    killproc keepalived -1
    RETVAL=$?
    echo}# See how we were called.case "$1" in
    start)
        start        ;;
    stop)
        stop        ;;
    reload)
        reload        ;;
    restart)
        stop
        start        ;;
    condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
        fi        ;;
    status)
        status keepalived        RETVAL=$?
        ;;
    *)
        echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
        RETVAL=1esac

exit $RETVAL

相干学习保举:php编程(视频)

以上就是理解RabbitMQ+haProxy+keepalived的应用的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 RabbitMQ haProxy keepalived

抱歉,评论功能暂时关闭!