《Mycat分布式数据库架构》之高可用集群

前文回顾:
《Mycat分布式数据库架构》之原理及架构
《Mycat分布式数据库架构》之搭建详解
《Mycat分布式数据库架构》之配置详解
《Mycat分布式数据库架构》之数据切分和读写分离
《Mycat分布式数据库架构》之故障切换
《Mycat分布式数据库架构》之数据切分实战
《Mycat分布式数据库架构》之全局自增ID
《Mycat分布式数据库架构》之ER分片



前面我们部署的架构中mycat还存在单点问题,当部署mycat那台主机挂了之后,程序便无法访问,所以我们至少还需要增加一个mycat节点,当有多个mycat节点之后就有了新的问题,那就是多个mycat之间的配置是如何同步的呢,所以需要引入zookeeper,通过zookeeper集群来存储mycat的配置。

而多个mycat之间需要进行负载均衡,则在mycat之上又需要引入Haproxy这个组件,Haproxy是一个代理层,主要作用是可以对mycat服务器进行负载均衡。同时为了保证Haproxy的高可用性,需要引入keepalived这个组件。


1 解决mycat单点问题

1.1 部署zookeeper集群

由于zookeeper集群建议至少有3个节点,虽然2个节点的集群就能运行,但是容错性为0,具体演示环境如下:

主机名ip角色数据库名
node-1192.168.157.129Oracle,zookeeper,Mycathr
node-2192.168.157.130Oracle,zookeeperhuman_res
node-3192.168.157.131Oracle,zookeeperhuman_res
node-4192.168.157.132Oracle,Mycathuman_res

这里在节点1、节点2和节点3中部署zookeeper,组成一个zookeeper集群。并且需要在节点1和节点4中安装mycat,节点1中我们已经安装了mycat,所以在节点4中再安装一个mycat,安装方法同理。


1.1.1 下载zookeeper

下载地址:https://downloads.apache.org/zookeeper/,这里需要特别注意的是,从版本3.5.5开始,带有bin名称的包才是可以直接运行使用的,需重新下载压缩包,比如下面这个版本应该下载带有bin名称的。

在这里插入图片描述

下载到节点1上后copy一份到其他2个节点中,如下:

[root@oraserver ~]# ls
anaconda-ks.cfg  apache-zookeeper-3.5.7-bin.tar.gz  data  Desktop  Documents  Downloads  initial-setup-ks.cfg  Music  Pictures  Public  Templates  Videos
[root@oraserver ~]# scp apache-zookeeper-3.5.7-bin.tar.gz root@192.168.157.130:/root

1.1.2 解压
tar zxf apache-zookeeper-3.5.7-bin.tar.gz

解压之后,进入conf目录,将zoo_sample.cfg复制并重命名为zoo.cfg,如下

[root@oraserver apache-zookeeper-3.5.7-bin]# cd conf
[root@oraserver conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@oraserver conf]# cp zoo_sample.cfg zoo.cfg
[root@oraserver conf]# ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg

在这里插入图片描述

接下来我们在安装目录也就是apache-zookeeper-3.5.7-bin目录中新建一个data目录,如下

mkdir data

按照如上方式分别在三个节点上进行安装,然后给每一个节点生成一个节点标识,比如第一个节点,就echo一个0到data目录下的myid文件中

echo 0 > data/myid

第二个节点就echo一个1在data下的myid中

echo 1 > data/myid

第三个节点就echo一个2在data下的myid中

echo 2 > data/myid

1.1.3 分别修改三个节点的zoo.cfg配置
cd conf
vi zoo.cfg

修改配置内容,其中dataDir属性为你的myid文件路径,server.0、server.1和server.2中的012需要和你集群各节点myid的内容相同,如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/root/data/apache-zookeeper-3.5.7-bin/data
# the port at which the clients will connect
clientPort=2181
server.0=192.168.157.129:2888:3888
server.1=192.168.157.130:2888:3888
server.2=192.168.157.131:2888:3888

1.1.4 开放zookeeper的对应端口

永久性添加2181,2888,3888端口

firewall-cmd --add-port=2181/tcp --permanent --zone=public
firewall-cmd --add-port=2888/tcp --permanent --zone=public
firewall-cmd --add-port=3888/tcp --permanent --zone=public
重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

1.1.5 启动zookeeper集群

分别启动3个zookeeper,如下

cd bin
./zkServer.sh start

查看集群状态,其中
节点1(182.168.157.129)如下

[root@oraserver apache-zookeeper-3.5.7-bin]# bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/data/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

节点2(182.168.157.130)如下

[root@localhost apache-zookeeper-3.5.7-bin]# bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/data/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

