阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL主从复制之Mycat简单配置和高可用

152次阅读
没有评论

共计 4361 个字符,预计需要花费 11 分钟才能阅读完成。

什么是 Mycat

1.Mycat 就是 MySQL Server,而 Mycat 后面连接的 MySQL Server,就好象是 MySQL 的存储引擎, 如 InnoDB,MyISAM 等. 因此,Mycat 本身并不存储数据,数据是在后端的 MySQL 上存储的,因此数据可靠性以及事务等都是 MySQL 保证的.2.Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储. 所以有了数据库中间件,应用只需要集中与业务处理,大量的通用的数据聚合,事务,数据源切换都由中间件来处理,中间件的性能与处理能力将直接决定应用的读写性能,所以一款好的数据库中间件至关重要。

MySQL 主从复制之 Mycat 简单配置和高可用

术语
分片规则(rule)

逻辑库(schema)
分片节点(dataNode)

节点主机(dataHost)

Mycat 使用
首先要安装,mysql5.7 和 mycat, 并且两台主机要先做好 mysql 的主从复制, 且两台主机的 mysql 都要存在 db1 数据库, 用来存放 mycat 的数据.

关于 mysql 的主从复制, 这里就不贴出了, 可以移步以下链接:

基于 GTID 的主从复制数据库  http://www.linuxidc.com/Linux/2017-04/142451.htm

mysql 的经典主从复制  http://www.linuxidc.com/Linux/2017-04/142452.htm

配置 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

定义 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=”db1″ />
38         <dataNode name=”dn3″ dataHost=”server33.lalala.com” database=”db1″ />

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 –>

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

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

vim schema.xml
47                 <writeHost host=”hostM1″ url=”server33.lalala.com:3306″ user=”mycat”
48                                    password=”Mycat+007″>
49                         <!– can have multi read hosts –>
50                 </writeHost>
51                 <writeHosthost=”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 mycat@’%’;

配置成功, 启动~ 
 mycat start  , 查看日志    wrapper.log

MySQL 主从复制之 Mycat 简单配置和高可用

检验
mycat 的登陆:

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

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

建表:
create table employee (id int not null primary key,name varchar(100),sharding_id int not null);

插入数据:
insert into employee(id,name,sharding_id) values(1,’leader us’,10000);
insert into employee(id,name,sharding_id) values(2, ‘me’,10010);
insert into employee(id,name,sharding_id) values(3, ‘mycat’,10000);
insert into employee(id,name,sharding_id) values(4, ‘mydog’,10010);

在两台 mycat 上, 都能看到相同的数据, 即为成功

MySQL 主从复制之 Mycat 简单配置和高可用

并且在 server33 和 server44 上的 db1 数据库中, 也能看见刚刚创建的数据

MySQL 主从复制之 Mycat 简单配置和高可用

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

MySQL 主从复制之 Mycat 简单配置和高可用

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

MySQL 主从复制之 Mycat 简单配置和高可用

查看挂载点和 IP

MySQL 主从复制之 Mycat 简单配置和高可用

高可用的接管,take over

MySQL 主从复制之 Mycat 简单配置和高可用

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142450.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计4361字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中