Mycat1.6.5 的安装步骤 和创建主从复制

288 阅读5分钟

1、下载mycat

wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
tar zxf 解压

2、安装jdk1.7 以上

rpm -qa | grep java  查看安装java
rpm -e --nodeps java 卸载查看java

3、新建mycat运行系统账号

adduser mycat
chown mycat:mycat -R mycat/

4、配置系统环境变量

vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin:/usr/local/java/jdk1.8

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib.tools.jar

即使生效

source /etc/profile

5、修改mycat启动参数

mycat start

MyCat 垂直分库

垂直分库的步骤

一、收集分析业务模块间的关系

二、复制数据库到其它实例

        创建数据库命令 mysql –uroot –p –e “create database db”

1.备份原数据并记录相关事务点

        使用master-data=2 记录事务日志点
        使用change master to 配置复制链路
        使用change replication filter 配置数据库名转换
          mysqldump --master-data=2 --single-transaction --routines --triggers 
          --events -uroot -p  db > db.sql

2.拷贝文件到其它服务器上

         scp db.sql root@10.10.2.45:/root

3.导入sql文件

        创建 空数据库
        mysql>create database db;
        (1) 选择数据库
              mysql>use dbname ;
        (2) 设置数据库编码
              set names utf8;
        (3)导入数据(注意sql文件的路径)
             mysql -uroot -p db < db.sql

主从复制创建

在master 中创建主从复制账号

      mysql> create user 'zj'@'10.10.3.%' identified by '123456';
授权
        mysql> grant replication slave on *.* to  'zj'@'10.10.3.%';
        
        mysql> flush privileges;
从库中创建链路
        mysql> change master to master_host=“10.10.2.45”,
               master_user=“zj”,
               master_passwrod=”123456”,
               master_log_file=”mysql-bin.000060”,
               master_log_pos=123;
启动从库
        mysql> start slave;
查看同步状态
        mysql> show slave status\G;
        # 如果出现以下两个Yes,证明同步成功,如果出现问题,请翻阅`4、其他说明`
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
主从不同步解决问题
        1)、停止同步
        mysql>stop slave;
        2)、设置参数
        mysql>set global sql_slave_skip_counter =1;
        3)、启动同步并查看
        start slave;
        mysql> show slave status\G; 
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

三、配置MyCat垂直分库

1、创建mycat用户

        create user zjmycat @'10.10.2.%' identified by '123456';
        #授权
        grant select,insert,update,delete on *.* to zjmycat'10.10.2.%';

四、通过mycat访问DB

五、删除原库中已迁移的表

        mysql –uroot –p 

	show variables like ‘read_only';
	
	set global read_only=off;

垂直切分的优点

    1. 数据库的拆分简单明了,拆分规则明确。
    2. 应用程序模块清晰明确,整合容易
    3. 数据维护方便易行,容易定位。

缺点

    1. 部分表关联无法再数据库级别完成,需要在程序中完成。
    2. 访问频繁数据量大的表存在性能瓶颈
    3. 切分达到一定程度后,扩展性会遇到限制

解决跨分片关联方式

    1. 使用mycat全局表
    2. 冗余部分关键数据
    3. 使用api方式获取数据	

MyCat水平分库

分片原则

    1. 能不切分尽量不要切分
    2. 选择合适的切分规则和分片键
    3. 尽量避免跨分片join操作

分片后如何处理查询 切分表

    id % 3 = 0 -> db1
    id % 3 = 1 -> db2
    id % 3 = 2 -> db3

水平分片的步骤

    1、	根据业务状态确定要进行水平切分的表。
    2、	分析业务模型选择分片键及分片算法。
    3、	使用mycat 部署分片集群。
    4、	测试分片集群。
    5、	业务及数据迁移。

如何选择分片键

    1. 尽可能的比较均匀分布数据到各个节点上。
    2. 该业务字段是最频繁的或者最重要的查询条件

分析业务模型选择分片键及分片算法

    1、	对订单相关表进行水平切分
    2、	以customer_id做为分片键。
    3、	采用简单取模分片算法。

