一、前言
1.1 分布式数据库
随着IT行业的迅猛发展,行业应用系统的数据规模呈现爆炸式增长,对数据库的数据处理能力要求越来越高,分布式数据库正是因此应运而生。
分布式数据库特点包括:
透明性:用户不必关心后台数据库的具体实现
扩展性:能够根据系统压力情况进行扩展
可靠性:如果其中一台服务器宕机,备用服务器能够自动切换继续提供服务
高性能:
1.2 Mycat介绍
Mycat(http://www.mycat.io/ <http://www.mycat.io/>)是一个支持mysql、sql
server等数据库集群化部署的中间件。它由Amoeba和cobar发展而来。
二、负载均衡
三、测试环境
服务器
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
四、测试脚本
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.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.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.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就好了。
热门工具 换一换