Mycat简单配置和高可用的实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mycat简单配置和高可用的实现相关的知识,希望对你有一定的参考价值。


what-mycat


1.Mycat就是mysql Server,而Mycat后面连接的MySQL Server,就好象是MySQL的存储引擎,如InnoDB,MyISAM等.

因此,Mycat本身并不存储数据,数据是在后端的MySQL上存储的,因此数据可靠性以及事务等都是MySQL保证的.

2.Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储.


所以有了数据库中间件,应用只需要集中与业务处理,大量的通用的数据聚合,事务,数据源切换都由中间件来处理,中间件的性能与处理能力将直接决定应用的读写性能,所以一款好的数据库中间件至关重要。



技术分享


术语


分片规则(rule)

逻辑库(schema)

分片节点(dataNode)

节点主机(dataHost)



how-mycat


首先要安装,mysql5.7和mycat


配置mycat


vim wrapper.conf    


5 wrapper.java.command=/usr/bin/java                      #java命令所在目录
31 wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G   根据实际内存设置
33 wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=2984


vim server.xml


80         <user name="mycat"> #登陆mycat的用户名和密码
81                 <property name="password">Mycat+007</property>
82                 <property name="schemas">JamesMycatSchema</property>
82     #mycat中的数据库名


vim schema.xml


定义mycat中可以创建的表,以及哪些节点可以使用哪些表


7<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
11<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
12<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
14<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
15                            rule="mod-long" />

19                 <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
20                            rule="sharding-by-intfile" />
21                 <table name="customer" primaryKey="ID" dataNode="dn1,dn2"
22                            rule="sharding-by-intfile">
23                         <childTable name="orders" primaryKey="ID" joinKey="customer_id"
24                                                 parentKey="id">
25                                 <childTable name="order_items" joinKey="order_id"
26                                                         parentKey="id" />
27                         </childTable>
28                         <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
29                                                 parentKey="id" />
30                 </table>



36         <dataNode name="dn1" dataHost="server33.lalala.com" database="db1" />
37         <dataNode name="dn2" dataHost="server33.lalala.com" database="db2" />
38         <dataNode name="dn3" dataHost="server33.lalala.com" database="db3" />

43         <dataHost name="server33.lalala.com" maxCon="1000" minCon="10" balance="0"
44                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
45                 <heartbeat>select user()</heartbeat>
46                 <!-- can have multi write hosts -->



连接数据库的用户密码,稍后还要在数据库授权


 vim schema.xml

因为我们做的是高可用,所以33和44都具有写的功能

47                 <writeHost host="hostM1" url="server33.lalala.com:3306" user="mycat"
48                                    password="Mycat+007">
49                         <!-- can have multi read hosts -->
50                 </writeHost>
51                 <writeHost host="hostS1" url="server44.lalala.com:3306" user="mycat"
52                                    password="Mycat+007">
53                 </writeHost>


server33,server44:

vim /etc/my.cnf


 22 lower_case_table_names = 1


mysql>CREATE USER mycat identified by ‘Mycat+007‘;
mysql>grant all privileges on *.* to [email protected]‘%‘;




配置成功,启动~   

 mycat start   ,查看日志    wrapper.log


技术分享



检验


mycat的登陆: 

mysql -umycat -pMycat+007 8066 -h127.0.0.1


查看server44,和server33的数据是否同步~


技术分享               技术分享




在44上也能看到成功~


技术分享





heartbeat+drbd+mycat实现高可用分布式存储


存储:drbd


vim /etc/drbd.d/lalalala.res

resource lalalala {
meta-disk internal;
device /dev/drbd8;
syncer {
verify-alg sha1;
}
on server33.lalala.com {
disk /dev/vdc;
address 172.25.88.33:7789;
}
on server44.lalala.com {
disk /dev/vdb;
address 172.25.88.44:7789;
}
}


高可用


vim ha.cf


initdead 60   资源初始化时间,如果设置过大,接管时间可能很长,不用担心,只需要耐心等待~


vim haresources


server33.lalala.com IPaddr::172.25.88.100/24/eth0 drbddisk::lalalala Filesystem::/dev/drbd8::/home/mycat/app/mycat/lib::ext4 mycatd


其他配置照旧~

需要指出的是,因为mycat不属于LSB,所以要自己编写脚本启动文件,我写的太粗糙了,不要学我.....


vim /etc/init.d/mycatd 注意启动脚本的位置


3 path=/home/mycat/app/mycat/bin/mycat    #路径为执行mycat的环境,可以用which查看
4 function usage(){
5  echo "$0 {start|stop|restart}"
6  exit 1
7 }
8 [ $# -ne 1 ] && usage   #如果没有输入参数,就显示本脚本用法
9
10
11 case $1 in
12  start)
13 $path/mycat start # &>/dev/null &
16  ;;
17  stop)
18 $path/mycat stop &>/dev/null &
21  ;;
22  restart)
23 $path/mycat start &>/dev/null &
24 $path/mycat stop &>/dev/null &
27  ;;
28  *)
29  printf "Usage:$0 {start|stop|restart}\n"
30 esac


技术分享




启动server33的heartbeat!

可以看到IP,存储,服务全都启动拉!


技术分享



查看挂载点和IP


技术分享



高可用的接管,take over



技术分享




本文出自 “12049878” 博客,谢绝转载!

以上是关于Mycat简单配置和高可用的实现的主要内容,如果未能解决你的问题,请参考以下文章

mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

keepalived+haproxy实现网站负载均衡和高可用

MyCAT+MySQL 搭建高可用企业级数据库集群——第2章 MyCat入门

keepalived_lvs-dr实现discuz负载均衡和高可用

RabbitMQ集群和高可用配置

HAProxy+Keepalived实现Mycat高可用