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 17 }8 [ $# -ne 1 ] && usage #如果没有输入参数,就显示本脚本用法91011 case $1 in12 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
时间: 2024-11-05 23:31:41