一、前期工作
参考文章《Centos7下采用haproxy+keepalived搭建mysql高可用负载均衡》
1、关闭防火墙和SELINUX(3台虚拟机)
2、设置yum源(3台虚拟机)
3、安装mysql(3台虚拟机)——7.86(主)、7.88(从1)、7.89(从2)
二、Mysql一主两从配置
1、修改mysql配置文件
在7.86、7.88、7.89的MySQL配置文件/etc/my.cnf分别增加下面这一段。
server-id=86 #任意自然数n,保证三台MySQL主机id不一样。
log-bin=mysql-bin #开启二进制日志
replicate-do-db=aa #要同步的数据库,默认所有库
保存后,重启mysql服务
sudo systemctl restart mysqld
或sudo service mysqld restart
2、查看主mysql(7.86)二进制日志
登录mysql -uroot -p
密码Lr12345!
mysql> show master status;
3、在从mysql(7.88、7.89)告知二进制文件名与位置
mysql> change master to
-> master_host='192.168.7.86',
-> master_user='root',
->master_password='Lr12345!',
->master_log_file='mysql-bin.000001',
-> master_log_pos=154;
查看结果
mysql> start slave;
mysql> show slave status\G
4、验证主从同步
192.168.7.86主MySQL操作:
mysql>create database aa;
mysql>use aa;
mysql>create table tab1(id int auto_increment,name varchar(10),primary key(id));
mysql>show databases;
mysql>show tables;
在7.86主数据库aa中写入数据,看是否同步到7.88和7.89数据库aa。
三、7.86安装mycat2
1、把所有文件都下载到/data/tools目录
方法一:
先创建目录/data/tool
cd /data/tools
wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zipwget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
方法二:
先创建目录/data/tools
将下载好的两个文件拉到该目录下
2、安装
程序安装目录为/data,解压并移到到/data目录
cd /data/tools
unzip mycat2-install-template-1.21.zip
mv mycat ../
把bin目录的文件加执行权限
cd /data/mycat/bin
chmod +x *
把所需的jar复制到mycat/lib目录
cd /data/mycat/lib/
cp /data/tools/mycat2-1.21-release-jar-with-dependencies.jar ./
四、数据源
1、配置mycat原型库的数据源信息
cd /data/mycat/conf/datasources
vim prototypeDs.datasource.json
"password":"Lr12345!",
"url":"jdbc:mysql://192.168.7.86:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
2、新增第一个数据源(主节点)
cd /data/mycat/conf/datasources
cp prototypeDs.datasource.json master.datasource.json
vim master.datasource.json
内容如下:
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"master",
"password":"Lr12345!",
"type":"JDBC",
"url":"jdbc:mysql://192.168.7.86:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
3、新增第二个数据源(从节点1)
cd /data/mycat/conf/datasources
cp prototypeDs.datasource.json slave-01.datasource.json
vim slave-01.datasource.json
内容如下:
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"slave-01",
"password":"Lr12345!",
"type":"JDBC",
"url":"jdbc:mysql://192.168.7.88:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
4、新增第三个数据源(从节点2)
cd /data/mycat/conf/datasources
cp prototypeDs.datasource.json slave-02.datasource.json
vim slave-02.datasource.json
内容如下:
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"slave-02",
"password":"Lr12345!",
"type":"JDBC",
"url":"jdbc:mysql://192.168.7.89:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
5、配置数据源的集群信息
注意:不要删除prototype.cluster.json,否则启动mycat时报错。
cd /data/mycat/conf/clusters
cp prototype.cluster.json master-slave.cluster.json
vim master-slave.cluster.json
内容如下:
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"master"
],
"replicas":[
"slave-01"
"slave-02"
],
"maxCon":200,
"name":"master-slave",
"readBalanceType":"BALANCE_ALL",
"switchType":"NOT_SWITCH"
}
6、配置物理库(schema)和Mycat中数据源/数据源集群的关系
cd /data/mycat/conf/schemas
cp information_schema.schema.json a.schema.json
vim a.schema.json
内容如下:
{
// 物理库
"schemaName": "a",
// 指向集群,或者数据源
"targetName": "master-slave",
// 这里可以配置数据表相关的信息,在物理表已存在或需要启动时自动创建物理表时配置此项
"normalTables": {}
}
7、暴露第二个数据库b(额外加的)
cd /data/mycat/conf/schemas
cp information_schema.schema.json b.schema.json
内容如下:
vim b.schema.json
{
// 物理库
"schemaName": "b",
// 指向集群,或者数据源
"targetName": "master-slave",
// 这里可以配置数据表相关的信息,在物理表已存在或需要启动时自动创建物理表时配置此项
"normalTables": {}
}
注意:启动服务后,b.schema.json文件内容不变,给表添加数据也不变,只有变更了表结构会变。Mycat2中新增数据库,会自动生成 数据库名.schema.json
五、启动Mycat2服务
cd /data/mycat/bin
./mycat start
./mycat stop
./mycat status
六、验证负载均衡和读写分离
navicate客户端连接192.168.7.86:8066