节点3(182.168.157.131)如下

[root@localhost apache-zookeeper-3.5.7-bin]# bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/data/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

可以看到节点2作为了leader的角色,这其实和启动zookeeper的先后顺序有关。


1.2 初始化Mycat配置到zookeeper集群
1.2.1 初始化zookeeper中的数据

mycat为我们提供了一个很方便的工具,在mycat的bin目录下有一个shell脚本,就是init_zk_data.sh,如下

[root@oraserver mycat]# cd bin
[root@oraserver bin]# ls
dataMigrate.sh  init_zk_data.sh  mycat  rehash.sh  startup_nowrap.sh  wrapper-linux-ppc-64  wrapper-linux-x86-32  wrapper-linux-x86-64
[root@oraserver bin]# more init_zk_data.sh

这个脚本就是用来向zookeeper集群中初始化mycat的数据的,它通过读取mycat的conf目录下的配置文件,并初始化到zookeeper集群中。

首先我们需要将mycat的配置文件server.xml、schema.xml,rule.xml和sequence_db_conf.properties复制到zkconf目录下,init_zk_data.sh这个脚本就是通过读取zkconf目录下的配置文件来初始化集群的。

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

复制之后,运行init_zk_data.sh这个脚本。

[root@oraserver mycat]# bin/init_zk_data.sh
o2020-02-29 02:46:25 INFO JAVA_CMD=/bin/java
o2020-02-29 02:46:25 INFO Start to initialize /mycat of ZooKeeper
o2020-02-29 02:46:32 INFO Done

1.2.2 连接zookeeper节点

接下来进去zookeeper目录的bin目录中,使用zkCli.sh这个脚本来连接到当前这个zookeeper节点,如下

cd bin
./zkCli.sh

可以查看节点中mycat的一些配置信息,如下所示。

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 1] ls /mycat
[mycat-cluster-1]
[zk: localhost:2181(CONNECTED) 0] ls /mycat/mycat-cluster-1
[cache, line, rules, schema, sequences, server]
[zk: localhost:2181(CONNECTED) 1] ls /mycat/mycat-cluster-1/schema
[dataHost, dataNode, schema]
[zk: localhost:2181(CONNECTED) 2] get /mycat/mycat-cluster-1/schema/dataHost
[{"balance":1,"maxCon":1000,"minCon":10,"name":"host01","writeType":0,"switchType":1,"slaveThreshold":100,"dbType":"oracle","dbDriver":"jdbc","heartbeat":"select 1 from dual","writeHost":[{"host":"192.168.157.130","url":"jdbc:oracle:thin:@192.168.157.130:1521:humanres","password":"human","user":"human"}]},{"balance":1,"maxCon":1000,"minCon":10,"name":"host02","writeType":0,"switchType":1,"slaveThreshold":100,"dbType":"oracle","dbDriver":"jdbc","heartbeat":"select 1 from dual","writeHost":[{"host":"192.168.157.129","url":"jdbc:oracle:thin:@192.168.157.129:1521:hr","password":"human","user":"human"}]}]
[zk: localhost:2181(CONNECTED) 3]

查看其余两个节点,mycat的配置内容相同,证明我们已经实现了mycat配置内容向zookeeper集群的同步。


1.3 配置mycat支持zookeeper启动

这一步的作用就是使得mycat可以通过zookeeper来启动,主要通过配置mycat的conf目录下的myid.properties文件实现。

cd conf
vi myid.properties

我们在节点1和节点4中安装了mycat,其中节点1(192.168.157.129)中配置为如下

loadZk=true
zkURL=192.168.157.129:2181,192.168.157.132
clusterId=mycat-cluster-1
myid=mycat_01
clusterSize=2
clusterNodes=mycat_01,mycat_04
#server  booster  ;   booster install on db same server,will reset all minCon to 2
type=server
boosterDataHosts=dataHost1
节点4(192.168.157.132)中配置为如下
loadZk=true
zkURL=192.168.157.129:2181,192.168.157.132
clusterId=mycat-cluster-1
myid=mycat_04
clusterSize=2
clusterNodes=mycat_01,mycat_04
#server  booster  ;   booster install on db same server,will reset all minCon to 2
type=server
boosterDataHosts=dataHost1

然后重启mycat

mycat stop
mycat start

然后查看节点4中的mycat各项配置已经发生改变,和节点1一样,这些信息就是从zookeeper集群中同步过来的,之后我们只需要对zookeeper集群中配置文件做修改,就可同步到节点1和节点4中了,就保证了mycat各个节点的配置是一致的。



更多技术干货,请持续关注程序员大佬超。
原创不易,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大佬超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值