阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MyCat读写分离与主从切换

383次阅读
没有评论

共计 6720 个字符,预计需要花费 17 分钟才能阅读完成。

什么是 mycat, 以及 mycat 的优点和特性本文不做赘述,本文继续本着实战的态度,来分享一些个人对 mycat 的基础功能实践。本文 mycat 的读写分离和主从切换的环境为 mysql 主从环境。

如何安装 mysql 数据库可以参考:http://www.linuxidc.com/Linux/2016-09/135422.htm
如何构建 mysql 主从环境可以参考:http://www.linuxidc.com/Linux/2016-09/134820.htm

本文的环境信息:
192.168.1.248 slave
192.168.1.250 master

主从配置完成后,Slave_IO_Running 和 Slave_SQL_Running 状态都为 yes
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
mysql> show slave status\G
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.250
                  Master_User: mysync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 429
              Relay_Log_File: HE1-relay-bin.000002
                Relay_Log_Pos: 592
        Relay_Master_Log_File: mysql-bin.000004
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

创建 mycat 用到的 dataNode 对应的数据库及 mycat 用到的数据库用户

mysql> grant all privileges on *.* to ‘mycat’@’%’ identified by ‘MANAGER’;
Query OK,0 rows affected (0.01 sec)
 
mysql> flush privileges;
Query OK,0 rows affected (0.00 sec)
 
mysql> create database db1;
Query OK,1 row affected (0.00 sec)
 
mysql> create database db2;
Query OK,1 row affected (0.01 sec)
 
mysql> create database db3;
Query OK,1 row affected (0.01 sec)

配置环境变量
[root@HE3 ~]# echo export PATH=$PATH:/usr/local/mycat/bin >>/etc/profile
[root@HE3 ~]# echo export MYCAT_HOME=/usr/local/mycat >> /etc/profile
[root@HE3 ~]# source /etc/profile

配置 /etc/my.cnf 中增加参数并重启数据库服务
lower_case_table_names=1

安装 jdk7
[root@HE3 ~]# rpm -ivh jdk-7u79-linux-x64.rpm
Preparing…                ########################################### [100%]
  1:jdk                    ########################################### [100%]
Unpacking JAR files…
rt.jar…
jsse.jar…
charsets.jar…
tools.jar…
localedata.jar…
jfxrt.jar…

安装 mycat

[root@HE3 ~]# tar xvf Mycat-server-1.5.1-RELEASE-20160816173057-linux.tar.gz -C /usr/local
[root@HE3 ~]# groupadd mycat -g 910
[root@HE3 ~]# useradd  mycat -g 910
[root@HE3 ~]# chown -R mycat:mycat /usr/local/mycat

修改必要的配置并启动
[root@HE3 ~]# cd  /usr/local/mycat/conf
[root@HE3 conf]# vim schema.xml
配置 table,来决定 table 分片对应哪个 dataNode 还是 global 表,以及分片规则和片键

MyCat 读写分离与主从切换

修改第 43 行的 dataHost 标签中的 writeHost 的 url  10.10.10.250 及用户名 mycat 和密码 MANAGER

MyCat 读写分离与主从切换

启动 mycat
[root@HE3 bin]# cd /usr/local/mycat/bin
[root@HE3 bin]# mycat start
Starting Mycat-server…

观察 wrapper.log 文件中提示启动成功即可
[root@HE3 bin]# cd /usr/local/mycat/log

MyCat 读写分离与主从切换

