mycat数据库及分片式存储

软件介绍
• Mycat 是基于 Java 的分布式数据库系统中间层,为高并发下的分布式提供解决方案
– 支持 JDBC 形式连接
– 支持 MySQL 、 Oracle 、 Sqlserver 、 Mongodb 等
– 提供数据读写分离服务
– 可以实现数据库服务器的高可用
– 提供数据分片服务
– 基于阿里巴巴 Cobar 进行研发的开源软件
– 适合数据大量写入数据的存储需求

  • 配置mycat服务 步骤:

1 装包

]# rpm  -qa  | grep  -i  jdk
]# java -version
]# tar -zxvf  Mycat-server-1.4-beta-20150604171601-linux.tar.gz
]# mv mycat /usr/local/
]# ls /usr/local/mycat/
bin  catlet  conf  lib  logs  version.txt

2 修改配置文件
• 重要配置文件说明
– server.xml 设置连接 mycat 服务的账号 、密码等
– schema.xml 配置 mycat 使用的真实数据库和表
– rule.xml 定义 mycat 分片规则
• 配置标签说明

– <user>.......</user> 定义连接 mycat 服务时使用的用户和密码及逻辑库的名字
– <datanode>......</datanode> 指定数据节点(物理库的主机名和存储分片数据的数据库名)
– <datahost>......</datahost> 指定数据库服务器的 IP地址 及连接数据库时使用的授权用户名及密码

• 修改配置文件 /usr/local/mycat/conf/server.xml

<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property> # 定义只读权限,使用定义的 user 用户连接 mycat 服务后只有读记录的权限
</user>

• 修改配置文件 /usr/local/mycat/conf/schema.xml– 定义分片信息

2.1 定义客户连接mycat时使用的用户名及密码和访问权限、逻辑库的名称

]# vim /usr/local/mycat/conf/server.xml
 34         <user name="admin">
 35                 <property name="password">123456</property>
 36                 <property name="schemas">TESTDB</property>
 37         </user>
 38 
 39         <user name="user">
 40                 <property name="password">user</property>
 41                 <property name="schemas">TESTDB</property>
 42                 <property name="readOnly">true</property>
 43         </user>
:wq

3 根据配置文件的设置在数据库服务器上做对应的配置

mysql54]# vim /etc/my.cnf
[mysqld]
lower_case_table_names = 1
]# systemctl   restart mysqld
mysql> create  database db1;
mysql> grant  all  on  *.*  to root@"%" identified by "123qqq...A";
]# vim /etc/my.cnf
[mysqld]
lower_case_table_names = 1
]# systemctl   restart mysqld
mysql> create  database db2;
mysql> grant  all  on  *.*  to root@"%" identified by "123qqq...A";

4 启动服务

]#vim /usr/local/mycat/logs/wrapper.log 
]#/usr/local/mycat/bin/mycat start
]#/usr/local/mycat/bin/mycat stop

5 查服务信息

]#netstat -utnlp  | grep  :8066

6 客户端测试配置

 ]# mysql -h192.168.4.56 -P8066 -uadmin -padmin
mysql> show  databases;
mysql> use TESTDB;
mysql> show tables;
mysql>  create table  employee (
id int(2) primary key  auto_increment,  
name char(10),
age tinyint(2) default 18,
sex enum("boy","girl") default "boy",
sharding_id  int(2)
);
mysql> desc  employee;
mysql> insert into employee(name,sharding_id)
values("bob",10000),("tom",10010);
mysql> insert into employee(name,sharding_id) 
values("jerry",10010);
select  *  from employee;
  • MySQL性能优化
    搭建监控服务器:监控服务的硬件使用率
    CPU 内存 存储 网络流量
    数据库服务运行参数:
    mysql> set global 选项=值;
    vim /etc/my.cnf
    [mysqld]
    选项=值
    mysql> set global max_connections = 300;
    mysql> show variables like “max_connections”;

分库分表

• 什么是分库分表
– 通过某种特定条件,将存放在一个数据库 ( 主机 ) 中的数据,分散存放到多个数据库 ( 主机 ) 中。
– 已达到分散单台设备负载的效果,即分库分表
– 数据的切分根据其切分规则的类型,分为 2 种切分模式
– 垂直分割 ( 纵向 ) 和 水平分割 ( 横向 )

• 纵向切分
– 把单一的表,拆分成多个表,并分散到不同的数据库( 主机 ) 上。
– 一个数据库由多个表构成,每个表对应不同的业务,可以按照业务对表进行分类,将其分布到不同的数据库 ( 主机 ) 上,实现专库专用,让不同的库 ( 主机 ) 分担不同的业务。

• 横向切分
– 按照表中某个字段的某种规则,把向表中写入的记录分散到多个库 ( 主机 ) 中。
– 简单来说,就是按照数据行切分,将表中的某些行存储到指定的数据库 ( 主机 ) 中。

工作过程

• 当 Mycat 收到一个 SQL 时 – 会先解析这个 SQL 查找涉及到的表,然后看此表的定 义
– 如果有分片规则,则获取到 SQL 里分片字段的值,并 匹配分片函数,得到该 QL 对应的分片列表 – 然后将 SQL发往这些分片去执行,最后收集和处理所 有分片返回的结果数据,并输出到客户端 以 select * from Orders where prov=? 语句为例,查到 prov=wuhan , 按照分片函数, wuhan 返回 dn1 ,于是 SQL 就发给了 MySQL1,去 取 DB1 上的查询结果,并返回给用户。 如果上述 SQL 改为 elect * from Orders where prov in (‘wuhan’,‘beijing’) ,那么, SQL 就会发给 ySQL1 与 MySQL2 去执行,然后结果集合并后输出给用户。但通常业务中我们的 SQL 会有 Order By 以及 Limit 翻页语法,此时就涉及到结果集在 Mycat 端的二次处 理。

分片规则

• mycat 服务提供 10 种分片规则。
– 1 枚举法 sharding-by-intfile
– 2 固定分片 hash 算法 rule1
– 3 范围约定 auto-sharding-long
– 4 求模法 mod-long
– 5 日期列分区法 sharding-by-date
– 6 通配取模 sharding-by-pattern
– 7ASCII 码求模通配 sharding-by-prefixpattern
– 8 编程指定 sharding-by-substring
– 9 字符串拆分 hash 解析 sharding-by-stringhash
– 10 一致性 hash sharding-by-murmur

分片算法

• 每种分片规则对应一种算法。
– 1 枚举法 sharding-by-intfile -> hash-int
– 2 固定分片 rule1 -> func1
– 3 范围约定 auto-sharding-long -> rang-long
– 4 求模法 mod-long -> mod-long
– 5 日期列分区法 sharding-by-date ->sharding-by-date
– 6 通配取模 sharding-by-pattern -> sharding-by-pattern
– 7ASCII 码求模通配 sharding-by-prefixpattern -> sharding-by-prefixpattern
– 8 编程指定 sharding-by-substring -> sharding-by-substring
– 9 字符串拆分 hash 解析 sharding-by-stringhash ->sharding-by-stringhash
– 10 一致性 hash sharding-by-murmur ->murmur

猜你喜欢

转载自blog.csdn.net/sally_1027/article/details/83662881