Centos7+Keepalived+mycat2+Mysql/MariaDB读写分离方案 |
发表者:admin分类:应用服务2022-03-25 17:52:03 阅读[684] |
一,环境介绍。
1,架构信息。
Mycat2中间件主机两台,安装Centos7+keepalived+mycat2 ,使用vip 192.168.137.141,实现mycat高可用。
Docker主机一台,安装Centos7+docker+三个mariadb实例, 使用 IP 192.168.137.40。
2,数据库实例信息。
mariadb01实例 IP: 192.168.137.40 端口:13311
mariadb02实例 IP: 192.168.137.40 端口:13312
mariadb03实例 IP: 192.168.137.40 端口:13313
二,具体安装过程。
这里不再讲docker与keepalived安装过程。
1, 安装jdk环境。
rpm -ivh jdk-linux-x64.rpm
#安装jdk软件包
#/etp/profile配置文件中添加JAVA环境变量
export JAVA_HOME=/usr/java/default
export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:/usr/java/kotlin/bin:$PATH
wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies-2022-3-9.jar
#下载软件包
cp -a mycat2-* /opt/
unzip mycat2-install-template-1.21.zip
#复制到/opt目录并解压文件
cd mycat/
chmod +x bin/*
#给脚本添加执行权限
cp /opt/mycat2-1.21-release-jar-with-dependencies-2022-3-9.jar lib/
#复制jar依赖包到/opt/mycat/lib目录。
cd /opt/mycat2/mycat/conf/users/
cat root.user.json
{
"dialect":"mysql",
"ip":null,
"password":"12345678",
"transactionType":"xa",
"username":"root"
}
#注意 /opt/mycat2/mycat/conf/users/root.user.json里面的username与password是配置mycat的管理账号与密码。不是mysql的账号密码。
2,启动mycat
#先删除/opt/mycat/conf/clusters和/opt/mycat/conf/datasources目录中的json文件
/opt/mycat/bin/mycat start
#启动mycat中间件
mysql -uroot -h192.168.137.31 -P8066 -p
#使用客户端工具测试,这里登陆使用的是mycat账号root 密码是: 12345678
3,配置mycat的datasource,定义后端的mysql服务器。这里采用的是一主二从,所以需要定义三个数据源。
mariadb01是主节点,instanceType是WRITE,也可以是READ_WRITE。
mariadb02是从节点,instanceType只能是READ。
mariadb03是从节点,instanceType只能是READ。
4,以下三个命令是登陆mycat中执行。
/*+ mycat:createDataSource{
"name":"mariadb01",
"instanceType":"WRITE",
"url":"jdbc:mysql://192.168.137.40:13311",
"user":"root",
"password":"alpha.abc"
} */;
#注意主节点数据库的instanceType是WRITE,也可以是READ_WRITE,从节点的只能是READ
/*+ mycat:createDataSource{
"name":"mariadb02",
"instanceType":"READ",
"url":"jdbc:mysql://192.168.137.40:13312",
"user":"root",
"password":"alpha.abc"
} */;
#从节点,instanceType只能是READ。
/*+ mycat:createDataSource{
"name":"mariadb03",
"instanceType":"READ",
"url":"jdbc:mysql://192.168.137.40:13313",
"user":"root",
"password":"alpha.abc"
} */;
#从节点,instanceType只能是READ。
5,查看/opt/mycat/conf/datasources目录,可以看到生成三个数据源文件。
[root@node2 conf]# ls datasources/
mariadb01.datasource.json mariadb02.datasource.json mariadb03.datasource.json
6,配置集群信息。根据自已情况添加参数,这里配置集群名称 prototype,集群中的masters,replicas,以及查询策略。
执行下面命令。
/*! mycat:createCluster{
"name":"prototype",
"masters":"mariadb01",
"replicas":["mariadb02","mariadb03"],
"readBalanceType":"BALANCE_ALL_READ",
"readBalanceName":"BalanceLeastActive"
} */;
使用命令 /*+ mycat:showClusters{} */; 可以查看集群信息。通过下图,可以看出一个主节点,两个从节点。
7,查看/opt/mycat/conf/clusters目录,可以看到集群配置文件。
[root@node2 conf]# cat clusters/prototype.cluster.json
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetryCount":3,
"minSwitchTimeInterval":300,
"showLog":false,
"slaveThreshold":0.0
},
"masters":[
"mariadb01"
],
"maxCon":2000,
"name":"prototype",
"readBalanceName":"BalanceLeastActive",
"readBalanceType":"BALANCE_ALL_READ",
"replicas":[
"mariadb02",
"mariadb03"
],
"switchType":"SWITCH"
8,测试中间件工作情况。使用SQLyog登陆mycat后,可以看到三个库,主从节点中已经存在的其它数据库是看不到的。
9,mycat中间件中创建数据库。执行以下SQL命令,可以通过mycat与mysql中查看,已经同步创建相关数据库与表。
CREATE DATABASE dbapp;
USE dbapp;
CREATE TABLE `name` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`user_name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `id`(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1129569 CHARACTER SET = utf8mb4;
10,查看/opt/mycat/conf/schemas/目录下,已经多了dbapp.schema.json配置文件,内容有表结构相关信息。
[root@node2 conf]# cat schemas/dbapp.schema.json
{
"customTables":{},
"globalTables":{},
"normalProcedures":{},
"normalTables":{
"name":{
"createTableSQL":"CREATE TABLE dbapp.`name` (\n\t`id` bigint(20) NOT NULL AUTO_INCREMENT,\n\t`sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,\n\t`user_name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,\n\tPRIMARY KEY USING BTREE (`id`),\n\tINDEX `id` USING BTREE(`id`)\n) ENGINE = InnoDB AUTO_INCREMENT = 1129569 CHARACTER SET = utf8mb4",
"locality":{
"schemaName":"dbapp",
"tableName":"name",
"targetName":"prototype"
}
}
},
"schemaName":"dbapp",
"shardingTables":{},
"views":{}
11,最后可以在表中插入一些数据。可以在mycat中执行,也可以在主节点mysql中执行。
USE dbapp;
INSERT INTO `name` VALUES (1, 'girl', 'ddd');
INSERT INTO `name` VALUES (2, 'boy', 'fff');
INSERT INTO `name` VALUES (3, 'xxx', 'aaa');
12,将两个从节点表中的数据都删除一行内容,删除不同数据,客户端在通过mycat节点查询,可以看到每次会返回不同节点的数据。
mysql> select * from dbapp.name;
+----+------+-----------+
| id | sex | user_name |
+----+------+-----------+
| 1 | girl | ddd |
| 3 | xxx | aaa |
+----+------+-----------+
2 rows in set (0.01 sec)
mysql> select * from dbapp.name;
+----+------+-----------+
| id | sex | user_name |
+----+------+-----------+
| 1 | girl | ddd |
| 2 | boy | fff |
+----+------+-----------+
2 rows in set (0.01 sec)
从上面结果可以看出,mycat中间件已经将查询结果分配到不同的节点了。实现了读写分离功能。
clusterType相关内容:
SINGLE_NODE:单一节点
MASTER_SLAVE:普通主从
GARELA_CLUSTER:garela cluster/PXC集群
MHA:1.21-2022年1月完善
MGR:1.21-2022年1月完善,MIC集群可以使用此配置
MHA与MGR集群会在心跳过程中根据READ_ONLY状态判断当前节点是否从节点(READ_ONLY=ON),主节点(READ_ONLY=OFF)动态更新主从节点信息,这样可以支持多主,单主.但是实际上生产上建议暂时使用单主模式,或者多主作为单主使用
readBalanceType 相关内容:
查询负载均衡策略
可选值:
BALANCE_ALL(默认值)
获取集群中所有数据源
BALANCE_ALL_READ
获取集群中允许读的数据源
BALANCE_READ_WRITE
获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE
获取集群中允许写数据源,即主节点中选择
switchType相关内容:
NOT_SWITCH:不进行主从切换
SWITCH:进行主从切换
readBalanceName与writeBalanceName相关内容:
配置负载均衡策略,默认值是BalanceRandom
BalanceLeastActive**最少正在使用的连接数的mysql数据源被选中,如果连接数相同,则从连接数相同的数据源中的随机,使慢的机器收到更少。
BalanceRandom**利用随机算法产生随机数,然后从活跃的mysql数据源中进行选取。
BalanceRoundRobin**加权轮训算法,记录轮训的权值,每次访问加一,得到n,然后对mysql数据源进行轮训,
如果权值已经为零,则跳过,如果非零则减一,n减1,直n为零则选中的节点就是需要访问的mysql数据源节点。
BalanceRunOnReplica**io.mycat.plug.loadBalance.BalanceRunOnReplica把请求尽量发往从节点,不会把请求发到不可读(根据延迟值判断)与不可用的从节点
转载请标明出处【Centos7+Keepalived+mycat2+Mysql/MariaDB读写分离方案】。
《www.micoder.cc》
虚拟化云计算,系统运维,安全技术服务.
Tags: | [阅读全文...] |
最新评论