mycat 單庫多表實現水平分片

環境

mycat : 192.168.126.128         root    root
mysql1: 192.168.126.129:3306    root    lizhenghua
mysql2: 192.168.126.131:3306    root    lizhenghua

database:   zwrdb
table1  :   role
table2  :   subject_t
table3  :   suggest
table4  :   cas_user

版本說明

mycat-server-1.6.6.1
mysql-5.7.22

mycat下載連接java

mycat部署

1.包的部署node

tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local

vim /etc/profile
#mycat
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin

source /etc/profile

2.JDK的部署mysql

#*************************************************************************
#         > File Name: jdk.sh
#         > Author: chenglee
#         > Main : chengkenlee@sina.com
#         > Blog : http://www.cnblogs.com/chenglee/
#         > Created Time : 2019年03月07日 星期四 18時08分59秒
#*************************************************************************
#!/bin/bash
jdk_path="/usr/local"
jdk_targ=`basename *jdk-*`

function Cheng_flash(){
    i=0;
    str=""
    arr=("|" "/" "-" "\\")
    while [ $i -le 100 ]
    do
    let index=i%4
    let indexcolor=i%8
    let color=30+indexcolor
    printf "\e[0;$color;1m[%-100s][%d%%]%c\r" "$str" "$i" "${arr[$index]}"
    sleep ${sleeptime2}
    let i++
    str+='='
    done
    printf "\n"
}
function Time_test(){
    echo "please wait a moment ... "
    starttime=`date +'%Y-%m-%d %H:%M:%S'`
    tar tvvf ${jdk_targ} > /dev/null
    endtime=`date +'%Y-%m-%d %H:%M:%S'`
    start_seconds=$(date --date="$starttime" +%s);
    end_seconds=$(date --date="$endtime" +%s);
    sleeptime=$((end_seconds-start_seconds))
    sleeptime2=`awk 'BEGIN{printf "%0.2f",'${sleeptime}'/100}'`
}
function tar_gz(){
    Time_test
    tar xvvf ${jdk_targ} -C ${jdk_path} > /dev/null | Cheng_flash
}
function profile(){
    jdk_Path=`find ${jdk_path} -maxdepth 1 | grep jdk`
(
cat <<EOF
#java jdk
export JAVA_HOME=${jdk_Path}
export JRE_HOME=\${JAVA_HOME}/jre
export CLASSPATH=.:\${JAVA_HOME}/lib:\${JRE_HOME}/lib
export PATH=\${JAVA_HOME}/bin:\$PATH
EOF
) >> /etc/profile
}
function Source(){
    source /etc/profile
}

function main(){
    tar_gz
    profile
    Source
}
main

注: 把此腳本扔在與JDK二進制包同一目錄, 運行此腳本便可,這是我經常使用的shelllinux

mysql方面

注:忽略mysql的部署步驟, 直接跳到啓動mysql.sql

[root@localhost mysql]# ifconfig | grep inet | grep -v inet6 | head -n 1 | awk -F ' ' '{print$2}' ; ps aux | grep mysql
192.168.126.129
root       7139  0.0  0.1 113520  1752 pts/0    S    09:50   0:00 /bin/sh ./bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
mysql      7307  0.1 14.6 1141352 194172 pts/0  Sl   09:50   0:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/logs/mysql.logs --pid-file=/usr/local/mysql/mysql.pid --socket=/data/mysql/mysql.sock


[root@localhostmysql]# ifconfig | grep inet | grep -v inet6 | head -n 1 | awk -F ' ' '{print$2}' ; ps aux | grep mysql
192.168.126.131
root       7367  0.0  0.1 113312  1628 pts/0    S    09:50   0:00 /bin/sh ./bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
mysql      7531  0.0 13.5 1141332 192852 pts/0  Sl   09:50   0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/logs/mysql.logs --pid-file=/usr/local/mysql/mysql.pid --socket=/data/mysql/mysql.sock

mycat配置

schema.xmlshell

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <!-- 本配置文件應對雙機單庫多表**水平分片**-->
    <!-- 數據庫配置  -->
    <schema name="zwrdb" checkSQLschema="false" sqlMaxLimit="100">
        <table name="role"  dataNode="dn1" />
        <table name="subject_t"  dataNode="dn1" />
        <table name="suggest"  dataNode="dn1" />
        <table name="cas_user" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2"
               rule="mod-long" />
    </schema>
    <!-- 分片配置  -->
    <dataNode name="dn1" dataHost="test1" database="zwrdb" />
    <dataNode name="dn2" dataHost="test2" database="zwrdb" />

    <!-- 分表分庫 start-->
    <!-- 物理數據庫配置  test1模塊-->
    <dataHost name="test1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostM1" url="192.168.126.129:3306" user="root"
                   password="lizhenghua">
        </writeHost>
    </dataHost>
    <!-- 物理數據庫配置  test2模塊-->
    <dataHost name="test2" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostS1" url="192.168.126.131:3306" user="root"
                   password="lizhenghua">
        </writeHost>
    </dataHost>
    <!-- 分表分庫 end-->
