一、定义
在数据库集群架构中,让主库负责处理写入操作,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将数据变更同步到从库中,也就是写操作。
二、优点
1.分摊服务器压力,提高机器的系统处理效率。
2.在写入不变,大大分摊了读取,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了。
3.增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务。
三、Mycat—数据库中间件
Mycat是一个开源的数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的数据库系统。Myca是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服 务是实现对主从数据库的读写分离、读的负载均衡。
MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。
四、部署mycat
1.环境
四台机器,一台(mycat)用于部署mycat,其他三台已做好主从复制,主(master) 负责写,从(slave1/2)负责读。
192.168.0.2 mycat
192.168.0.4 master
192.168.0.5 slave1
192.168.0.6 slave2
并在四台机器均配置域名文件,关闭防火墙和selinux。
Mycat端:
2.安装jdk
下载jdk压缩包
[root@mycat ~]#tar xzf jdk-8u221-linux-x64.tar.gz -C /usr/local/
//解压到指定目录
[root@mycat ~]#cd /usr/local/
[root@mycat local]#mv jdk1.8.0_221/ java //方便操作
[root@mycat local]#vim /etc/profile //最后添加,设置环境变量
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@mycat local]#source /etc/profile //执行
3.安装mycat
[root@mycat ~]#wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
[root@mycat ~]#tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/ //解压
/usr/local/mycat/conf/server.xml //定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。
/usr/local/mycat/conf/schema.xml //定义逻辑库,表、分片节点等内容。
4.配置server.xml
将最下面两段改为:
5.配置schema.xml
全文更改为:(也可重命名然后重新创建)
前三行:配置环境
4-5行:定义分表信息
name="testdb" //逻辑库名称,与server.xml的一致
checkSQLschema="false" //不检查sql
sqlMaxLimit="100" //最大连接数
dataNode="dn1" // 数据节点名称
6行:数据节点
name="dn1" //此数据节点的名称
dataHost="localhost1" //主机组虚拟的
database="testdb" //真实的数据库名称
7-8行:主机组
name="localhost1" //主机组
maxCon="1000" minCon="10" //连接
balance="0" //负载均衡
writeType="0" //写模式配置
dbType="mysql" dbDriver="native" //数据库配置
switchType="1" slaveThreshold="100" //开启开关
balance 属性,负载均衡类型,目前的取值有 3 种:
- balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
- balance=“1”, 全部的 readHost 与 writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与M2互为主备),正常情况下,M2,S1,S2 都参与select语句的负载均衡。
- balance=“2”, 所有读操作都随机的在 writeHost、readhost 上 分发。
- balance=“3”, 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力, #注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
writeType 属性,负载均衡类型
1. writeType=“0”, 所有写操作发送到配置的第一个 writeHost, 第一个挂了切换到还生存的第二个writeHost,重新启动后已切换后的为准.
2.writeType=“1”,所有写操作都随机的发送到配置的writeHost,
版本1.5 以后废弃不推荐。
9行:检查
对后端数据进行检测,执行一个sql语句,user()内部函数
10-12行:读写配置
Master服务器:
6.创建用户并授权
mysql> grant all on testdb.* to mycat@'%' identified by 'Qf@456789';
mysql> flush privileges;
Mycat端:
7.安装MySQL客户端
[root@mycat ~]#yum install -y mysql
[root@mycat ~]#mysql -umycat -p'Qf@456789' -h mysql-master
8.配置环境变量(JVM)
[root@mycat mycat]#cd conf/
[root@mycat conf]#vim wrapper.conf //在JVM下添加
wrapper.startup.timeout=300 //超时时间300秒
wrapper.ping.timeout=120 //已存在不用添加
[root@mycat conf]#/usr/local/mycat/bin/mycat start //启动mycat
[root@mycat ~]#jps //查看mycat是否启动
13377 WrapperSimpleApp //成功结果显示
13431 Jps
[root@mycat ~]#netstat -lntp | grep java //有8066端口即为成功