在主从数据库集群架构中,让主库负责处理写入操作,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将数据变更同步到从库中,也就是写操作
优点
1. 分摊服务器压力,提高机器的系统处理效率。
2. 在写入不变,大大分摊了读取,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了。
3. 增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务。
1、准备一台虚拟机和已经搭建好的主从复制
2、安装java环境(Oracle官网下载)
[root@localhost tmp]# cd /tmp
[root@localhost tmp]# rpm -ivh jdk-8u251-linux-x64.rpm
警告:jdk-8u251-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:jdk1.8-2000:1.8.0_251-fcs ################################# [100%]Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
此时:JDK已经被安装在了 /usr/java/jdk1.80_xxx
目录下。
3、配置Java环境变量
[root@localhost java]# vi /etc/profile
在profile中尾部追加一下3行配置
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.
//刷新环境变量
[root@localhost java]# source /etc/profile
如果刷新环境变量时,有异常信息,大多是配置环境变量的关键字有错
4、解压缩Mycat.tar.gz(官网下载)
[root@localhost opt]# tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /opt/
5、配置Mycat环境变量
[root@localhost opt]# vi /etc/profile
export MYCAT_HOME=/opt/mycat (这个写在Java上面)
export PATH=$PATH:$JAVA_HOME/bin:$MYCAT_HOME/bin (这个要跟着Java的PATH后面写)
//刷新环境变量
[root@localhost java]# source /etc/profile
6、修改mycat配置文件
1、server.xml相关信息解释
# 进入mycat/conf目录中
[root@mycat conf]# vim server.xml
...
<!--下面的用户和密码是应用程序连接到 MyCat其中的schemas 配置项所对应的值是逻辑数据库的名字,可以自由定义,但需要和后面 schema.xml 文件中配置的一致。-->
<user name="root" defaultAccount="true">
<property name="password">root</property>
<property name="schemas">mycatdb</property>
</user>
<!--
<!--下面是另一个用户,并且设置的访问 TESTED 逻辑数据库的权限是 只读。可以注释掉
<user name="user">
<property name="password">user</property>
<property name="schemas">mycatdb</property>
<property name="readOnly">true</property>
</user>
-->
</mycat:server>
补充:文件中<system><system>这个标签里面的东西都用不到直接删掉就好
2、schema.xml相关信息解释
逻辑库和分表设置
<schema name="testdb" // 逻辑库名称,与server.xml的一致
checkSQLschema="false" // 不检查sql
sqlMaxLimit="100" // 最大连接数
dataNode="dn1"> // 数据节点名称
<!--这里定义的是分表的信息-->
</schema>
数据节点
<dataNode name="dn1" // 此数据节点的名称
dataHost="localhost1" // 主机组虚拟的
database="testdb" /> // 真实的数据库名称
主机组
<dataHost name="localhost1" // 主机组
maxCon="1000" minCon="10" // 连接
balance="0" // 负载均衡
writeType="0" // 写模式配置
dbType="mysql" dbDriver="native" // 数据库配置
switchType="1" slaveThreshold="100">
<!--这里可以配置关于这个主机组的成员信息,和针对这些主机的健康检查语句-->
</dataHost>
balance 属性
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1", 全部的 readHost 与 writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
3. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力, #注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。writeType 属性
负载均衡类型
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切换到还生存的第二个writeHost,重新启动后已切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,#版本1.5 以后废弃不推荐。
健康检查
<heartbeat>select user()</heartbeat>
#对后端数据进行检测,执行一个sql语句,user()内部函数
读写配置
<writeHost host="hostM1" url="192.168.246.135:3306" user="mycat" password="Qf@12345!">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.246.136:3306" user="mycat" password="Qf@12345!" />
</writeHost>
3、schema.xml配置范例
[root@mycat conf]# vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="back" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="192.168.37.153" url="192.168.37.153:3306" user="root" password="111111">
<!-- can have multi read hosts -->
<readHost host="192.168.37.154" url="192.168.37.154:3306" user="root" password="111111" />
<readHost host="192.168.37.155" url="192.168.37.155:3306" user="root" password="111111" />
</writeHost>
</dataHost>
</mycat:schema>
补充:<table></table>标签不要,<schema></schema>标签属性加一个 dataNode="dn1"
7 、创建用户(我们配置的是root用户,所以不用创建新用户)
在上述schema.xml中配置了主库从库的登录用户,若库中没有该用户,需要创建
mysql> grant all on back.* to mycat@'%' identified by '111111';
8、启动mycat
[root@localhost conf]# mycat start
Starting Mycat-server...