Linux - MyCat 读写分离

时间:2021-06-28 19:25:19   收藏:0   阅读:0
# 本次实验 共四台机器 
# A: 10.0.0.11 为client
# B: 10.0.0.12 为主节点
# C: 10.0.0.13 为从节点1
# D: 10.0.0.14 为从节点2

# 首先配置BCD主从复制 (这里不做重复描写,参考我前面的文档)
# 开始安装mycat相关包,以及数据库客户端
[root@centos8 ~]#yum -y install java mariadb
#确认安装成功
[root@centos8 ~]#java -version
openjdk version "1.8.0_201"
OpenJDK Runtime Environment (build 1.8.0_201-b09)
OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)
#下载并安装
[root@centos8 ~]#wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
[root@centos8 ~]#mkdir /apps
[root@centos8 ~]#tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz 
-C /apps
#配置环境变量
[root@centos8 ~]#echo PATH=/apps/mycat/bin:$PATH > /etc/profile.d/mycat.sh
[root@centos8 ~]#source /etc/profile.d/mycat.sh

#启动mycat
[root@centos8 ~]#mycat start
Starting Mycat-server...

# 在wrapper.log能查询到相关信息
STATUS | wrapper  | 2021/06/26 23:28:36 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2021/06/26 23:28:36 | Launching a JVM...
INFO   | jvm 1    | 2021/06/26 23:28:39 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO   | jvm 1    | 2021/06/26 23:28:39 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
INFO   | jvm 1    | 2021/06/26 23:28:39 | 
INFO   | jvm 1    | 2021/06/26 23:28:40 | MyCAT Server startup successfully. see logs in logs/mycat.log

# 配置server.xml,改变serverPort和root的登录密码

<property name="serverPort">3306</property> <property name="managerPort">9066</property>

    <user name="root">
        <property name="password">123456</property>
        <property name="schemas">TESTDB</property>
        <property name="defaultSchema">TESTDB</property>

#配置schema.xml
[08:43:34 root@centos8 conf]#cat schema.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--?xml version="1.0"?-->
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        <!--table name="students" dataNode="jdbc_dn1" rule="rule1" /-->
    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="hellodb" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="host1" url="10.0.0.12:3306" user="admin" password="123456">
            <readHost host="host2" url="10.0.0.13:3306" user="admin" password="123456" />
            <readHost host="host3" url="10.0.0.14:3306" user="admin" password="123456" />
        </writeHost>
    </dataHost>
</mycat:schema>

# schema.xml中配置有admin账号,因此需要在主从节点建立admin账号,并给予权限GRANT ALL ON *.* TO admin@10.0.0.% IDENTIFIED BY 123456  WITH GRANT
OPTION;
MariaDB [(none)]> select user,host from mysql.user;
+----------------+-----------+
| user           | host      |
+----------------+-----------+
| admin          | 10.0.0.%  |

# 重启mycat服务
[08:25:05 root@centos8 ~]#mycat restart
[08:25:12 root@centos8 ~]#mycat console
Running Mycat-server...
Mycat-server is already running.

[08:48:36 root@centos8 ~]#mysql -uroot -p123456 -h127.0.0.1 -P3306 -DTESTDB

MySQL [TESTDB]> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.001 sec)

MySQL [TESTDB]> use TESTDB;
Database changed
MySQL [TESTDB]> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes           |
| coc               |
| courses           |
| scores            |
| students          |
| teachers          |
| toc               |
+-------------------+
7 rows in set (0.012 sec)

MySQL [TESTDB]> create table t1(id int);
Query OK, 0 rows affected (0.014 sec)

# 读的话,只会在C,D节点循环
MySQL [TESTDB]> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|          14 |
+-------------+
1 row in set (0.001 sec)

MySQL [TESTDB]> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|          13 |
+-------------+
1 row in set (0.001 sec)

MySQL [TESTDB]> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|          14 |
+-------------+

# 新增的id为主节点,证明其写已经分离
MySQL [TESTDB]> insert t1(id) values(@@server_id);
Query OK, 1 row affected (0.003 sec)

MySQL [TESTDB]> select * from t1;
+------+
| id   |
+------+
|   12 |
+------+
1 row in set (0.006 sec)

# 用通用日志在主从节点观察

# 主节点
[08:28:34 root@centos8 ~]#tail -f /var/lib/mysql/centos8.log 
210627  8:27:44        16 Query    select user()
210627  8:27:54        12 Query    select user()

