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


    什么是Mycat

    1.Mycat就是MySQL Server,而Mycat后面连接的MySQL Server,就好象是MySQL的存储引擎,如InnoDB,MyISAM等.因此,Mycat本身并不存储数据,数据是在后端的MySQL上存储的,因此数据可靠性以及事务等都是MySQL保证的.2.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

    检验
    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上,都能看到相同的数据,即为成功

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

    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} "
    30 esac

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

    查看挂载点和IP

    高可用的接管,take over

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

    linux
  • 相关阅读:
    《英语语法新思维初级教程》学习笔记(七)五种基本句型
    《英语语法新思维初级教程》学习笔记(六)实义动词与(情态)助动词
    《英语语法新思维初级教程》学习笔记(五)形容词
    《英语语法新思维初级教程》学习笔记(四)数量限定词和个体限定词
    C# Redis存Session Hash存对象
    MVC中Spring.net 对基类控制器无效 过滤器控制器无效
    C# datagridview列绑定类中类的属性
    商品评分效果JavaScript
    C# SQL数据库学习时遇到到一些异常
    C语言用一维数组打印杨辉三角(原:无意中想到)
  • 原文地址:https://www.cnblogs.com/jpfss/p/8205714.html
Copyright © 2020-2023  润新知