haproxy keepalived_数据库性能优化方案(2)--keepalived、haproxy、mycat的高可用

本文的前提是Mycat已经安装并配置完毕,Mycat已实现对MySQL的读写分离、主从切换,其对应服务器IP分布为172.19.166.238和172.19.166.239。在此基础上,本文继续讲解Keepalived+Haproxy+Mycat的高可用方案,利用Haproxy实现Mycat集群负载均衡,Keepalived保证Haproxy高可用。

a29e8c0d7f54c5462740b9076455fcda.png

Haproxy作为专门的负载均衡软件,可以工作在四层和七层,相比Nginx而言,HAProxy负载均衡策略更多,负载均衡速度更出色。

所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。四层负载均衡主要是通过分析IP层及TCP/UDP层的流量实现的基于IP+端口的负载均衡。七层负载均衡位于OSI的最高层,主要考虑应用层的特征,可根据七层的URL、浏览器类别等来决定怎么进行负载均衡。

1、Haproxy安装配置

1.1、解压安装haproxy

解压haproxy-1.8.12.tar.gz

# cd /mnt/benz4s# tar -zxvf haproxy-1.8.12.tar.gz

编译安装,安装目录安装在/usr/local/haproxy下

# cd haproxy-1.8.12# make TARGET=linux26 PREFIX=/usr/local/haproxy ARCH=x86_64 # make install PREFIX=/usr/local/haproxy

参数说明

TARGET=linux26 #内核版本,使用uname -r查看内核,linux2.6以上的版本,TARGET=linux26;

ARCH=x86_64 #系统位数;

PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径;

1.2、配置haproxy

创建配置文件(更详细配置文件参数附录部分)

# vim /usr/local/haproxy/haproxy.cfg......listen allmycat_servicebind 0.0.0.0:8096 #设置监听端口,即haproxy提供的web服务端口,和lvs的vip类似log global #应用全局的日志设置mode tcpoption tcplogoption httpchk OPTIONS * HTTP/1.1Host: www #通过http检测的方式进行服务的检测balance roundrobinserver mycat_238 172.19.166.238:8066 check port 47700 inter 5s rise 2 fall 3server mycat_239 172.19.166.239:8066 check port 47700 inter 5s rise 2 fall 3timeout server 20000 listen allmycat_adminbind 0.0.0.0:8097 #转发到mycat的9066端口,即mycat的管理控制台端口mode tcpoption tcplogoption httpchk OPTIONS * HTTP/1.1Host: www #通过http检测的方式进行服务的检测balance roundrobinserver mycat_238 172.19.166.238:9066 check port 47700 inter 5s rise 2 fall 3server mycat_239 172.19.166.239:9066 check port 47700 inter 5s rise 2 fall 3timeout server 20000......

1.3、配置haproxy日志输出

Haproxy采用rsyslog的方式进行日志配置,通过rpm -qa|grep rsyslog 命令判断有没有安装,如果没有安装通过yum自行安装即可。

找到rsyslog的配置文件

# find / -name 'rsyslog.conf'/usr/lib/dracut/modules.d/98syslog/rsyslog.conf/etc/rsyslog.conf# vim /etc/rsyslog.conf 将下面两行注释放开#$ModLoad imudp #$UDPServerRun 514找到Save boot messages also to boot.log并在这一行下面加入local2.* /var/log/haproxy.log重启rsyslog# service rsyslog restart

1.4、启动关闭haproxy

启动haproxy

# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg

关闭haproxy

# pkill haproxy 或 killall haproxy

2、xinetd安装配置

通过xinetd提供的http服务mycatstatus来让Haproxy进行Mycat服务检测,即检测Mycat存活状态。Haproxy通过调用该http服务获取Mycat运行状态。

2.1、安装xinetd

在Mycat服务器上安装xinetd,安装命令yum install xinetd*

2.2、服务配置

