中间件介绍
mycat 搭建(双主双从架构)
特点
1.只是作为代理供客户端访问,客户端访问请求过来后再由mycat 去后端数据库操作。做读写分离,负载均衡使用,数据库挂了不会启动,会检查后端数据库存活情况,宕机的不再访问。
2.作为代理给客户端访问的是mycat 配置的虚拟数据库虚拟用户密码,这样有一定安全防护作用
3.client ----> 虚拟用户/虚拟库 ----> 真是用户/真实库
Tips
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
双主双从架构,写入时最好是单主写入,第一个主挂了再去第二个主写入。
mycat 为解决单点故障最好配置keepalived
搭建配置
后端数据库端配置
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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';
mycat 配置(安装省略)
vi server.xml
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
删除用户区域其他配置,只保留有用配置。 <user name="mycatuser"> #client连接的虚拟用户 <property name="password">123456</property> #client 连接密码 <property name="schemas">bbsdb</property> #虚拟db 与schame 中对应 </user>
vi schemas.xml
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<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",官方文档没有介绍。 -->
/opt/mycat/bin/mycat start #注意启动前必须把主机名在hosts文件中配置解析否则无法启动
mysql -umycatuser -p'123456' -h'192.168.231.104' -P8066 #8066为mycat 端口
关于读写分离,负载配置
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!-- 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",官方文档没有介绍。 -->