.netcore微服务-Mycat
1、前言
1.1 分布式数据库
随着IT行业的迅猛发展,行业应用系统的数据规模呈现爆炸式增长,对数据库的数据处理能力要求越来越高,分布式数据库正是因此应运而生。
分布式数据库特点包括:
透明性:用户不必关心后台数据库的具体实现
扩展性:能够根据系统压力情况进行扩展
可靠性:如果其中一台服务器宕机,备用服务器能够自动切换继续提供服务
高性能:
1.2 Mycat介绍
Mycat(http://www.mycat.io/)是一个支持mysql、sql server等数据库集群化部署的中间件。它由Amoeba和cobar发展而来。
2、负载均衡
3、测试环境
|
服务器 |
Mycat |
Mysql-master |
Mysql-slave |
Mysql-master-standby |
Mysql-master-standby |
|
IP |
127.0.0.1 |
10.3.30.161 |
10.3.30.238 |
120.77.80.215 |
10.3.6.84 |
|
Port |
8066/9066 |
3306 |
3306 |
3306 |
3306 |
|
Account |
root 123456 |
test 123456 |
test 123456 |
test 123456 |
test 123456 |
4、测试脚本
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');
5、软件安装
首先安装mycat-server、mycat-eye、zookeeper和navicat for mysql
6、服务启动
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.1navicat连接
使用navicat连接mycat,默认端口为8066,密码123456
6.1.3.2DOS链接
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、写集群
7.1 拓扑图
7.2 配置文件
<?xml version="1.0"?>
<!DOCTYPEmycat:schemaSYSTEM"schema.dtd">
<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、主从配置
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>
9、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集群的目的。
10、注意事项
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就好了。
.netcore微服务-Mycat的更多相关文章
- (1)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 什么是微服务架构,.netCore微服务选型
开发工具:VS2017 .Net Core 2.1 什么是微服务?单体结构: 缺点: 1)只能采用同一种技术,很难用不同的语言或者语言不同版本开发不同模块: 2)系统耦合性强,一旦其中一个模块有问题, ...
- (1).NET CORE微服务 Micro-Service ---- 什么是微服务架构,.netCore微服务选型
开发工具:VS2017 .Net Core 2.1 什么是微服务?单体结构: 缺点:1)只能采用同一种技术,很难用不同的语言或者语言不同版本开发不同模块:2)系统耦合性强,一旦其中一个模块有问题,整个 ...
- 什么是微服务架构,.netCore微服务选型
什么是微服务架构,.netCore微服务选型 https://www.cnblogs.com/uglyman/p/9182485.html 开发工具:VS2017 .Net Core 2.1 什么是微 ...
- .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一)
原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一) 写下此文章只为了记录Surging微服务学习过程,并且分享给广大想学习surging的基友,方便广大 ...
- .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)
原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图: 以上可以看出项目结构可以划分为4大块,1是surging的核心底层,2,3,4都可以 ...
- .NETCore微服务探寻(一) - 网关
前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目 ...
- .NETCore微服务探寻(三) - 分布式日志
前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目 ...
- .NETCore微服务探寻(二) - 认证与授权
前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目 ...
- .NETCore微服务探寻(三) - 远程过程调用(RPC)
前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目 ...
随机推荐
- UWP入门(四)--设置控件样式
原文:UWP入门(四)--设置控件样式 官方定义:可以使用 XAML 框架通过多种方式自定义应用的外观. 通过样式可以设置控件属性,并重复使用这些设置,以便保持多个控件具有一致的外观. 可分享至不同e ...
- Auto updater for my side loaded UWP apps
原文: Auto updater for my side loaded UWP apps As I described before, i have a few tasks to solve for ...
- 论文阅读计划2(Deep Joint Rain Detection and Removal from a Single Image)
Deep Joint Rain Detection and Removal from a Single Image[1] 简介:多任务全卷积从单张图片中去除雨迹.本文在现有的模型上,开发了一种多任务深 ...
- Qt4.7.4下单独编译QtWebkit
最近编译出了Qt4.7.4的嵌入式版本,但没有编译QtWebkit库.在编译一个使用Webkit的工程时出错,而根据工程的需要,要单独编译QtWebkit库. 由于不想再次编译整个的Qt库,于是 ...
- QT在linux环境下读取和设置系统时间(通过system来直接调用Linux命令,注意权限问题)
QT在Linux环境下读取和设置系统时间 本文博客链接:http://blog.csdn.NET/jdh99,作者:jdh,转载请注明. 环境: 主机:Fedora12 开发软件:QT 读取系统时间 ...
- Windows线程生灭(图文并茂)
一.线程创建 Windows线程在创建时会首先创建一个线程内核对象,它是一个较小的数据结构,操作系统通过它来管理线程.新线程可以访问进程内核对象的所有句柄.进程中的所有内存及同一进程中其它线程的栈. ...
- SQL基础复习1
一.概述 SQL语言组成:DDL,DCL,DML 二.数据定义 1.模式定义(Schema) Schema这个东西一直感觉不大明白,一直以为就是对表的字段定义则被称为Schema,在复习数据库理论中才 ...
- springmvc拦截请求
springmvc.xml <!--拦截请求 --> <mvc:interceptors> <mvc:interceptor> <!-- 要拦截的请求类型 / ...
- 快速开发第一个SpringBoot应用
通过笔者这段实践SpringBoot的学习,发现自从使用了SpringBoot后,就再也回不去SpringMVC了,因为相比于SpringMVC,SpringBoot真是太高效率了.下面我们看看它效率 ...
- Zookeeper详解-安装(四)
ZooKeeper服务器是用Java创建的,它在JVM上运行.你需要使用JDK 6或更高版本. 步骤1:验证Java安装 相信你已经在系统上安装了Java环境.现在只需使用以下命令验证它. $ jav ...