一、案例目标
(1)了解Mycat提供的读写分离功能。
(2)了解MySQL数据库的主从架构。
(3)构建以Mycat为中间件的读写分离数据库集群。
二、案例分析
1.规划节点
使用Mycat作为数据库中间件服务构建读写分离的数据库集群。
|----------------|---------|-----------------|
| IP | 主机名 | 节点 |
| 192.168.200.70 | mycat | Mycat中间件服务节点 |
| 192.168.200.80 | db1 | MariaDB数据库集群主节点 |
| 192.168.200.90 | db2 | MariaDB数据库集群从节点 |
2.基础准备
用CentOS 7.2系统,flavor使用2vCPU/4G内存/50G硬盘,创建3台虚拟机进行实验。
其中2台虚拟机db1和db2部署MariaDB数据库服务,搭建主从数据库集群;一台作为主节点,负责写入数据库信息;另一台作为从节点,负责读取数据库信息。
使用一台虚拟机部署Mycat数据库中间件服务,将用户提交的读写操作识别分发给相应的数据库节点。这样将用户的访问操作、数据库的读与写操作分给3台主机,只有数据库集群的主节点接收增、删、改SQL语句,从节点接收查询语句,分担了主节点的查询压力。
Yum源使用提供的gpmall-repo文件夹作为本地源,Mycat组件使用提供的Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz压缩包安装。
三、案例实施
1 .基础环境配置
(1)修改主机名
使用hostnamectl命令修改3台主机的主机名。
Mycat节点修改主机名命令:
root@localhost \~\]# hostnamectl set-hostname mycat
\[root@localhost \~\]# bash
db1节点修改主机名命令:
\[root@localhost \~\]# hostnamectl set-hostname db1
\[root@localhost \~\]# bash
db2节点修改主机名命令:
\[root@localhost \~\]# hostnamectl set-hostname db2
\[root@localhost \~\]# bash
#### (2)编辑hosts文件
3台集群虚拟机的/etc/hosts文件配置部分:(三台都需要)
\[root@mycat \~\]# vi /etc/hosts

#### (3)配置yum安装源
数据库集群需要安装MariaDB数据库服务,需要给集群虚拟机配置Yum安装源文件,使用提供的gpmall-repo文件上传至3个虚拟机的/opt目录下,设置本地Yum源。命令如下:(三台都需要配yum)
\[root@mycat \~\]# mkdir /opt/centos
\[root@mycat \~\]# mount /dev/cdrom /opt/centos
\[root@mycat \~\]# mv /etc/yum.repos.d/\* /media
\[root@mycat \~\]# vi /etc/yum.repos.d/local.repo

清理yum缓存:
\[root@mycat \~\]# yum clean all \&\& yum repolist

#### (4)安装JDK环境
部署Mycat中间件服务需要先部署JDK 1.7或以上版本的JDK软件环境,这里部署JDK 1.8版本。
Mycat节点安装Java环境:
\[root@mycat \~\]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

### ******2**** ****.**** ****部署MariaDB主从数据库集群服务******
#### (1)安装MariaDB服务
通过YUM命令在db1和db2虚拟机节点上安装MariaDB服务,命令如下。
# yum install -y mariadb mariadb-server
2个节点启动MariaDB服务,并设置MariaDB服务为开机自启。
# systemctl start mariadb
# systemctl enable mariadb
#### (2)初始化MariaDB数据库
在db1和db2虚拟机节点上初始化MariaDB数据库,并设置MariaDB数据库root访问用户的密码为123456。
#mysql_secure_installation


#### (3)配置数据库集群主节点
编辑主节点db1虚拟机的数据库配置文件my.cnf,在配置文件my.cnf中增添下面的内容。

编辑完成配置文件my.cnf后,重启MariaDB服务。
\[root@db1 \~\]# systemctl restart mariadb
#### (4)开放主节点的数据库权限
在主节点db1虚拟机上使用mysql命令登录MariaDB数据库,授权在任何客户端机器上可以以root用户登录到数据库。
\[root@db1 \~\]# mysql -uroot -p123456
MariaDB \[(none)\]\> grant all privileges on \*.\* to root@'%' identified by "123456";

在主节点db1数据库上创建一个user用户让从节点db2连接,并赋予从节点同步主节点数据库的权限,命令如下。
MariaDB \[(none)\]\> grant replication slave on \*.\* to 'user'@'db2' identified by '123456';
#### (5)配置从节点db2同步主节点db1
在从节点db2虚拟机上使用mysql命令登录MariaDB数据库,配置从节点连接主节点的连接信息。master_host为主节点主机名db1,master_user为在步骤(4)中创建的用户user,命令如下。
\[root@db2 \~\]# mysql -uroot -p123456
MariaDB \[(none)\]\> change master to master_host='db1',master_user='user',master_password='123456';

关闭防火墙,避免影响主从连接不成功。命令如下:(两台虚拟机都得操作)
配置完毕主从数据库之间的连接信息之后,开启从节点服务。使用show slave status\\G; 命令并查看从节点服务状态,如果Slave_IO_Running和Slave_SQL_Running的状态都为YES,则从节点服务开启成功。
MariaDB \[(none)\]\> start slave;
MariaDB \[(none)\]\> show slave status\\G;

#### (6)验证主从数据库的同步功能
先在主节点db1的数据库中创建库test,并在库test中创建表company,插入表数据。创建完成后,查看表company数据,如下所示。
MariaDB \[(none)\]\> create database test;
MariaDB \[(none)\]\> use test
MariaDB \[test\]\> create table company(id int not null primary key,name varchar(50),addr varchar(255));
MariaDB \[test\]\> insert into company values(1,"facebook","usa");

这时从节点db2的数据库就会同步主节点数据库创建的test库,可以在从节点查询test数据库与表company,如果可以查询到信息,就能验证主从数据库集群功能在正常运行。查询结果如下所示。
MariaDB \[(none)\]\> show databases;
MariaDB \[(none)\]\> select \* from test.company;

### ******3**** ****.**** ****部署Mycat读写分离中间件服务******
#### (1)安装Mycat服务
将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中。赋予解压后的Mycat目录权限。
\[root@mycat \~\]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
\[root@mycat \~\]# chown -R 777 /usr/local/mycat/
在/etc/profile系统变量文件中添加Mycat服务的系统变量,并生效变量。
\[root@mycat \~\]# echo export MYCAT_HOME=/usr/local/mycat/ \>\> /etc/profile
\[root@mycat \~\]# source /etc/profile
#### (2)编辑Mycat的逻辑库配置文件
配置Mycat服务读写分离的schema.xml配置文件在/usr/local/mycat/conf/目录下,可以在文件中定义一个逻辑库,使用户可以通过Mycat服务管理该逻辑库对应的MariaDB数据库。在这里定义一个逻辑库schema,name为USERDB;该逻辑库USERDB对应数据库database为test(在部署主从数据库时已安装);设置数据库写入节点为主节点db1;设置数据库读取节点为从节点db2。(可以直接删除原来schema.xml的内容,替换为如下。)IP改为自己实际IP
\[root@mycat \~\]# vi /usr/local/mycat/conf/schema.xml