使用MyCat部署分片集群

    使用schema.xml 配置逻辑库及逻辑表
    使用rule.xml 配置分片表的分片规则
    使用server.xml 配置用户名和访问权限

演示环境说明

主机名 IP 角色 数据库
Node1 10.10.2.45 MyCat
Node2 10.10.2.40 MySql Orderdb01 Orderdb02
Node3 10.10.2.43 MySql Orderdb03 Orderdb04

MyCat全局自增ID

1、创建mycat DB;
    在mycat  ./conf /dbseq.sql 
2、导入 dbseq.sql  mysql –uroot –p mysql < dbseq.sql
    数据库为 MYCAT_SEQUENCE;
3、使用全局自增id 需要改动server.xml文件,加入自增类型 0 1 2 3 4 五中类型
    <property name=”sequnceHandlerType”>1</property>
0 代表本地文件方式 1 数据库方式 2时间戳方式 默认数据库方式1
    增加数据节点 
    <dataNode name=”mycat” dataHost=”M1” database=”mycat”/>
4、修改sequence_db_conf.properties
    ORDER_MASTER=mycat 
5、在MYCAT_SEQUENCE 中加入记录 需要使用大写
   insert into MYCAT_SEQUENCE values(‘ORDER_MASTER’,1,1);
6、	修改schema.xml 逻辑表启动自增id
    <table autoIncrement=”true”></table> 开启自增ID
    
    show grants for zf@’10.10.2.%’; 查看权限
    grant execute on *.* to ‘zf’@’10.10.3.%’; 授权限

ER分片表

关联时候 需要配置 字表父表
<childTable> 代表字表  加入到table 下
joinKey 代表关联key
<table>
     <childTable name=”” primaryKey=”” joinKey=””
      parentKey=”” autoIncrement=”true”/>
</table>

MyCAT 的其它常用功能

    SQL拦截 配置在server.xml
    监控记录数据库写入操作
    SQL审计
    <property name="sqlInterceptor">io.mycat.server.interceptor.impl.StatisticsSqlInterceptor</property>
     <property  name="sqlInterceptorType">UPDATE,DELETE,INSERT</property>
     <property name="sqlInterceptorFile">/usr/local/mycat/sqltxt/sql.txt</property>

SQL防火墙

统一控制那些用户可以通过那些主机访问后端数据库
统一屏蔽一些sql语句。

MyCAT高可用架构

开源映射地址
https://mirrors.shuosc.org/
高可用系统的基本要求
	系统架构中不存在单点问题。
	可以最大限度的保障服务的可用性。
使用zookeeper 配置mycat
    1.建立zookeeper集群	
    2.初始化mycat配置到zk集群
    3.配置mycat支持zk启动
    4.启动mycat
    主机名   |   	Ip   |  	角色 |
    -------- | --------  | -------------- | ----------
    | Node-1  | 10.10.2.45 2 |	Mycat,zk,mysql
    Node-2	  | 10.10.2.40 3 |	Zk,mysql
    Node-3	  | 10.10.2.43 4 |	Zk,mysql
    Node-4	  | 10.10.2.* 5	 | Mycat,mysql

wget 下载zookeeper

    node1 节点下创建data 目录  创建 echo 0 >data/myid
    node2 节点下创建data 目录  创建 echo 1 >data/myid
    node3 节点下创建data 目录  创建 echo 2 >data/myid

编辑 conf/zoo.cfg 目录添加

    dataDir=/sofeware/zookeeper/data
    dataLogDir=/sofeware/zookeeper/logs
    server.0=10.10.2.45:2888:3888
    server.1=10.10.2.40:2888:3888
    server.2=10.10.2.43:2888:3888

初始化zk并配置mycat支持zk

mycat bin 目录下 init_zk_data.sh 脚本
把mycat使用的配置文件复制*.xml 到zkconf/ 下

cp schema.xml server.xml rule.xml sequence_db_conf.properties