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

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

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安装路径;

扫描二维码关注公众号,回复: 12402185 查看本文章

1.2、配置haproxy

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

# vim /usr/local/haproxy/haproxy.cfg
......
listen allmycat_service
bind 0.0.0.0:8096 #设置监听端口,即haproxy提供的web服务端口,和lvs的vip类似
log global #应用全局的日志设置
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www #通过http检测的方式进行服务的检测
balance roundrobin
server mycat_238 172.19.166.238:8066 check port 47700 inter 5s rise 2 fall 3
server mycat_239 172.19.166.239:8066 check port 47700 inter 5s rise 2 fall 3
timeout server 20000

listen allmycat_admin
bind 0.0.0.0:8097 #转发到mycat的9066端口,即mycat的管理控制台端口
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www #通过http检测的方式进行服务的检测
balance roundrobin
server mycat_238 172.19.166.238:9066 check port 47700 inter 5s rise 2 fall 3
server mycat_239 172.19.166.239:9066 check port 47700 inter 5s rise 2 fall 3
timeout 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 mycatstatus
service mycatstatus
{
flags = REUSE
socket_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/bash
mycat=`/mnt/benz4s/mycat/bin/mycat status |grep 'not running'| wc -l`
if [ "$mycat" = "0" ];
then
/bin/echo -e "HTTP/1.1 200 OK\r\n"
else
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
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/services
mycatstatus 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)关于主备节点的切换有两种模式:抢占模式下,主备通过比对权重确定路由组内的主备角色;非抢占模式,指定你是什么就是什么,即便备用节点的权重比主节点高。

3.1、Keepalived安装配置

# yum install keepalived
# find / -name 'keepalived.conf'
/etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_instance VI_1 {
	state MASTER         #172.19.166.239上改为 BACKUP
	interface ens0        #对外提供服务的网络接口,ifconfig
	virtual_router_id 100   #VRRP 组名,两个节点的设置必须一样,以指明各个节点属于同一 VRRP 组
	priority 150        #数值愈大,优先级越高,172.19.166.239上改为比150小的正整数
	advert_int 1       #同步通知间隔
	authentication {    #包含验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用的类型为 PASS,据说AH 使用时有问题
		auth_type PASS
		auth_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/bash
LOGFILE='/root/log/checkHaproxy.log'
date >> $LOGFILE
count=`ps aux | grep -v grep | grep /usr/local/haproxy/sbin/haproxy | wc -l`
if [ $count = 0 ];
then
		echo 'first check fail , restart haproxy !' >> $LOGFILE
		/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
else
		exit 0
fi

sleep 3

count=`ps aux | grep -v grep | grep /usr/local/haproxy/sbin/haproxy | wc -l`
if [ $count = 0 ];
then
		echo 'second check fail , stop keepalive service !' >> $LOGFILE
		service keepalived stop
else
		echo 'second check success , start keepalive service !' >> $LOGFILE
		keepalived=` ps aux | grep -v grep | grep /usr/sbin/keepalived | wc -l`
		if [ $count = 0 ];
		then
			service keepalived start
		fi
		exit 0
fi

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

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

猜你喜欢

转载自blog.csdn.net/wangpf2011/article/details/102666322