.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技术栈的微服务项目 ...
随机推荐
- Android零基础入门第38节:初识Adapter
原文:Android零基础入门第38节:初识Adapter 在上一节一起了解了ListView的简单使用,那么本节继续来学习与ListView有着千丝万缕的Adapter. 一.了解MVC模式 在开始 ...
- asp.net 调用带证书的webservice解决办法
最近在朋友弄一个调整省政府政务工作流的程序.. 需要把当前的信息推送到政务网上,采用的是带证书的https webservice.. 下面说一下实现过程 第一步,引用webservice地址,删除we ...
- 指针与 const --- 指针常量与常量指针
注:该文主要来源于 网易公开课之<C++ 程序设计入门(上)>课件. 在 C 语言标准中,const 修饰的变量称之为 只读变量, 在 C++ 语言标准中,const 修饰的变量称之为 常 ...
- Mono 4.0 发布,开源跨平台 .Net 框架
快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...
- 使用 Python 识别并提取图像中的文字
1. 介绍 介绍使用 python 进行图像的文字识别,将图像中的文字提取出来,可以帮助我们完成很多有趣的事情. 2. 必备工具 tesseract-ocr 下载地址: https://github. ...
- (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
原生js实现放烟花效果,点击鼠标,然后随机向四周扩散,! 思路: 1.首先烟花是五颜六色的,所以我们先写一个随机颜色的函数: 2.创建一个制造烟花的构造函数,第一个参数为元素,第二参数为初始x轴位置, ...
- nginx之gzip压缩
nginx的gizp压缩 为了使网站节省带宽和加快访问速度,在服务器方面的一个优化的就是使用nginx提供的gzip压缩. 一.使用压缩原理: 1.当用户使用浏览器访问网站时,就是在发送一个http请 ...
- 喵星人教你 HTTP 状态码
在我们日常 Web 开发中,或多或少的都接触过 HTTP 状态码,那这些状态码代表什么意思呢?熟悉这些状态码又有什么好处呢?下面我就为大家一一道来,可以把本片文章'收藏'以备不时之需. HTTP 状态 ...
- kubernetes实战篇之helm使用技巧
系列目录 使用压缩包安装chart 我们使用helm package打包的时候,默认会在当前位置生成一个tgz压缩包,然后helm把它复制到到$HOME/.helm/repository目录下,现在还 ...
- .NET开发框架(五)-IIS上部署ASP.NET Core项目教程
系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学.NET CORE的童靴入门有所帮助! 1.打开VS,创建项目,选择ASP.NET ...