MyCat实现PXC集群负载均衡以及replication集群读写分离

之前我们已经搭建好PXC集群以及replication集群

PXC集群搭建

Replication集群搭建

一.MyCat名词解释

要理解MyCat的管理模式,需要先理解MyCat内部的名词都有什么含义

datahost:指管理的节点,这里指代PXC集群以及replication集群。

datanode:指管理节点的database,mycat可以管理的逻辑database。

schema:指mycat的虚拟database。

table:指mycat的虚拟table。

rule/type:去制定SQL语句的路由规则。

二.mycat管理方式

mycat对于外部程序来说就是一个数据库,因此需要配置端口,账号以及密码。

需要虚拟的表,以及虚拟的database。

我们通过JDBC等方式都可以连接到mycat,执行sql语句。

mycat是没有database以及table的,因此我们才维护了虚拟的表以及database。

实际上mycat是通过管理各个集群的datanode作为逻辑上的database,

然后通过路由,把SQL语句路由到各个datanode上去管理。

mycat有三个文件十分重要,server.xml,schema.xml,rule.xml

server.xml主要是设置虚拟账户。

schema.xml是设置虚拟表,虚拟库,管理表的路由模式。

rule.xml是设置路由规则的具体参数。

三.实现负载均衡

之前学习的时候其实没有搞明白

所谓负载均衡跟读写分离,是指集群内部的分配方式。

比如负载均衡,PXC集群把SQL语句平均分配个各个节点,降低各个节点的压力。

读写分离是指replication的主节点负责所有的修改SQL,任何读的语句会分配给各个从节点,

在schema.xml文件中配置datahost 的时候来确定

balance=0,则说明实现负载均衡。balance=3,则说明实现读写分离。

writetype=1,说明把请求随机发送给可用的写节点,如果节点宕机,就不会向这种节点发送请求。

switchtype=1,说明Mycat会对节点进行心跳检测,根据心跳检测的结果判断是否宕机。

slaveThrehold=100,说明从节点如果跟主节点有100秒没有同步会把从节点踢出。

然后通过配置writehost,readhost,节点的IP,端口号,用户名,密码等把集群中的节点加入。

因为PXC集群是强一致性的,各个节点都可以作为读写节点。因此PXC集群常使用负载均衡方式

因为replication集群是弱一致性的,只有主节点可以用作写节点,其从节点作为读节点,因此replication集群常使用读写分离的方式。

四.数据切分规则设置

SQL语句到达mycat的时候,是同步到各个集群上,还是根据一定的规则路由,这部分要通过配置schema标签来实现。

在schema标签中,可以配置Mycat逻辑database的名字等信息。

在table标签中,指出了该table 的名字,以及同步给哪些datanode,以什么样的切分规则。

在数据的切分规则确定之后,我们可以修改rule.xml文件去制定具体的规则。

五.实现全局主键

应该想到的是,如果使用主键自增的模式,那么各个集群的主键就会面临不唯一的情况。

MyCat有部分主键生成方案:

1.本地主键生成方案,MyCat会创建一个计数器一样的东西,然后把产生的值保留在本地,重启MyCat的时候会从该文件中读取主键值,这种方式的弊端是,对于双机热备方案来说,如果一个MyCat宕机,那么另一个MyCat无法读取之前的文本文件,那么就没有办法实现生成主键。

2.官方推荐的是zookeeper的方案去实现全局主键,zookeeper会生成64位的int,在server.xml文件里面可以去配置sequenceHandlerType =3 表示使用zookeeper生成主键。同时需要在myid.properties里面配置zookeeper的相关信息,包括zookeeperIP地址以及端口号,Mycat集群的名字,Mycat的各个节点。

配置修改完,使用 MyCat热加载语句 reload @@config_all 加载Mycat

你可能感兴趣的:(数据库集群的部署)