从xinetd的配置文件/etc/xinetd.conf 找到 includedir /etc/xinetd.d,进入该目录cd /etc/xinetd.d创建服务脚本。

# cd /etc/xinetd.d# vim mycatstatusservice mycatstatus{flags = REUSEsocket_type = stream # socket连接方式port = 47700 # 服务监听的端口wait = no # 是否并发user = root # 以什么用户进行启动server =/usr/local/bin/mycatstatus # 被托管服务的启动脚本log_on_failure += USERID # 设置失败时,UID添加到系统登记表log_type = FILE /var/log/telnet.log #自定义日志文件路径 disable = no #是否禁用托管服务,no表示开启托管服务}

xinetd服务mycat_status的监听端口为47700,执行脚本为/usr/local/bin/mycatstatus,当xinetd启动时,默认对外提供了一个mycatstatus服务。

2.3、创建托管服务启动脚本

# cd /usr/local/bin# vim /usr/local/bin/mycatstatus#!/bin/bashmycat=`/mnt/benz4s/mycat/bin/mycat status |grep 'not running'| wc -l`if [ "$mycat" = "0" ];then/bin/echo -e "HTTP/1.1 200 OK"else/bin/echo -e "HTTP/1.1 503 Service Unavailable"fi# chmod +x /usr/local/bin/mycatstatus #赋予执行权限# sh /usr/local/bin/mycatstatus #验证脚本的正确性

该脚本检测Mycat服务是否存活,当Mycat正在运行时,向前端返回HTTP/1.1 200 OK,表明Mycat运行正常,否则返回HTTP/1.1 503 Service Unavailable,Mycat服务异常。

2.4、添加mycatstatus服务

# vim /etc/servicesmycatstatus 47700/tcp # mycatstatus# service xinetd restart #重启xinetd服务

3、Keepalived+Haproxy的高可用方案

如何保证Haproxy提供稳定服务,不出现单点故障情况,这里采用Keepalived+Haproxy的高可用方案。Keepalived基于VRRP协议实现,VRRP(Virtual Router Redundancy Protocol)即虚拟路由冗余协议,VRRP通过将一组路由器组成一个虚拟路由器(生成一个虚拟IP即VIP),这组路由器称之为备份组,一般会从备份组中选举一个节点作为master路由器,其余为backup路由器。VRRP的工作过程如下:

(1)备份组在启用时会选举优先级高的路由节点作为主路由,优先级低的作为备用路由;

(2)主路由会发送VRRP通告报文给备用节点,报告自己是活着的,备份路由器会开启定时器接收通告报文。VRRP发送通告报文一般是通过组播模式进行;

(3)关于主备节点的切换有两种模式:抢占模式下,主备通过比对权重确定路由组内的主备角色;非抢占模式,指定你是什么就是什么,即便备用节点的权重比主节点高。

d553e8cf8c6b5d0a83e2e082fa4d6405.png

3.1、Keepalived安装配置

# yum install keepalived# find / -name 'keepalived.conf'/etc/keepalived/keepalived.conf# vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedvrrp_instance VI_1 {state MASTER #172.19.166.239上改为 BACKUPinterface ens0 #对外提供服务的网络接口,ifconfigvirtual_router_id 100 #VRRP 组名,两个节点的设置必须一样,以指明各个节点属于同一 VRRP 组priority 150 #数值愈大,优先级越高,172.19.166.239上改为比150小的正整数advert_int 1 #同步通知间隔authentication { #包含验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用的类型为 PASS,据说AH 使用时有问题auth_type PASSauth_pass 1111}virtual_ipaddress { #vip 地址 ens0 通过ifconfig获取172.19.166.100 dev ens0 scope global}}启动keepalived# service keepalived start

3.2、crontab定时任务

通过上面的配置,我们可以将前端请求172.19.166.100转到优先级高的物理机172.19.166.238。但此时还没有监听haproxy的服务实现VIP虚拟IP漂移,即监听haproxy服务来进行vip的降级。本文将采用一种定时任务(linux自带的crontab)的方式来实现VIP降级操作。

