• mycat的部署及测试


    一、基本概念

    Mycat 介绍:是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。Mycat是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),并且要求必须在 JDK7 以上的版本上运行。

    mycat工作原理:基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理 SELECT 查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

    常见的中间件:

    读写分离的好处

    1. 分担单台的服务器的负载。主从只负责各自的写和读,极大程度的缓解 X(写)锁和 S(读)锁争用。
    2. 从库可配置 myisam 引擎,提升查询性能以及节约系统开销。
    3. 增加冗余,提高可用性。

    二、jdk的安装

    1.官网下载jdk

    Java Downloads | Oracle

    2.解压到指定路径

    1. [root@mycat ~]# mkdir /usr/local/java
    2. [root@mycat ~]# tar -xf jdk-8u211-linux-x64.tar.gz -C /usr/local/java

    3.配置环境变量

    1. [root@mycat ~]#vim /etc/profile
    2. export PATH=/usr/local/java/bin:$PATH

    4.使环境变量生效

    [root@mycat ~]# source /etc/profile

    5.查看java版本

    1. [root@localhost ~]# java -version
    2. java version "1.8.0_211"
    3. Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
    4. Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

    三、mycat的安装与配置

    1、下载mycat

     http://dl.mycat.org.cn/

    [root@mycat ~]# wget http://dl.mycat.org.cn/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

    2.解压到指定路径

    [root@mycat ~]# tar -xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local

    3.修改配置文件

    (1)了解mycat下的文件

    1. [root@localhost mycat]# ls
    2. bin catlet conf lib logs tmlogs version.txt

     --bin:可执行命令

    --conf:配置文件

    --lib: 存放jar及其依赖包

    --logs:日志信息

    --tmlogs:临时日志

    --version:版本信息

    (2)修改配置文件

    server.xml:定义用户以及系统相关变量,如端口等。其中用户信息是应用程序连接 mycat 的用户信息

    1. [root@mycat ~]# vim /usr/local/mycat/conf/server.xml
    2. <?xml version="1.0" encoding="UTF-8"?>
    3. <!DOCTYPE mycat:server SYSTEM "server.dtd">
    4. #用户和密码是应用程序连接到 MyCat 使用的.schemas 配置项所对应的值是逻辑数据库的名字,这个名字需要和后面 schema.xml 文件中配置的一致
    5. <mycat:server xmlns:mycat="http://io.mycat/">
    6. <user name="root" defaultAccount="true">
    7. <property name="password">123456</property>
    8. <property name="schemas">TESTDB</property>
    9. </user>
    10. </mycat:server>

    schema.xml:逻辑库定义和表以及分片定义的配置文件

    1. <?xml version="1.0"?>
    2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    3. <mycat:schema xmlns:mycat="http://io.mycat/">
    4. #逻辑库名称,与server.xml的一致 不检查sql 最大连接数 数据库节点名称
    5. <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    6. </schema>
    7. # 此数据节点的名称 主机组 真实数据库名称
    8. <dataNode name="dn1" dataHost="localhost1" database="db1" />
    9. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
    10. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
    11. <heartbeat>select user()</heartbeat>
    12. <writeHost host="master1" url="master1:3306" user="mycat"
    13. password="Qianfeng@123">
    14. <readHost host="slave1" url="slave1:3306" user="mycat" password="Qianfeng@123" />
    15. </writeHost>
    16. <writeHost host="master2" url="master2:3306" user="mycat"
    17. password="Qianfeng@123">
    18. <readHost host="slave2" url="slave2:3306" user="mycat" password="Qianfeng@123" />
    19. </writeHost>
    20. </dataHost>
    21. </mycat:schema>

     注意:
    1)schema标签中的“name”的值和server.xml文件中user标签中的“schemas”值一样。
    2)dataNode标签中的“database”为需要复制的数据库名称,服务器中必须有这个库。
    3)dataHost标签中的“balance”和“switchType”。

    writeType属性
    负载均衡类型,目前的取值有2种:
    1.writeType="0",所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties.
    2.writeType="1",所有写操作都随机的发送到配置的writeHost,1.5以后废弃不推荐。

    switchType属性
    -1表示不自动切换
    1默认值,自动切换
    2基于MySQL主从同步的状态决定是否切换-3基于MySQL galary cluster的切换机制(适合集群)

    (3)启动mycat

    1. #启动mycat
    2. [root@mycat ~]# /usr/local/mycat/bin/mycat start
    3. Starting Mycat-server...
    4. Mycat-server is already running.
    5. #查看mycat是否启动
    6. [root@mycat ~]# /usr/local/mycat/bin/mycat status
    7. Mycat-server is running (38335).
    8. [root@mycat ~]# ss -nplt
    9. State Recv-Q Send-Q Local Address:Port Peer Address:Port
    10. LISTEN 0 1 127.0.0.1:32000 *:* users:(("java",pid=38337,fd=4))
    11. LISTEN 0 128 127.0.0.1:9000 *:* users:(("php-fpm",pid=1012,fd=5),("php-fpm",pid=1011,fd=5),("php-fpm",pid=1004,fd=7))
    12. LISTEN 0 128 *:80 *:* users:(("nginx",pid=951,fd=6),("nginx",pid=949,fd=6))
    13. LISTEN 0 128 *:22 *:* users:(("sshd",pid=941,fd=3))
    14. LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1351,fd=13))
    15. LISTEN 0 50 [::]:1984 [::]:* users:(("java",pid=38337,fd=58))
    16. LISTEN 0 100 [::]:8066 [::]:* users:(("java",pid=38337,fd=87))
    17. LISTEN 0 50 [::]:37476 [::]:* users:(("java",pid=38337,fd=57))
    18. LISTEN 0 50 [::]:46405 [::]:* users:(("java",pid=38337,fd=60))
    19. LISTEN 0 100 [::]:9066 [::]:* users:(("java",pid=38337,fd=83))
    20. LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=941,fd=4))
    21. LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1351,fd=14))

    (4)在服务器上给用户授权

    mysql> grant all on *.* to 'mycat'@'%' identified by 'Qianfeng@123';

    四、测试

    1.测试客户端登录mycat

    语法:mysql -u逻辑用户 -p逻辑密码 -hmycat服务器的主机地址 -P8806(mycat的端口)

                       与server.xml文件中user字节中的信息一致

    1. [root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
    2. mysql> show databases;
    3. +----------+
    4. | DATABASE |
    5. +----------+
    6. | TESTDB |
    7. +----------+
    8. 1 row in set (0.00 sec)

    2、测试读写分离

    balance 属性
    负载均衡类型,目前的取值有 4 种:
    1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
    2. balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 
        互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
    3. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
    4. balance="3", 所有读请求随机的分发到 writerHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

    balance=0

    所有读的信息都发送到master1上

    (1)修改配置文件

    1. [root@mycat conf]# vim schema.xml
    2. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"

     (2)重启mycat

    1. [root@mycat ~]# /usr/local/mycat/bin/mycat restart
    2. Stopping Mycat-server...
    3. Stopped Mycat-server.
    4. Starting Mycat-server...

    (3)客户端登录mycat,并读取信息

    1. [root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
    2. mysql> show tables;
    3. +---------------+
    4. | Tables_in_db1 |
    5. +---------------+
    6. | test1 |
    7. +---------------+
    8. 1 row in set (0.00 sec)
    9. mysql> show tables;
    10. +---------------+
    11. | Tables_in_db1 |
    12. +---------------+
    13. | test1 |
    14. +---------------+
    15. 1 row in set (0.00 sec)

    balance=1

    所有写发送到master1,所有读随机发送在master2,slave1,slave2上

    (1)修改配置信息

    1. [root@mycat conf]# vim schema.xml
    2. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"

    (2) 重启mycat

    1. [root@master ~]# /usr/local/mycat/bin/mycat restart
    2. Stopping Mycat-server...
    3. Stopped Mycat-server.
    4. Starting Mycat-server...

    (3)客户端登录mycat,并查看信息 

    1. [root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
    2. mysql> show tables;
    3. +---------------+
    4. | Tables_in_db1 |
    5. +---------------+
    6. | test4 |
    7. +---------------+
    8. 1 row in set (0.00 sec)
    9. mysql> show tables;
    10. +---------------+
    11. | Tables_in_db1 |
    12. +---------------+
    13. | test3 |
    14. +---------------+
    15. 1 row in set (0.00 sec)
    16. mysql> show tables;
    17. +---------------+
    18. | Tables_in_db1 |
    19. +---------------+
    20. | test2 |
    21. +---------------+
    22. 1 row in set (0.00 sec)
    23. mysql> show tables;
    24. +---------------+
    25. | Tables_in_db1 |
    26. +---------------+
    27. | test4 |
    28. +---------------+
    29. 1 row in set (0.00 sec)
    30. mysql> show tables;
    31. +---------------+
    32. | Tables_in_db1 |
    33. +---------------+
    34. | test3 |
    35. +---------------+
    36. 1 row in set (0.00 sec)

    balance=2

    所有读的信息随机发送到master1,master2,slave1,slave2

    (1)修改配置文件

    1. [root@mycat conf]# vim schema.xml
    2. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"

    (2) 重启mycat

    1. [root@localhost conf]# /usr/local/mycat/bin/mycat restart
    2. Stopping Mycat-server...
    3. Stopped Mycat-server.
    4. Starting Mycat-server...

    (3)客户端登录mycat,并查看信息 

    1. [root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
    2. mysql> show tables;
    3. +---------------+
    4. | Tables_in_db1 |
    5. +---------------+
    6. | test2 |
    7. +---------------+
    8. 1 row in set (0.00 sec)
    9. mysql> show tables;
    10. +---------------+
    11. | Tables_in_db1 |
    12. +---------------+
    13. | test3 |
    14. +---------------+
    15. 1 row in set (0.01 sec)
    16. mysql> show tables;
    17. +---------------+
    18. | Tables_in_db1 |
    19. +---------------+
    20. | test1 |
    21. +---------------+
    22. 1 row in set (0.00 sec)
    23. mysql> show tables;
    24. +---------------+
    25. | Tables_in_db1 |
    26. +---------------+
    27. | test1 |
    28. +---------------+
    29. 1 row in set (0.00 sec)
    30. mysql> show tables;
    31. +---------------+
    32. | Tables_in_db1 |
    33. +---------------+
    34. | test4 |
    35. +---------------+
    36. 1 row in set (0.00 sec)

    balance=3 

    所有读的信息随机发送到slave1 ,slave2

    (1)修改配置文件

    1. [root@mycat conf]# vim schema.xml
    2. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"

     (2)重启mycat

    1. [root@localhost conf]# /usr/local/mycat/bin/mycat restart
    2. Stopping Mycat-server...
    3. Stopped Mycat-server.
    4. Starting Mycat-server...

     (3)客户端登录mycat,并查看信息

    1. [root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
    2. mysql> show tables;
    3. +---------------+
    4. | Tables_in_db1 |
    5. +---------------+
    6. | test3 |
    7. +---------------+
    8. 1 row in set (0.00 sec)
    9. mysql> show tables;
    10. +---------------+
    11. | Tables_in_db1 |
    12. +---------------+
    13. | test3 |
    14. +---------------+
    15. 1 row in set (0.00 sec)
    16. mysql> show tables;
    17. +---------------+
    18. | Tables_in_db1 |
    19. +---------------+
    20. | test4 |
    21. +---------------+
    22. 1 row in set (0.00 sec)

  • 相关阅读:
    justjavac:从辍学到成为Deno核心代码贡献者,我的十年编程生涯
    WEB基础
    MFC 发起 HTTP Post 请求 发送MES消息
    clickhouse常用函数总结
    Pthread 并发编程(三)——深入理解线程取消机制
    PostMan传时间参数&一次性发送多次请求
    HBuilderX选择主题以及自定义主题教程
    TOGAF标准第10版读书会第14场—加速数字化政府建设,离不开这个参考指导模型
    R语言ggplot2可视化:使用ggpubr包的ggline函数可视化分组折线图(点线图、line plot)、linetype参数指定不同分组线型不同
    【JavaScript 算法】二分查找:快速定位目标元素
  • 原文地址:https://blog.csdn.net/2301_78315274/article/details/133735752