</mycat:schema>

注:數據庫

數據庫模塊配置說明: 庫設置爲zwrdb, 在這個庫裏面的表就是前面三個表都寫入了dn1這塊片節點, 而cas_user分到了dn1和dn2兩個片節點, 分片規則是mod-longswift

分片配置說明:就是dn1和dn2, 它們分別指定的各自的dataHost與共同的databasevim

物理數據庫配置說明:根據兩個不通的dataHost指定兩臺mysql的登陸方式後端

rule.xml

注:修改有關mod-long分片規則屬性, 它默認是3塊分片, 而我這裏只設置了2個dataNode

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <!-- how many data nodes -->
    <property name="count">2</property>
</function>

server.xml

注:修改最後的參數,就是配置mycat的鏈接帳號密碼與庫

	<user name="root" defaultAccount="true">
		<property name="password">root</property>
		<property name="schemas">zwrdb</property>
	    <property name="readOnly">false</property>
		<!-- 表級 DML 權限設置 -->
		<!--
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>
		 -->
	</user>

注:這裏我把mycat的鏈接帳號和密碼都是root

啓動

mycat start

日誌

wrapper.log

STATUS | wrapper  | 2019/04/04 09:56:49 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2019/04/04 09:56:49 | Launching a JVM...
INFO   | jvm 1    | 2019/04/04 09:56:50 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0
INFO   | jvm 1    | 2019/04/04 09:56:52 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO   | jvm 1    | 2019/04/04 09:56:52 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
INFO   | jvm 1    | 2019/04/04 09:56:52 |
INFO   | jvm 1    | 2019/04/04 09:56:55 | MyCAT Server startup successfully. see logs in logs/mycat.log

啓動成功,分片分表日誌寫進mycat.log

端口說明

[root@localhost logs]# netstat -tlnp | grep java
tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN      7466/java
tcp6       0      0 :::9066                 :::*                    LISTEN      7466/java
tcp6       0      0 :::37972                :::*                    LISTEN      7466/java
tcp6       0      0 :::1984                 :::*                    LISTEN      7466/java
tcp6       0      0 :::8066                 :::*                    LISTEN      7466/java
tcp6       0      0 :::46694                :::*                    LISTEN      7466/java

注:8066爲mycat數據鏈接端口, 9066爲mycat管理端口

鏈接說明

mysql -u root -proot -h 192.168.126.128 -P 8066

展現

mysql> show databases;
+----------+
| DATABASE |
+----------+
| zwrdb    |
+----------+
1 row in set (0.00 sec)

mysql> use zwrdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------+
| Tables in zwrdb |
+-----------------+
| role            |
| subject_t       |
| suggest         |
| cas_user        |
+-----------------+
4 rows in set (0.01 sec)

mysql>

管理命令說明

mysql -u root -proot -h 192.168.126.128 -P 9066

 1.節點查詢

mysql> show @@dataNode where schema=zwrdb;
+------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| NAME | DATHOST     | INDEX | TYPE  | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |
+------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| dn1  | test1/zwrdb|     0 | mysql |      0 |   10 | 1000 |     380 |          0 |        0 |       0 |            -1 |
| dn2  | test2/zwrdb|     0 | mysql |      0 |   10 | 1000 |     380 |          0 |        0 |       0 |            -1 |
+------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
2 rows in set (0.10 sec)

注:DATAHOST:表示對應的datahost屬性的值,即數據主機,ACTIVE:表示活躍的鏈接數量,IDLE:表示空閒的鏈接數量。SIZE:表示對應的總鏈接數量

2.心跳

mysql> show @@heartbeat;
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME   | TYPE  | HOST            | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME    | STOP  |
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| hostM1 | mysql | 192.168.126.129 | 3306 |       1 |     0 | idle   |   30000 | 33,5,5       | 2019-04-04 11:00:35 | false |
| hostS1 | mysql | 192.168.126.131 | 3306 |       1 |     0 | idle   |   30000 | 31,4,4       | 2019-04-04 11:00:35 | false |
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
2 rows in set (0.01 sec)

