媒介
若有谬误,随时指正,十分感激!
为何要应用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
抱歉,评论功能暂时关闭!