.NET Core 微服务-Mycat

来自:Ant-Beginning

一、前言


1.1? 分布式数据库


随着IT行业的迅猛发展,行业应用系统的数据规模呈现爆炸式增长,对数据库的数据处理能力要求越来越高,分布式数据库正是因此应运而生。


分布式数据库特点包括:


透明性:用户不必关心后台数据库的具体实现


扩展性:能够根据系统压力情况进行扩展


可靠性:如果其中一台服务器宕机,备用服务器能够自动切换继续提供服务


高性能:


1.2? Mycat介绍


Mycat(http://www.mycat.io/)是一个支持mysql、sql server等数据库集群化部署的中间件。它由Amoeba和cobar发展而来。


二、负载均衡


三、测试环境



四、测试脚本


CREATE TABLE `employee` ( 
?`ID` int(11) NOT NULL,
?`NAME` varchar(100) default NULL,
?`SHARDING_ID` int(11) NOT NULL,
?PRIMARY KEY ?(`ID`)
)
INSERT INTO employee(ID,NAME,SHARDING_ID) VALUES ('6', 'amos', '10000');


五、软件安装


首先安装mycat-server、mycat-eye、zookeeper和navicat for mysql


六、服务启动


6.1 、启动mycat


6.1.1、安装java环境


1、? 安装jdk


2、? 配置环境变量


JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131

CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

Path =%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;


6.1.2、启动mycat服务


在windows8操作系统上启动mycat服务,命令如下


cmd?

cd /d D:\EC-OFC\Java\Mycat\Mycat-server-1.6\mycat\bin

startup_nowrap.bat


6.1.3、连接mycat


6.1.3.1、navicat连接


使用navicat连接mycat,默认端口为8066,密码123456


6.1.3.2、DOS链接


cmd
cd /d C:\Program Files\MySQL\MySQL Server 5.7\bin
mysql -uroot -p123456 -P8066


注意:如果需要使用如show @@datasource命令时,需要连接9066端口而不是8066


6.2 、启动zookeeper


D:\EC-OFC\开发工具\zookeeper-3.4.10\bin\zkServer.bat


6.3 、启动mycat-eye


D:\EC-OFC\Java\Mycat\mycat-web\start.bat


七、写集群


7.1? 拓扑图


7.2? 配置文件


xml version="1.0"?>

<mycat:schema xmlns:mycat="http://io.mycat/">
? ?<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
? ? ? ?<table name="employee" primaryKey="ID" dataNode="dn1,dn2"/>
? ?schema>
? ?<dataNode name="dn1" dataHost="host1" database="db1"/>
? ?<dataNode name="dn2" dataHost="host2" database="db1"/>
? ?<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
? ? ? ? ? ? ?writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

? ? ? ?<heartbeat>select user()heartbeat>
? ? ? ?<writeHost host="hostM1" url="120.77.80.215:3306" user="test" password="123456">
? ? ? ?writeHost>
? ?dataHost>
? ?<dataHost name="host2" maxCon="1000" minCon="10" balance="1"
? ? ? ? ? ? ?writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

? ? ? ?<heartbeat>select user()heartbeat>
? ? ? ?<writeHost host="hostM2" url="10.3.30.238:3306" user="test" password="123456">
? ? ? ?writeHost>
? ?dataHost>
mycat:schema>


八、主从配置


8.1? 业务要求


Master挂掉时,Slave还能提供读服务。


8.2? 配置步骤



注意每台mysql服务器的server-id必须唯一


第一步:


在10.3.30.161中创建一个10.3.30.238主机中可以登录的MySQL用户


用户:mysql238

密码:123456


mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql238’@’10.3.30.238’ IDENTIFIED BY ‘123456’;

mysql>FLUSH PRIVILEGES;


第二步:


需要先在C:\ProgramData\MySQL\MySQL Server 5.7\my.ini文件中添加log-bin=mysql-bin


查看10.3.30.161MySQL服务器二进制文件名与位置

mysql>SHOW MASTER STATUS;



第三步:


告知二进制文件名与位置


在10.3.30.238中执行:


mysql>CHANGE MASTER TO

MASTER_HOST='10.3.30.161',

MASTER_USER='mysql238',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mybin.000001',

MASTER_LOG_POS=154;




完成主从复制配置


8.3? 验证配置


在10.3.30.238中


mysql> START SLAVE;? ?#开启复制

mysql>SHOW SLAVE STATUS\G? ?#查看主从复制是否配置成功



当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常


8.4? 配置文件


switchType='-1'意味着当主挂掉的时候,不进行自动切换,即hostS1并不会被提升为主,仍只提供读的功能。这就避免了将数据写进slave的可能性,单纯的MySQL主从集群并不允许将数据写进slave中,除非配置的是双master。


<mycat:schema xmlns:mycat="http://io.mycat/">
? ?<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
? ? ? ?<table name="employee" primaryKey="ID" dataNode="dn1"/>
? ?schema>
? ?<dataNode name="dn1" dataHost="host1" database="db1"/>
? ?<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
? ? ? ? ? ? ?writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">

? ? ? ?<heartbeat>select user()heartbeat>
? ? ? ?<writeHost host="hostM1" url="10.3.30.161:3306" user="test" password="123456">
? ? ? ? ? ?<readHost host="hostR1" url="120.77.80.215:3306" user="test" password="123456"/>
? ? ? ?writeHost>
? ? ? ?<writeHost host="hostS1" url="10.3.30.238:3306" user="test" password="123456">
? ? ? ?writeHost>
? ?dataHost>
mycat:schema>


九、Haproxy配置


9.1? 拓扑图



9.2? 配置文件


此处为haproxy配置文件


#global
?maxconn 1500
?nbproc ?1
?daemon

defaults
? ? ? ?mode tcp
? ? ? ?retries 3
? ? ? ?option ?abortonclose
? ? ? ?maxconn 32000
? ? ? ?timeout connect 300000ms
? ? ? ?timeout client ?300000ms
? ? ? ?timeout server ?300000ms
? ? ? ?log 127.0.0.1 ? local0 err
listen admin_stats
? ? ? ?bind :48800
? ? ? ?stats uri /admin-status
? ? ? ?stats auth admin:admin
? ? ? ?mode http
? ? ? ?option httplog
listen mycat_servers
? ? ? ?bind :3307 ## 绑定端口
? ? ? ?mode tcp
? ? ? ?option tcplog
? ? ? ?#balance source
? ? ? ?server server238 10.3.30.238:8066 check port 8066 weight 1 check
? ? ? ?server server84 10.3.6.84:8066 check port 8066 weight 1 check


mysql客户端或者应用程序可以通过如上配置的127.0.0.1:3307端口链接haproxy实现链接mycat集群的目的。


十、注意事项


1、主主复制配置文件中auto_increment_increment和auto_increment_offset只能保证主键不重复,却不能保证主键有序。


2、当配置完成Slave_IO_Running、Slave_SQL_Running不全为YES时,show slave status\G信息中有错误提示,可根据错误提示进行更正。


3、Slave_IO_Running、Slave_SQL_Running不全为YES时,大多数问题都是数据不统一导致。


常见出错点:


1、两台数据库都存在db数据库,而第一台MySQL db中有tab1,第二台MySQL db中没有tab1,那肯定不能成功。


2、已经获取了数据的二进制日志名和位置,又进行了数据操作,导致POS发生变更。在配置CHANGE MASTER时还是用到之前的POS。


3、stop slave后,数据变更,再start slave。出错。

终极更正法:重新执行一遍CHANGE MASTER就好了。

推荐↓↓↓
DotNet程序员
上一篇:ASP.NET Core 奇淫技巧之动态WebApi 下一篇:.NET Core 3.0 Preview 7 发布