zoukankan      html  css  js  c++  java
  • Mysql读写分离之Mycat

    Mycat 是一个开源的分布式数据库系统,是一个实现了 Mysql 协议的服务器,前端用户可以把它看作是一个数据库代理,用 Mysql Mysql 客户端工具和命令行访问,而其后端可以用原生协议与个 Mysql 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端 Mysql 服务器里或者其他数据库里。

    • Mycat端口:
      • 数据端口 8066
      • 管理端口 9066

    部署Mycat


    环境准备

    ## 用 hostnamectl set-hostname 根据角色更改主机名
    ## 关闭防火墙和selinux
    [root@mycat ~]# systemctl stop firewalld
    [root@mycat ~]# systemctl disable firewalld
    [root@mycat ~]# setenforce 0
    ## 更改 /etc/hosts 文件
    [root@mycat ~]# cat >/etc/hosts << EOF
    192.168.1.1 mycat
    192.168.1.2 master
    192.168.1.3 slave1
    192.168.1.4 slave2
    EOF
    ## 分发到其他服务器上
    [root@mycat ~]# scp /etc/hosts root@master:/etc/hosts
    [root@mycat ~]# scp /etc/hosts root@slave1:/etc/hosts
    [root@mycat ~]# scp /etc/hosts root@slave2:/etc/hosts
    ## 在 master、slave1和slave2做Mysql一主双从复制(M-S-S)

    安装Mycat
    Mycat官方

    ## Mycat依赖于Java环境
    [root@mycat ~]# yum install java -y
    [root@mycat ~]# 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)
    ## 下载Mycat
    [root@mycat ~]# wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
    [root@mycat ~]# mkdir /soft/
    [root@mycat ~]# tar xf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /soft/

    配置应用程序连接 Mycat 账户密码

    ## 在配置文件最低下有 Mycat 账号密码和对应的权限配置
    [root@mycat ~]# vim /soft/mycat/conf/server.xml
    
            <!-- 应用连接 mycat 账户(defaultAccount默认连接用户,false=否,true=是) -->
            <user name="test" defaultAccount="true">
                    <!-- 应用连接 mycat 密码 -->
                    <property name="password">123456</property>
                    <!-- 针对哪个库进行授权,多库用逗号隔开 -->
                    <property name="schemas">test,www</property>
    
                    <!-- 表级 DML 权限设置(check是否开启,false=否,true=是) -->
                    <privileges check="false">
                            <!-- 针对数据下的所有表授权(1=有,0=没有,分别对应:insert,update,select,delete) -->
                            <schema name="TEST" dml="0110" >
                                    <!-- 针对数据下的单个表授权 -->
                                    <table name="t1" dml="0000"></table>
                                    <table name="t2" dml="1111"></table>
                            </schema>
                    </privileges>
            </user>
    
            <user name="www">
                    <property name="password">123456</property>
                    <property name="schemas">www</property>
                    <!-- 是否只读 -->
                    <property name="readOnly">false</property>
            </user>

    配置 Mycat 连接后端数据库

    • balance 负载均衡轮询
      • balance="0" 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
      • balance="1" 所有的主机都参与 select 语句的负载均衡, 但写语句还是由 writeHost
      • balance="2" 所有读操作都随机的在 writeHost、readhost 上分发。
    • writeType 负载均衡状态
      • writeType="0" 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
      • writeType="1" 所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。

    作者:Johnny_Kam
    链接:https://www.jianshu.com/p/4e15cad5ce6a
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    [root@mycat ~]# vim /soft/mycat/conf/schema.xml 
    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
         <!-- 定义逻辑库(逻辑库名、是否分片、返回最大行数、数据节点) -->
         <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema>
         <schema name="www" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"> </schema>
        <!-- 定义数据节点(数据节点名、数据库实例、真实数据库名) -->
        <dataNode name="dn1" dataHost="dn1pool" database="test" />
        <dataNode name="dn2" dataHost="dn2pool" database="www" />
        <!-- 定义 test 数据库实例(实例名、最大连接数、最初连接数、负载均衡轮询、负载均衡状态、数据库类型、连接类型、是否自动切换、) -->
        <dataHost name="dn1pool" maxCon="1000" minCon="10" balance="1"
            writeType="0" dbType="mysql" dbDriver="native" switchType="1">
            <!-- 健康检查 -->
            <heartbeat>select user()</heartbeat>
            <!-- 定义读写主机 , 可以定义多个 -->
            <writeHost host="master" url="master:3306" user="test" password="Sgy123.com">
                <readHost host="slave1" url="slave1:3306" user="test" password="Sgy123.com" />
                <readHost host="slave2" url="slave2:3306" user="test" password="Sgy123.com" />
            </writeHost>
         </dataHost>
         <dataHost name="dn2pool" maxCon="1000" minCon="10" balance="1"
             writeType="0" dbType="mysql" dbDriver="native" switchType="1">
            <!-- 健康检查 -->
            <heartbeat>select user()</heartbeat>
                <writeHost host="master" url="master:3306" user="www" password="Sgy123.com">
                    <readHost host="slave1" url="slave1:3306" user="www" password="Sgy123.com" />
                    <readHost host="slave2" url="slave2:3306" user="www" password="Sgy123.com" />
                </writeHost>
        </dataHost>
    </mycat:schema>

    配置 master 上添加相应的用户和数据库和模拟数据

    ## 模拟数据省略。。。
    mysql> create databse test;
    mysql> create databse www;
    ## 模拟数据省略。。。
    mysql> grant all on *.* to test@'192.168.1.%' identified by 'Sgy123.com';
    mysql> grant all on www.* to www@'192.168.1.%' identified by 'Sgy123.com';

    启动 Mycat 中间件

    [root@mycat conf]# /soft/mycat/bin/mycat start
    Starting Mycat-server...
    [root@mycat logs]# lsof -i :8066
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    java 7905 root 81u IPv6 107719 0t0 TCP *:8066 (LISTEN)
    [root@mycat logs]# lsof -i :9066
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    java 7905 root 77u IPv6 107717 0t0 TCP *:9066 (LISTEN)

    连接 Mycat 中间件

    [root@mycat ~]# mysql -P8066 -utest -p'123456' -h127.0.0.1
    [root@mycat ~]# mysql -P9066 -utest -p'123456' -h127.0.0.1
    
    [root@mycat ~]# mysql -P8066 -uwww -p'123456' -h127.0.0.1
    [root@mycat ~]# mysql -P9066 -uwww -p'123456' -h127.0.0.1
  • 相关阅读:
    什么是restful风格?
    android中设置控件获得焦点
    Android中Parcelable的原理和使用方法
    webstorm快捷键大全
    HTTP状态码
    三行代码写爬虫
    HTTrackPortable
    安装mac系统
    Vue常用的操作指令
    什么样的人不适合当程序员呢?
  • 原文地址:https://www.cnblogs.com/songguoyou/p/11883870.html
Copyright © 2011-2022 走看看