MyCat 之 高可用集群搭建

 如何对我们的数据层做一个高可用?我想这应该是我们实际开发中面对服务器的扩容经常会遇到,看下面这张架构图,就是一个典型的对myCat做一个高可用的架构。至于mysql层面,我们可以做一个主从,当然需要使用专门的中间件进行管理,例如MHA的使用,这里不是我们今天的重点。我们需要说的是Mycat高可用的架构设计

 

架构设计简述:

首先我们会有两个【MyCat】的服务节点,然后中间通过【zookeeper】同步多个【MyCat】节点的配置信息,起到一个注册中心中间件的作用。然后我们多个【MyCat】之间的请求又该是如何做到负载均衡的呢?这个时候就需要引入【Haproxy】,【Haproxy】就是一个代理层,主要作用就是对我们的【MyCat】做一个负载均衡,并且监控所有【MyCat】节点的可用性,当有一个节点不可用,【Haproxy】便将其剔除集群。当然为了保证我们【Haproxy】的高可用性,上面我们还引用了【keepalived】组件,对我们的【Haproxy】集群做一个监控,并且提供一个虚拟IP来访问Haproxy,让Haproxy达到高可用的一个目的。以上便是我们MyCat的一个高可用集群设计,如何搭建?下面我们来一步步实现。

 

简单看一下我们四个服务器所有配置信息

 

一.Zookeeper集群搭建

1)首先需要搭建我们的Zookeeper集群,由上图得知需要在节点1,节点2,节点3上分别安装zookeeper,并建立起这至少三个节点的集群,下载zookeeper

wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

2)拷贝到其他两台节点上

scp zookeeper-3.4.14.tar.gz root@192.168.124.39:/root

scp zookeeper-3.4.14.tar.gz root@192.168.124.40:/root

3)三台服务器分别解压我们下载好的压缩包,并移动到我们的/use/local目录下,改名为zookeeper

tar -zxvf zookeeper-3.4.14.tar.gz

mv zookeeper-3.4.14 /usr/local/

mv zookeeper-3.4.14/ zookeeper

4)分别进去我们的/zookeeper/conf目录下,将zookeeper默认的配置文件名字做一个修改

cd /usr/local/zookeeper/conf

mv zoo_sample.cfg zoo.cfg

5)在zookeeper的目录下创建一个data目录用来存放zookeeper的数据,并给每一个节点生成一个标识

节点1(192.168.124.38)

mkdir data

echo 0 > data/myid

节点2(192.168.124.39)

mkdir data

echo 1 > data/myid

节点3(192.168.124.40)

mkdir data

echo 2 > data/myid

 6)修改我们zookeeper的配置文件,做一个集群的配置

vim zoo.cfg

#指明我们刚才新建的data目录地址
dataDir=/usr/local/zookeeper/data
#配置我们三个节点集群
server.0=192.168.124.38:2888:3888
server.1=192.168.124.39:2888:3888
server.2=192.168.124.40:2888:3888

 

7)分别启动我们三个节点的zookeeper

bin/zkServer.sh start

然后分别查看一下我们zookeeper是否启动成功

bin/zkServer.sh status

 

至此我们的zookeeper集群搭建完毕

 

二)初始化MyCat数据到Zookeeper集群中

1)进入我们MyCat的安装目录

cd /usr/local/mycat/conf

 2)将我们之前章节讲的(垂直分库,水平分库,ER分片)用到的配置文件拷贝到zkconf目录下

cp schema.xml server.xml rule.xml sequence_conf.properties zkconf/

会提示是否覆盖,直接覆盖 

3)然后执行我们mycat安装目录下bin目录下的【init_zk_data.sh】脚本

bin/init_zk_data.sh

这里需要注意的是,可能在执行的时候会报这个错误

我们可以打开文件

vim init_zk_data.sh

然后【:set ff】,若结果显示fileformat=dos,是文件格式的问题

解决:

vim init_zk_data.sh 
:set fileformat=unix

然后保存退出即可 

如下图标识初始化完成

4)登陆zookeeper客户端,查看一下我们mycat的信息是否已经同步到zookeeper中

cd usr/local/zookeeper/ 