注:RS_CODE狀態以下:
  OK_STATUS=1表明正常狀態。
  ERROR_STATUS =-1 表明鏈接錯誤
  TIMEOUT_STATUS=-2表明鏈接超時
  INIT_STATUS=0表明初始化狀態
若節點發生故障,則會連續進行默認的5個週期檢測,心跳鏈接失敗後就會變成-1,節點故障確認,而後可能發生切換。

3.版本

mysql> show @@version;
+---------------------------------------------+
| VERSION                                     |
+---------------------------------------------+
| 5.6.29-mycat-1.6.6.1-release-20181031195535 |
+---------------------------------------------+
1 row in set (0.01 sec)

4.當前鏈接狀態

mysql> show @@connection;
+------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
| PROCESSOR  | ID   | HOST      | PORT | LOCAL_PORT | USER | SCHEMA | CHARSET | NET_IN | NET_OUT | ALIVE_TIME(S) | RECV_BUFFER | SEND_QUEUE | txlevel | autocommit |
+------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
| Processor0 |    1 | 127.0.0.1 | 9066 |      46274 | root | NULL   | utf8:33 |    321 |    2635 |           422 |        4096 |          0 |     |            |
+------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
1 row in set (0.00 sec)

5.後端鏈接狀態

mysql> show @@backend;
+------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
| processor  | id   | mysqlId | host            | port | l_port | net_in | net_out | life | closed | borrowed | SEND_QUEUE | schema | charset  | txlevel | autocommit |
+------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
| Processor0 |    1 |       2 | 192.168.126.129 | 3306 |  58962 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |    2 |       4 | 192.168.126.129 | 3306 |  58968 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |    3 |       8 | 192.168.126.129 | 3306 |  58970 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |    4 |       5 | 192.168.126.129 | 3306 |  58964 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |    5 |       3 | 192.168.126.129 | 3306 |  58966 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |    6 |       9 | 192.168.126.129 | 3306 |  58972 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |    7 |       6 | 192.168.126.129 | 3306 |  58976 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |    8 |      10 | 192.168.126.129 | 3306 |  58980 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |    9 |       7 | 192.168.126.129 | 3306 |  58978 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   10 |      11 | 192.168.126.129 | 3306 |  58974 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   11 |       2 | 192.168.126.131 | 3306 |  52040 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   12 |       5 | 192.168.126.131 | 3306 |  52046 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   13 |       9 | 192.168.126.131 | 3306 |  52054 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   14 |       8 | 192.168.126.131 | 3306 |  52052 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   15 |       4 | 192.168.126.131 | 3306 |  52044 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   16 |      10 | 192.168.126.131 | 3306 |  52056 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   17 |      11 | 192.168.126.131 | 3306 |  52048 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   18 |       3 | 192.168.126.131 | 3306 |  52042 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   19 |       6 | 192.168.126.131 | 3306 |  52038 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
| Processor0 |   20 |       7 | 192.168.126.131 | 3306 |  52050 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
+------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
20 rows in set (0.00 sec)

6.緩存信息

mysql> show @@cache;
+-------------------------------------+-------+------+--------+------+------+-------------+----------+
| CACHE                               | MAX   | CUR  | ACCESS | HIT  | PUT  | LAST_ACCESS | LAST_PUT |
+-------------------------------------+-------+------+--------+------+------+-------------+----------+
| ER_SQL2PARENTID                     |  1000 |    0 |      0 |    0 |    0 |           0 |        0 |
| SQLRouteCache                       | 10000 |    0 |      0 |    0 |    0 |           0 |        0 |
| TableID2DataNodeCache.TESTDB_ORDERS | 50000 |    0 |      0 |    0 |    0 |           0 |        0 |
+-------------------------------------+-------+------+--------+------+------+-------------+----------+
3 rows in set (0.02 sec)

注:SQLRouteCache: SQL語句路由緩存,TableID2DateNodeCache:緩存表主鍵與分片對應關係,ER_SQL2PARENTID:緩存ER分片中子表與父表對應關係。

7.數據源狀態

mysql> show @@datasource;
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME   | TYPE  | HOST            | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
| dn1      | hostM1 | mysql | 192.168.126.129 | 3306 | W    |      0 |   10 | 1000 |     443 |         0 |          0 |
| dn2      | hostS1 | mysql | 192.168.126.131 | 3306 | W    |      0 |   10 | 1000 |     443 |         0 |          0 |
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
2 rows in set (0.00 sec)
相關文章
相關標籤/搜索