前面,我们搭建了Apache的Web服务器,分离出数据库,把数据库做了一个集群。按照架构来说,数据库采取了1主1备主2从库的结构。然后通过MHA实现高可用。按照目前的结构来说。存在以下几个问题
数据库没有实现读写分离。VIP是作用在mmaster和bmaster上。并且按照目前的情况。如果通过VIP连接,全部的读写压力都集中在VIP所在的服务器上。这样是不合理的。我们要实现数据库读写分离。我们的目标是写在主库上面。读的操作在从库和备份主库上。
数据库没有实现负载均衡,单点压力过大。我们要实现的目标是,连接采用轮询的方式,或者是最小连接的方式。这样确保负载均衡。
为了解决以上的问题。我们打算新增2台服务器。安装Mysql的中间件Mycat。IP为21和22
一、环境准备,新增2台服务器,IP分别为21和22.安装JDK
yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64
tar -xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
mv mycat /usr/local/
cd /usr/local/mycat/conf/
vim server.xml
修改登录虚拟库的账号是密码,分别是读的,和写的。schemas指向的是虚拟库的名称。
vim schema.xml
把配置文件改成这样。红框的,请多留意。这里大概解释一下,定义虚拟库为v_mydb,虚拟数据库为dn1,虚拟主机为本机,实际数据库为mydb。
启动Mycat
从上图可以看到。角色已经起来了。端口也已经起来了8066
我们尝试一下,通过Mycat连接数据库集群
这里忘记了。我们刚刚定义schemas文件的时候,设置了写是用root账户,读是用sread账户。我们先授权sread先
试试通过Mycat连接数据库集群
通过上图,我们可以看到。通过Mycat,我连接进去了数据库集群里面,显示出来的库名,就是我们定义的虚拟库。然后我连接所在服务器,是slave2
好的。我们开始做第二台Mycat。流程是一样的。但第二台,我们定义的虚拟库,定义为mydb。虚拟库和实际库,一样的名字。
我们测试一下通过Mycat1和Mycat2,连接数据库的情况
Mycat1
Mycat2
可以看到。虚拟库不同。在生产环境中,如果我定义的都是和实际库一样的虚拟库名。那么在客户端的角度来看。就是透明的。客户端是察觉不了的,以为自己访问的就是实际库。我这里把虚拟库定义分开来,是为了下一步做中间件负载均衡和高可用的时候,能够让大家看得出差别来。
Mycat的读写分离和负载均衡到这里就结束了。
大家可以网络查询一下,更详细的Mycat参数设置。