(1)创建checkhaproxy.sh 并编辑内容

# vim /usr/local/bin/checkhaproxy.sh#!/bin/bashLOGFILE='/root/log/checkHaproxy.log'date >> $LOGFILEcount=`ps aux | grep -v grep | grep /usr/local/haproxy/sbin/haproxy | wc -l`if [ $count = 0 ];thenecho 'first check fail , restart haproxy !' >> $LOGFILE/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfgelseexit 0fi sleep 3 count=`ps aux | grep -v grep | grep /usr/local/haproxy/sbin/haproxy | wc -l`if [ $count = 0 ];thenecho 'second check fail , stop keepalive service !' >> $LOGFILEservice keepalived stopelseecho 'second check success , start keepalive service !' >> $LOGFILEkeepalived=` ps aux | grep -v grep | grep /usr/sbin/keepalived | wc -l`if [ $count = 0 ];thenservice keepalived startfiexit 0fi

(2)执行 crontab -e 编辑定时任务 每一分钟检测haproxy服务存活,如果服务启动不了,停掉keepalived服务,VIP即转发至backup节点(172.19.166.239)的机器

* * * * * sh /usr/local/bin/checkhaproxy.sh

附件

1、Haproxy配置文件(/usr/local/haproxy/haproxy.cfg)

globallog 127.0.0.1 local0 info #[err warning info debug]定义haproxy 日志级别pidfile /var/run/haproxy.pid #haproxy的进程PID文件maxconn 4000daemon #后台方式运行defaultslog global #应用全局的日志设置mode tcp #默认的模式mode{tcp|http|health }option dontlognull #不记录健康检查日志信息retries 3 #两次连接失败就认为是服务器不可用,也可以通过后面设置option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器maxconn 2000 #默认的最大连接数timeout connect 5000ms #连接超时timeout client 30000ms #客户端超时timeout server 30000ms #服务器超时 #haproxy带有监控功能,而且配置简单,直接在主配置文件中加入一下配置即可listen admin_statusbind 0.0.0.0:1080stats uri /admin #haproxy自带的管理页面通过http://ip:port/admin访问stats auth admin:admin #管理页面的用户名和密码stats hide-version #隐藏监控页面的HAproxy版本信息mode httpoption httplog listen allmycat_servicebind 0.0.0.0:8096 #设置监听端口,即haproxy提供的web服务端口,和lvs的vip类似log global #应用全局的日志设置mode tcpoption tcplogoption httpchk OPTIONS * HTTP/1.1Host: www #通过http检测的方式进行服务的检测balance roundrobinserver mycat_238 172.19.166.238:8066 check port 47700 inter 5s rise 2 fall 3server mycat_239 172.19.166.239:8066 check port 47700 inter 5s rise 2 fall 3timeout server 20000 listen allmycat_adminbind 0.0.0.0:8097 #转发到mycat的9066端口,即mycat的管理控制台端口mode tcpoption tcplogoption httpchk OPTIONS * HTTP/1.1Host: www #通过http检测的方式进行服务的检测balance roundrobin#定义后端server[ms1.srv1],请求定向到该server时会在响应中写入cookie值[ms1.srv1]#针对此server的maxconn设置为300#应用默认健康检查策略,健康检查间隔和超时时间为2000ms,两次成功视为节点UP,三次失败视为节点DOWN,这里haproxy的check借用了超级守护进程xinetd,下节有较详细的说明。server mycat_238 172.19.166.238:9066 check port 47700 inter 5s rise 2 fall 3server mycat_239 172.19.166.239:9066 check port 47700 inter 5s rise 2 fall 3timeout server 20000

global配置段,用于设定全局配置参数; defaults配置段用于为所有其它配置段提供默认参数,这配置默认配置参数可由下一个“defaults”所重新设定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值