bin/zkCli.sh

 查看我们的【schema】

ls /mycat/mycat-cluster-1/schema

查看我们的【dataHost】节点内容

 get /mycat/mycat-cluster-1/schema/dataHost

可以看到我们的配置信息已经同步过来了

 

三)配置MyCat支持ZK启动

因为我们这里的zookeeper是用来同步多个mycat之间的配置信息的,所以在我们的节点4上还需要安装一台MyCat。具体安装过程这里不再重复,详细可以看【MyCat的安装

1)修改我们节点1中的【myid.properties】配置文件,这个文件就是启动MyCat支持Zookeeper的一个配置文件

#是否启用zk
loadZk=true
#zk的集群
zkURL=192.168.124.38:2181,192.168.124.39:2181,192.168.124.39:2181
#集群名称
clusterId=mycat-cluster-1
#mycat节点名称
myid=mycat_01
#mycat的节点数
clusterSize=2
#mycat配置的节点
clusterNodes=mycat_01,mycat_04
type=server
boosterDataHosts=dataHost1

同样,我们的节点4中对应的文件也做相同的配置

loadZk=true
zkURL=192.168.124.38:2181,192.168.124.39:2181,192.168.124.39:2181
clusterId=mycat-cluster-1
myid=mycat_04
clusterSize=2
clusterNodes=mycat_01,mycat_04
type=server
boosterDataHosts=dataHost1

节点4因为我们是新安装的mycat,所有配置都没有做过任何改动。但是当我们分别启动节点1和节点4的MyCat之后,发现节点4新安装的mycat的所有配置文件信息已经有了

证明我们的zookeeper集群已经将mycat的所有信息进行了节点之间的同步,这一步算是完成。

 

四)Haproxy的安装配置对MyCat的负载均衡支持

1)首先分别在我们的节点1和节点4安装我们的Haproxy(根据我们的架构图,我们是需要在两台机器上进行安装的部署的,基本都一致,下面演示只演示一台的安装部署)

yum install haproxy -y

显示已经安装完毕

2)对我们的Haproxy的配置文件做一下配置

vim /etc/haproxy/haproxy.cfg

listen  admin_status
      bind 0.0.0.0:48800 ##VIP
      stats uri /admin-status  ##统计页面
      stats auth  admin:admin
	  
listen    allmycat_service
      bind 0.0.0.0:8096 ##转发到mycat的应用端口,即mycat的服务端口
      mode tcp
      option tcplog
      option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
      balance roundrobin
      server  mycat_01 192.168.124.38:8066 check port 48700 inter 5s rise 2 fall 3
      server  mycat_04 192.168.124.41:8066 check port 48700 inter 5s rise 2 fall 3
		
listen    allmycat_admin
      bind 0.0.0.0:8097 ##转发到mycat的管理端口,及mycat的管理控制台端口
      mode tcp
      option tcplog
      option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
      balance roundrobin
      server  mycat_01 192.168.124.38:9066 check port 48700 inter 5s rise 2 fall 3
      server  mycat_04 192.168.124.41:9066 check port 48700 inter 5s rise 2 fall 3

3)因为我们上面的配置用到48700端口,来对我们后端mycat做监控,所以这时候我们需要安装另外一个服务来启动这个端口,这个服务便是【xinetd】,就是一个网络的守护进程的服务,可以通过它简单的实现一个服务,并通过这个服务达到启动端口的目的

yum install xinetd -y

3)然后到我们的相应的目录下创建一个文件叫做【mycatchk】

cd /etc/xinetd.d

vim mycatchk

文件内容如下:

service mycatchk
{
flags = REUSE
socket_type = stream
port = 48700
wait = no
user = root
server =/usr/local/bin/mycat_status
log_on_failure += USERID
disable = no
}

4)在 /usr/local/bin 下创建一个脚本【mycat_status】

vim /usr/local/bin/mycat_status

脚本内容如下:

mycat=`/usr/local/mycat/bin/mycat status |grep 'not running'| wc -l`
if [ "$mycat" = "0" ];
then
    /bin/echo -en "HTTP/1.1 200 OK\r\n" 
    /bin/echo -en "Content-Type: text/plain\r\n" 
    /bin/echo -en "Connection: close\r\n" 
    /bin/echo -en "Content-Length: 40\r\n" 
    /bin/echo -en "\r\n" 
    /bin/echo -en "MyCAT  Cluster Node is synced.\r\n" 
    exit 0
