分享

.NET Core 微服务-Mycat

 兰亭文艺 2019-08-06

作者:AntSpace

链接:https://www.cnblogs.com/xuyongsong/p/11220789.html

一、前言

1.1  分布式数据库

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

分布式数据库特点包括:

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

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

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

高性能:

1.2  Mycat介绍

Mycat(http://www./)是一个支持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 FilesJavajdk1.8.0_131

CLASSPATH=.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

Path =%JAVA_HOME%in;%JAVA_HOME%jrein;

6.1.2、启动mycat服务

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

cmd 

cd /d D:EC-OFCJavaMycatMycat-server-1.6mycatin

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 FilesMySQLMySQL Server 5.7in
mysql -uroot -p123456 -P8066

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

6.2 、启动zookeeper

D:EC-OFC开发工具zookeeper-3.4.10inzkServer.bat

6.3 、启动mycat-eye

D:EC-OFCJavaMycatmycat-webstart.bat

七、写集群

7.1  拓扑图

7.2  配置文件

<?xml version='1.0'?>
<!DOCTYPEmycat:schemaSYSTEM'schema.dtd'>
<mycat:schema xmlns:mycat='http://cat/'>
<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:ProgramDataMySQLMySQL Server 5.7my.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 STATUSG   #查看主从复制是否配置成功

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

8.4  配置文件

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

<mycat:schema xmlns:mycat='http://cat/'>
<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 statusG信息中有错误提示,可根据错误提示进行更正。

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就好了。


编号346,输入编号直达本文

●输入m获取文章目录

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多