mysql 中间件 mycat

中间件介绍

mycat 搭建(双主双从架构)

特点

1.只是作为代理供客户端访问,客户端访问请求过来后再由mycat 去后端数据库操作。做读写分离,负载均衡使用,数据库挂了不会启动,会检查后端数据库存活情况,宕机的不再访问。

2.作为代理给客户端访问的是mycat 配置的虚拟数据库虚拟用户密码,这样有一定安全防护作用

3.client  ----> 虚拟用户/虚拟库 ----> 真是用户/真实库

Tips

双主双从架构,写入时最好是单主写入,第一个主挂了再去第二个主写入。

mycat 为解决单点故障最好配置keepalived 
View Code

搭建配置

后端数据库端配置

create database bbs;
插入数据到bbs中
grant all on *.* to bbsuser@'192.168.231.104'  identified by "1qaz@WSX";
#授权mycat能够访问后端数据库
flush privileges;
show grants for bbsuser@'192.168.231.104';
View Code

mycat 配置(安装省略)

vi server.xml

删除用户区域其他配置,只保留有用配置。
<user name="mycatuser">        #client连接的虚拟用户
<property name="password">123456</property> #client 连接密码 
<property name="schemas">bbsdb</property>     #虚拟db 与schame 中对应
</user>    
View Code

vi schemas.xml

<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="bbsdb" checkSQLschema="false" sqlMaxLimit="100" 
          dataNode="dn1">     
        <!-- 标签中添加了dataNode="dn1" -->
    <!--由于为针对特定的表做读写所以中间区域删除了关于表的定义-->
    </schema>
    
        <dataNode name="dn1" dataHost="localhost1" database="bbs" />                                                 
        <!-- dn1对应前面的dataNode,localhost1可自定义对应后面localhost1,bbs为真 
               实数据库名 -->
    
       <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="hostM1" url="192.168.231.100:3306" 
                   user="bbsuser" password="1qaz@WSX">          
               <!-- host自定义,url真实IP地址端口,user 数据库授权的用户,password 
                   授权用户的认证密码 -->
            <readHost host="hostS1" url="192.168.231.102:3306" 
                           user="bbsuser" password="1qaz@WSX" /> <!-- slave1 -->
            <readHost host="hostS2" url="192.168.231.103:3306" 
                          user="bbsuser" password="1qaz@WSX" /> <!-- slave2 -->
        </writeHost>
        
                <writeHost host="hostM2" url="192.168.231.100:3306"     
                  user="bbsuser" password="1qaz@WSX">         
                <!-- host自定义,url真实IP地址端口,user 数据库授权的用户,password 
                   授权用户的认证密码 -->
            <readHost host="hostS1" url="192.168.231.102:3306" 
                          user="bbsuser" password="1qaz@WSX" /> <!-- slave1 -->
            <readHost host="hostS2" url="192.168.231.103:3306" 
                          user="bbsuser" password="1qaz@WSX" /> <!-- slave2 -->
        </writeHost>
    </dataHost>
</mycat:schema>


<!-- balance 0 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上,
全部的 readHost 与第二个writeHost 参与 select 语句的负载均衡,
所有读操作都随机的在 writeHost、 readhost 上分发, 
所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读 
        压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有 
-->     

<!-- writeType="0",所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生 
   存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件 
   中:dnindex.properties .
  "1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
   "2",官方文档没有介绍。
-->
View Code

/opt/mycat/bin/mycat start        #注意启动前必须把主机名在hosts文件中配置解析否则无法启动

mysql -umycatuser -p'123456' -h'192.168.231.104'  -P8066      #8066为mycat 端口

 关于读写分离,负载配置

<!-- balance 0 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上,
    1 全部的 readHost 与第二个writeHost 参与 select 语句的负载均衡,
    2 所有读操作都随机的在 writeHost、 readhost 上分发, 
    3 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有 
-->     

<!-- writeType="0",所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
     "1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
     "2",官方文档没有介绍。
-->
View Code
原文地址:https://www.cnblogs.com/fanggege/p/11221626.html