else
    /bin/echo -en "HTTP/1.1 503 Service Unavailable\r\n" 
    /bin/echo -en "Content-Type: text/plain\r\n" 
    /bin/echo -en "Connection: close\r\n" 
    /bin/echo -en "Content-Length: 44\r\n" 
    /bin/echo -en "\r\n" 
    /bin/echo -en "MyCAT Cluster Node is not synced.\r\n" 
    exit 1
fi

然后授权

chmod a+x /usr/local/bin/mycat_status

在当前安装的haproxy节点下执行脚本

/usr/local/bin/mycat_status

可以看到返回成功

5)然后配置我们etc/services文件

vim /etc/services

找到最后一行配置如下: 

mycatchk        48700/tcp               # mycatchk

6)启动我们的xinted服务

systemctl  start  xinetd.service

7)查看一下我们启动的服务

netstat -nltp | grep 48700

 启动成功

8)绑定虚拟网卡(两个节点只需要绑定一台即可,这里演示绑定节点1

先查看一下本机的  ifconfig

所以绑定 

ifconfig eno16777736:1 192.168.124.10/24

再次查看 

9)启动我们的haproxy

haproxy -f /etc/haproxy/haproxy.cfg

后台查看一下我们的进程,启动成功 

至此我们的haproxy安装完毕,两个节点需要进行同样的操作

10)先简单校验一下我们的安装的haproxy是否成功。刚才我们绑定了虚拟IP192.168.124.10,管理端口是8096.

四台服务器我们随意找一个节点进行登陆

mysql -uroot -p -h192.168.124.10 -P8096

登陆成功,显示出了我们配置的逻辑库。至此根据我们文章开头机构描述我们两台Haproxy安装完毕。

 

五)安装KeepAlived

上面我们绑定了虚拟IP(192.168.124.10),只是对其中的一台做了绑定,因为同一时刻只会有一台Haproxy对外提供服务。而我们安装的Keepalived是会监控我们两台Haproxy,当其中一台绑定虚拟IP的节点挂掉之后,就会立刻切换到另外一台可用的服务上

1)安装我们的keepalived

yum install keepalived -y

2)修改配置文件

vim /etc/keepalived/keepalived.conf

! Configuration Fileforkeepalived
vrrp_script chk_http_port {
script"/etc/keepalived/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
#我们主节点配置为MASTER,从节点就需要配置为BACKUP
state MASTER 
interface eno16777736 
virtual_router_id 51 
#主节点优先级高一些,从节点优先级低一些(例如100)
priority 150 
advert_int 1 
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress { 
 192.168.124.10 dev eno16777736 scope global
}
}

 3)当前目录创建我们上面配置文件中提到的脚本【check_haproxy.sh】

#!/bin/bash
STARTHAPROXY="/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg"
STOPKEEPALIVED="/etc/init.d/keepalived stop"
#STOPKEEPALIVED="/usr/bin/systemctl stop keepalived"
LOGFILE="/var/log/keepalived-haproxy-state.log"
echo "[check_haproxy status]" >> $LOGFILE
A=`ps -C haproxy --no-header |wc -l`
echo "[check_haproxy status]" >> $LOGFILE
date >> $LOGFILE
if [ $A -eq 0 ];then
   echo $STARTHAPROXY >> $LOGFILE
   $STARTHAPROXY >> $LOGFILE 2>&1
   sleep 5
fi
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
   exit 0
else
   exit 1
fi

4)启动keepalived

/etc/init.d/keepalived start

5)两台都安装好之后,我们可以模拟故障,当其中的一台Haproxy挂掉之后,虚拟IP是否可以转移到我们另外一台可用的Haproxy服务上。当我们实际停止节点1的Haproxy的时候,发现已经故障转移,转移到我们的节点4上,我们对外开放的mycat服务依然可以访问,真正做到mycat的高可用

 至此我们MyCat集群架构的高可用方案讲解完毕

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值