之前我们已经搭建好PXC集群以及replication集群
PXC集群搭建
Replication集群搭建
要理解MyCat的管理模式,需要先理解MyCat内部的名词都有什么含义
datahost:指管理的节点,这里指代PXC集群以及replication集群。
datanode:指管理节点的database,mycat可以管理的逻辑database。
schema:指mycat的虚拟database。
table:指mycat的虚拟table。
rule/type:去制定SQL语句的路由规则。
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