配置 mycat
[root@HE3 conf]# vi /usr/local/mycat/conf/schema.xml
因为要涉及到实验主节点失败,write 节点指向原从节点,所以要把主从节点都设置成 writeHost
有关读写分离分发规则的相关 dataHost 标签属性 balance 值:
负载均衡类型,目前取值有 3 种:
(1) balance=”0″, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
(2) balance=”1″,全部的 readHost 与 stand by writeHost 参与 select 语句负载均衡,简单的说,当双主双从模式 (M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情冴下,M2,S1,S2 都参与 select 语句的负载
均衡。(类似于 balance=3, 读操作只分发到除了真正的主节点之外的所有节点)
(3) balance=”2″,所有读操作都随机的在 writeHost、readhost 上分发。(常用些,在所有主从节点上分发读请求)
(4) balance=”3″,所有读请求随机的分发到 writeHost 对应的 readhost 执行,writeHost 不负担读压
力,注意 balance=3 叧在 1.4 及其以后版本有,1.3 没有。(常用些,只在从节点上分发读请求)
 
注:事务内的 sql,默认走写节点,以注释 /*balance*/ 开头,则会根据 balance 值决定
 
在本例中 balance 值设置为 1,但是这个场景设置成 3 效果应该是一样的
 
有关主从 (读写角色) 切换设置属性规则的相关 dataHost 标签属性 switchType 值:
(1)- 1 表示不自动切换
(2)1 默认值,自动切换
(3)2 基于 mysql 主从同步的状态决定是否切换
(4)3 基于 cluster 的切换,心跳语句要改成 show status like ‘wsrep%’, 这个里面配置的都是 writehost
 
在本例中 switchType 值设置为 1,表示自动切换,某些对主从数据一致要求较高的场景,建议使用 2 判断主从状态后再切换,或者使用 galera cluster 保证各节点数据一致然后将此值设置为 3
 
切换的触发条件为主节点 mysql 服务崩溃或停止 (暂时是这么理解的,希望批改的同学能给我解答一下)。
 
slaveThreshold 主从的延迟在多少秒以内,则把读请求分发到这个从节点,否则不往这个节点分发,假设生产环境能容忍的主从延时为 60 秒,则设置此值为 60,此例中设置值为 100
 
有关写请求是否分发到多个写节点规则的相关 dataHost 标签属性 writeType 值:
(1) 值 0 表示只分发到当前的主节点
(2) 值 1 表示分发到所有设定为 writeHost 的节点,不推荐使用,好像现在版本已经废除
 
此例中 writeType 值使用默认值 0,写请求只分发到主节点,不会分发到其他的 writeHost 上

这里我们变更 45 行的心跳检测为 show slave status,来方便之后我们的读写分离校验

MyCat 读写分离与主从切换

验证读写分离效果
写操作

主节点上:
mysql> show global status like ‘%Com_in%’;
+——————–+——-+
| Variable_name      | Value |
+——————–+——-+
| Com_insert        | 13    |
| Com_insert_select  | 0    |
| Com_install_plugin | 0    |
+——————–+——-+
3 rows in set (0.00 sec)

从节点上:
mysql> show global status like ‘%Com_in%’;
+——————–+——-+
| Variable_name      | Value |
+——————–+——-+
| Com_insert        | 13    |
| Com_insert_select  | 0    |
| Com_install_plugin | 0    |
+——————–+——-+
3 rows in set (0.00 sec)

写入 insert:
mysql> insert into travelrecord(id,name)values(10000005,’ddd’);
Query OK, 1 row affected (0.00 sec)

可以看到几次插入的结果都落到了节点 192.168.1.250 也就是 master 上
也可以使用 show global status like‘Com_insert’; 查看主从 mysql 上的 insert 请求,如果两者都增加,说明请求分发到了主上,并复制到了从上,如果请求分发到了从上,那么就不会复制到主上,结果就是主上的这个状态变量不会增加,只有从上的这个状态变量会增加。

读操作
执行 select 之前
主节点:
mysql> show global status like ‘Com_select’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Com_select    | 1334  |
+—————+——-+
1 row in set (0.00 sec)

从节点:
mysql> show global status like ‘Com_select’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Com_select    | 385  |
+—————+——-+
1 row in set (0.00 sec)

执行 select 语句:
mysql> select * from travelrecord where id=1;
+—-+——+——+
| id | name | age  |
+—-+——+——+
|  1 | aaa  | NULL |
+—-+——+——+
1 row in set (0.00 sec)

主节点:
mysql> show global status like ‘Com_select’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Com_select    | 1334  |
+—————+——-+
1 row in set (0.00 sec)

从节点:
mysql> show global status like ‘Com_select’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Com_select    | 386  |
+—————+——-+
1 row in set (0.00 sec)

都落在了 hostS1 也就是 slave 上
 
多测几次也是以上的效果,说明符合了 balance= 1 的效果,读请求分发到了除主节点以外的节点(即从节点)。

验证自动切换
停止当前主节点 mysql 服务
[root@HE3 conf]# cat dnindex.properties 
#update
#Mon Sep 12 00:28:33 PDT 2016
localhost1=0
[root@HE3 conf]# /etc/init.d/mysqld stop
Shutting down MySQL………… SUCCESS!

观察 dnindex.properties 文件内容是否变化
[root@HE3 conf]# cat dnindex.properties 
#update
#Mon Sep 12 18:32:28 PDT 2016
localhost1=1

当前可用节点只剩下原从节点,期望结果是之后的写入操作全部落到原从节点,验证:
mysql> insert into travelrecord values(3,’helei’,25);
ERROR 1064 (HY000): partition table, insert must provide ColumnList
mysql> insert into travelrecord(id,name,age) values(3,’helei’,25);
Query OK, 1 row affected (0.37 sec)

登录原从节点,观察数据变化:
mysql> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+—————+
| Tables_in_db1 |
+—————+
| travelrecord  |
+—————+
1 row in set (0.00 sec)
mysql> select * from travelrecord;
+———+——-+——+
| id      | name  | age  |
+———+——-+——+
|      1 | aaa  | NULL |
|      2 | asd  | NULL |
|      3 | helei |  25 |
| 5000000 | bbb  |  11 |
+———+——-+——+
4 rows in set (0.00 sec)

说明此时写入节点已经切换为配置好的第二个 writeHost, 也就是原从节点,此时如果想要将原失败节点重新加入集群,需要重做主从,将原主节点作为从节点加入到集群中,mycat 无需重启,对前端应用是透明的。

Ubuntu 16.04.1 安装 MyCat  http://www.linuxidc.com/Linux/2016-08/134330.htm

MyCAT 实现 MySQL 读写分离实践  http://www.linuxidc.com/Linux/2016-01/127957.htm

MyCAT 实现 MySQL 的读写分离  http://www.linuxidc.com/Linux/2016-01/127555.htm

MyCAT ER 分片的验证 http://www.linuxidc.com/Linux/2016-02/128636.htm

LVS+Keepalived 搭建 MyCAT 高可用负载均衡集群 http://www.linuxidc.com/Linux/2016-03/129231.htm

Mycat 实现数据库读写分离  http://www.linuxidc.com/Linux/2016-07/133518.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135424.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计6720字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7798843
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
使用1Panel面板搭建属于你的AI项目环境

使用1Panel面板搭建属于你的AI项目环境

使用 1Panel 面板搭建属于你的 AI 项目环境 在 AI 项目越来越火的今天,很多朋友都想自己动手搭建一...
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...