210627  8:30:23        12 Query    SET names utf8;create table t1(id int)
210627  8:30:24        21 Query    select user()
210627  8:30:34        24 Query    select user()

210627  8:33:28        12 Query    insert t1(id) values(@@server_id)
210627  8:33:34        21 Query    select user()
210627  8:33:44        24 Query    select user()
210627  8:33:54        23 Query    select user()

# 从节点C
[08:29:18 root@centos8 ~]#tail -f /var/lib/mysql/centos8.log
210627  8:28:01        11 Query    show variables like %general_log%
210627  8:28:03        12 Query    select user()
210627  8:28:13        15 Query    select user()
210627  8:28:23        13 Query    select user()

210627  8:30:23        10 Query    create table t1(id int)
            13 Query    select user()
210627  8:30:33        14 Query    select user()
210627  8:30:43        12 Query    select user()
210627  8:30:53        17 Query    select user()
210627  8:31:03        16 Query    select user()
210627  8:31:13        15 Query    select user()
210627  8:31:23        13 Query    select user()
210627  8:31:33        14 Query    select user()
210627  8:31:43        12 Query    select user()
210627  8:31:50        17 Query    SET names utf8;select @@server_id
210627  8:31:52        16 Query    SET names utf8;select @@server_id
            15 Query    SET names utf8;select @@server_id

210627  8:33:03        12 Query    select user()
210627  8:33:13        17 Query    select user()
210627  8:33:23        16 Query    select user()
210627  8:33:28        10 Query    BEGIN
            10 Query    COMMIT /* implicit, from Xid_log_event */
210627  8:33:33        15 Query    select user()
210627  8:33:43        13 Query    select user()
210627  8:33:46        14 Query    SET names utf8;select * from t1
210627  8:33:53        12 Query    select user()
210627  8:34:03        17 Query    select user()
210627  8:34:13        16 Query    select user()
210627  8:34:23        15 Query    select user()

# 从节点D
[08:29:29 root@centos8 ~]#tail -f /var/lib/mysql/centos8.log
210627  8:28:24        13 Query    select user()
210627  8:28:34        12 Query    select user()
210627  8:28:44        14 Query    select user()
210627  8:28:54        13 Query    select user()

210627  8:31:34        15 Query    select user()
210627  8:31:44        16 Query    SET names utf8;select @@server-id
            14 Query    select user()
210627  8:31:46        13 Query    SET names utf8;select @@server_id
210627  8:31:52        12 Query    SET names utf8;select @@server_id
210627  8:31:54        15 Query    SET names utf8;select @@server_id
            16 Query    select user()
210627  8:32:04        14 Query    select user()
210627  8:32:14        13 Query    select user()

210627  8:32:54        13 Query    select user()
210627  8:33:04        12 Query    select user()
210627  8:33:14        15 Query    select user()
210627  8:33:24        16 Query    select user()
210627  8:33:28        10 Query    BEGIN
            10 Query    COMMIT /* implicit, from Xid_log_event */
210627  8:33:34        14 Query    select user()
210627  8:33:44        13 Query    select user()
210627  8:33:54        12 Query    select user()
210627  8:34:04        15 Query    select user()

# 报错分析:重启mycat报错
#1> 标签问题,出现如下面这个类似的,一般是标签问题,这是XML语法检查,每个大标签应该有自己的结束标签
INFO   | jvm 1    | 2021/06/26 23:43:36 | Caused by: org.xml.sax.SAXParseException; lineNumber: 33; columnNumber: 4; The element type "writeHost" must be terminated by the matching end-tag "</writeHost>".

#2> 有两个解决办法
INFO   | jvm 1    | 2021/06/27 00:05:16 | Caused by: io.mycat.config.util.ConfigException: schema TESTDB didnt config tables,so you must set dataNode property!

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> #方法1 把之前的randomDataNode改成databNode
        <!--table name="students" dataNode="jdbc_dn1" rule="rule1" /--> # 方法2,加上table
    </schema>


#3> 这个出现system标签问题,那就需要去查看server.xml,明显是中间system标签中间有不是小标签的内容,类似中间有不是xml的语法,但是未加<>这些
INFO   | jvm 1    | 2021/06/27 08:09:19 | Caused by: io.mycat.config.util.ConfigException: org.xml.sax.SAXParseException; lineNumber: 89; columnNumber: 11; The content of element type "system" must match "(property)*".

#4> 如果出现类似空指针的问题,请先检查文件格式,博主遇到很多都是因为windows格式传到linux出问题

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!