第100讲:MHA+Atlas实现MySQL主从复制读写分离分布式集群

文章目录

    • 1.Atlas读写分离简介
    • 2.搭建MHA高可用MySQL主从复制集群
    • 3.部署配置Atlas读写分离中间件
      • 3.1.安装Atlas读写分离中间件
      • 3.2.配置读写分离
      • 3.3.启动Atlas读写分离
    • 4.读写分离集群测试
    • 5.生产环境中创建一个用户通过Atlas使用
    • 6.Atlas通过管理接口实现在线管理
    • 7.Atlas自动分表

1.Atlas读写分离简介

Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。
Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。

Atlas下载地址:https://github.com/Qihoo360/Atlas/releases

Atlas读写分离中间件的架构图:

业务平台直接连接Atlas中间件,由Atlas中间件连接Mysql主从复制集群,当有读取操作时,Atlas会将读取操作路由到从库进行处理,当有写入操作时,Atlas胡一江写入的操作路由到主库进行处理。

在这里插入图片描述

MHA+Atlas实现MySQL主从复制读写分离高可用分布式集群的规划。

IP主机名主从复制角色端口号组件
192.168.20.11mysql-1master3306mysql
192.168.20.12mysql-2slave3306mysql
192.168.20.13mysql-3slave3305mysql、mha、atlas
192.168.20.15MHA针对主库实现的漂移IP

2.搭建MHA高可用MySQL主从复制集群

略,查看前面的文章。

搭建MHA集群、VIP漂移、Binlog服务器、邮箱告警。

3.部署配置Atlas读写分离中间件

3.1.安装Atlas读写分离中间件

[root@mysql-3 ~]# ll Atlas-2.2.1.el6.x86_64.rpm 
-rw-r--r-- 1 root root 4963681 628 2019 Atlas-2.2.1.el6.x86_64.rpm[root@mysql-3 ~]# yum install -y Atlas*[root@mysql-3 ~]# ll /usr/local/mysql-proxy/
总用量 0
drwxr-xr-x 2 root root  75 79 22:18 bin
drwxr-xr-x 2 root root  22 79 22:18 conf
drwxr-xr-x 3 root root 331 79 22:18 lib
drwxr-xr-x 2 root root   6 1217 2014 log

3.2.配置读写分离

[root@mysql-3 ~]# cd /usr/local/mysql-proxy/conf/
[root@mysql-3 conf]# cp test.cnf test.cnf.bak[root@mysql-3 conf]# vim test.cnf
[mysql-proxy]
#管理接口的用户名和密码,非数据库用户名密码
admin-username = user					
admin-password = pwd#Atlas后端连接的MySQL主库地址,所有的写操作会路由到这个数据库中,这里我们配置MHA的漂移地址,即使主库故障,从库切换后也不会应读写分离
proxy-backend-addresses = 192.168.20.15:3306#Atlas后端连接的Mysql从库地址,所有的读操作会路由到这个数据库中,多个地址以逗号分隔
proxy-read-only-backend-addresses = 192.168.20.12:3306,192.168.20.13:3306#通过Atlas连接数据库的账号,也就是允许Atlas使用数据库中的那些账号登陆主从复制集群。
#将复制用户和mha用户都写进去,密码通过Atlas/bin/encrypt工具加密即可
pwds = repl:/iZxz+0GRoA=,mha:/iZxz+0GRoA=#后台运行
daemon = true
#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker
keepalive = true
#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads = 8
#日志级别,分为message、warning、critical、error、debug五个级别
log-level = message
#日志存放的路径
log-path = /usr/local/mysql-proxy/log
#SQL日志的开关,打开后所有被Atlas处理的SQL都会记录下来
sql-log=ON#Atlas监听端口,程序等都是通过这个地址连接Atlas实现读写分离的
proxy-address = 0.0.0.0:33060#Atlas监听的管理接口的端口
admin-address = 0.0.0.0:2345
charset=utf8

3.3.启动Atlas读写分离

启动Atlas时,需要指定配置文件名称的前缀。例如test.cnf就写test。

[root@mysql-3 conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test start
OK: MySQL-Proxy of test is started[root@mysql-3 conf]# ps aux | grep mysql-proxy
root     23274  0.0  0.0  65832  5192 ?        S    22:37   0:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf
root     23275  0.0  0.3 170392 27108 ?        Sl   22:37   0:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf

4.读写分离集群测试

配置完读写分离集群后,要通过Atlas的33060端口进行连接,否则是没有读写分离效果的。

1)测试读操作

[root@mysql-3 ~]# mysql -umha -p123456 -h 192.168.20.13 -P 33060
mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|           3 |
+-------------+
1 row in set (0.01 sec)

可以看到第一次读返回的server_id是2,server_id=2也就是192.168.20.12这台从库,第二次读返回的server_id是3,也就是192.168.20.13这台从库,读操作都落在了从库上。

2)测试写操作

开启一个事务,就可以模拟出写的操作。

mysql> begin;
mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|           1 |
+-------------+
mysql> commit;

可以看到写操作返回的是server_id=1,server_id=1是192.168.20.11这台主库,读写分离成功。

5.生产环境中创建一个用户通过Atlas使用

需求:开发人员申请一个用户,用于操作预发布的数据库,需要拥有增改查的权限,并且开发人员不知道后端主从架构的数据库地址,只知道Atlas读写分离中间件的地址,这个用户需要通过Atlas中间件使用数据库。

1)在主库中创建一个用户

只需要在主库创建即可,会同步到从库上。

mysql> grant select,update,insert on *.* to ceshi@'192.168.20.%' identified by 'ceshi@123';

2)在Atlas中配置上新建的用户

首先要对ceshi这个用户的密码使用encrypt进行加密,否则是无法填写在Atlas配置文件中。

[root@mysql-3 ~]# /usr/local/mysql-proxy/bin/encrypt ceshi@123
03pnSSwackWTZ6zxvGQr9A==

然后将测试这个用户添加到Atlas配置文件中,否则是不能使用这个用户通过Atlas访问数据库。

[root@mysql-3 ~]# vim /usr/local/mysql-proxy/conf/test.cnf
pwds = repl:/iZxz+0GRoA=,mha:/iZxz+0GRoA=,ceshi:03pnSSwackWTZ6zxvGQr9A==

重启Atlas一定要进入到conf目录。

[root@mysql-3 ~]# cd /usr/local/mysql-proxy/conf/
[root@mysql-3 conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test restart
OK: MySQL-Proxy of test is stopped
OK: MySQL-Proxy of test is started

3)测试登陆

[root@mysql-3 conf]# mysql -uceshi -pceshi@123 -h 192.168.20.13 -P 33060
mysql> 

6.Atlas通过管理接口实现在线管理

通过管理接口,无需再重启Atlas,就可以实现配置的更新

1)登陆管理接口

登陆管理接口的账号面是Atlas配置文件中最顶部指定的user账号。

[root@mysql-3 ~]# mysql -uuser -ppwd -h 192.168.20.13 -P 2345
mysql> 

2)查看命令帮助

可以查看命令帮助,看看在管理接口能执行什么动作

mysql> select * from help;
+----------------------------+---------------------------------------------------------+
| command                    | description                                             |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help         | shows this help                                         |
| SELECT * FROM backends     | lists the backends and their state                      |
| SET OFFLINE $backend_id    | offline backend server, $backend_id is backend_ndx's id |
| SET ONLINE $backend_id     | online backend server, ...                              |
| ADD MASTER $backend        | example: "add master 127.0.0.1:3306", ...               |
| ADD SLAVE $backend         | example: "add slave 127.0.0.1:3306", ...                |
| REMOVE BACKEND $backend_id | example: "remove backend 1", ...                        |
| SELECT * FROM clients      | lists the clients                                       |
| ADD CLIENT $client         | example: "add client 192.168.1.2", ...                  |
| REMOVE CLIENT $client      | example: "remove client 192.168.1.2", ...               |
| SELECT * FROM pwds         | lists the pwds                                          |
| ADD PWD $pwd               | example: "add pwd user:raw_password", ...               |
| ADD ENPWD $pwd             | example: "add enpwd user:encrypted_password", ...       |
| REMOVE PWD $pwd            | example: "remove pwd user", ...                         |
| SAVE CONFIG                | save the backends to config file                        |
| SELECT VERSION             | display the version of Atlas                            |
+----------------------------+---------------------------------------------------------+

3)查看后端所有节点

mysql> select * from backends;
+-------------+--------------------+-------+------+
| backend_ndx | address            | state | type |
+-------------+--------------------+-------+------+
|           1 | 192.168.20.15:3306 | up    | rw   |
|           2 | 192.168.20.12:3306 | up    | ro   |
|           3 | 192.168.20.13:3306 | up    | ro   |
+-------------+--------------------+-------+------+

4)动态添加节点

mysql> remove backend 3;

5)动态删除节点

mysql> add slave 192.168.20.16:3306;

6)添加用户

mysql> add pwd hah:3yb5jEku5h4=;

7)删除用户

mysql> remove pwd hah:3yb5jEku5h4=;

8)保存配置到配置文件

mysql> save config;

7.Atlas自动分表

使用Atlas的分表功能时,首先需要在配置文件test.cnf设置tables参数。
tables参数设置格式:数据库名.表名.分表字段.子表数量,
比如:你的数据库名叫school,表名叫stu,分表字段叫id,总共分为2张表,那么就写为school.stu.id.2,如果还有其他的分表,以逗号分隔即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试真题-开源项目热榜-2023年OD统一考试(C卷)---python免费

题目: 考察内容: 理解题目双排序 代码: """ 题目分析: 计算热度值,进行降序排序,热度值一样,字母小写,字典排序输入: 项目个数N, int 0-100 权重列表…

快速部署华为云WAF实现Web应用安全防护

通常,用户将web应用暴露在公网上,不做任何准备或者安全措施可能会受到黑客的注入入侵攻击导致网站核心数据被脱库泄露。以及木马上传网页篡改,导致网站公信力受到影响。本文九河云将为您介绍如何通过华为云WAF应用防火墙实现web应用安全防护&…

解锁创意灵感,探索FlutterExampleApps项目的奥秘

解锁创意灵感,探索FlutterExampleApps项目的奥秘 项目简介 FlutterExampleApps项目是一个包含各种示例应用链接的仓库,旨在演示Flutter应用开发中的各种功能、特性和集成。 项目包含了以下几个部分,每个部分都涵盖了不同的内容和主题&…

Day23--learning English

一、积累 1.straw 2.umami | tangy | bland 3.lactose dairy 4.fatigue 5.stumble | curb 6.pore 7.toll 8.arrear 9.robe 10.stylish 11.dash 12.mischief 13.ranch 14.sponsorship 15.podcast 16.villian 17.clutch 18.envision 二、练习 1.牛津原译 1.straw /strɔː/ 1…

pytorch数学运算

目录 1. pytorch的数学运算包括2. 基本运算3. matmul4. power sqrt rsqrt5. exp log6. 近似值7. clamp 1. pytorch的数学运算包括 ▪Add/minus/multiply/divide ▪Matmul ▪Pow ▪Sqrt/rsqrt ▪Round 2. 基本运算 、-、*、/ 也可以使用函数add sub mul div 3. matmul 矩阵…

ipad作为扩展屏的最简单方式(无需数据线)

ipad和win都下载安装toDesk,并且都处于同一局域网下 连接ipad,在ipad中输入win设备的设备密码和临时密码,连接上后可以看到ipad会是win屏幕的镜像,此时退出连接,准备以扩展模式再次连接。 注意,如果直接从…

keepalived双活互备模式测试

文章目录 环境准备部署安装keepavlived配置启动测试模拟Nginx宕机重新启动问题分析 环境准备 测试一下keepalived的双主模式,所谓双主模式就是两个keepavlied节点各持有一个/组虚IP,默认情况下,二者互为主备,同时对外提供服务&am…

【GameFramework框架内置模块】2、数据节点(Data Node)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q7…

2024年2月中国数据库排行榜:PolarDB夺魁首登顶,TiDB攀升回探花

银装素裹覆大地,春意初醒待来临。2024年2月墨天轮中国数据库流行度榜单出炉,表现最亮眼的无疑是PolarDB,其自23年7月以来一路高歌猛进,此次更是一举夺魁,彰显了云原生数据库的蓬勃发展态势,OceanBase、TiDB…

神经网络基础——激活函数的选择、参数初始化

一、神经网络 1、神经网络 人工神经网络(Artificial Neural Network,即ANN)也简称为神经网络(NN)是一种模仿生物神经网络结构 和功能的计算模型。 2、基本部分 输入层:输入 x 输出层:输出 y 隐…

国际章真厉害,离婚后仍带汪峰继女小苹果赴日滑雪。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 在如今这个纷繁复杂的社会中,家庭关系和亲子关系的…

给定n个结点m条边的简单无向图,判断该图是否存在鱼形状的子图:有一个环,其中有一个结点有另外两条边,连向不在环内的两个结点。若有,输出子图的连边

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18 * 3, maxm 4e4 …

开源CMS Drupal本地快速部署并实现无公网ip环境远程访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它的学习…

Masonry源码

浅谈 这篇文章是 Masonry 框架源码的解析和笔记。学习Masonry之前&#xff0c;先了解这个框架设计的初衷—传统的利用系统API进行纯代码布局的不足。然后&#xff0c;根据Masonry常见的几个链式语法中&#xff0c;顺藤摸瓜地了解Masonry的调用栈。最后&#xff0c;学习并思考这…

Qt的跨平台开发

自从最初发布以来&#xff0c;Qt就以其跨平台的能力而闻名——这是创建这个框架背后的主要愿景。您可以在自己喜欢的桌面平台(如Windows、Linux和mac OS)上使用Qt Creator&#xff0c;并使用相同的代码库或稍加修改&#xff0c;创建流畅、现代、触摸友好的图形用户界面(GUI)和桌…

MySql重要知识梳理

文章目录 一.索引1.索引概述2.索引优缺点3. 索引结构为什么InnoDB存储引擎选择使用Btree索引结构? 4.索引分类思考InnoDB主键索引的Btree高度为多高? 5. 索引语法1.索引语法2.sql性能分析1.SQL执行频率2.慢查询日志3.explain执行计划 3.索引使用规则1.最左前缀法则2.索引失效…

把excel模版保存到文件夹里不走接口进行下载的方法

把excel保存到文件夹不走接口进行下载&#xff0c;一定要注意&#xff0c;需要放到public下的static文件夹下&#xff0c;如果没有static文件夹&#xff0c;就新建一个 &#xff01;&#xff01;&#xff01;不放在static文件夹下可能会报错&#xff0c;提示&#xff1a;无法从…

MyBatis-获取参数

1. 创建MyBatis配置文件模板 编辑完Mybatis核心配置文件和properties文件后&#xff0c;打开IDEA的设置界面&#xff0c;找到Editor中的File and Code Templates&#xff0c;点击加号新增模板。接着将编辑好的核心配置文件中的内容复制粘贴到空白框中&#xff0c;设置好模板名…

代码随想录第二十一天 701.二叉搜索树中的插入操作 108.将有序数组转换为二叉搜索树

701.二叉搜索树中的插入操作 题目描述 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&a…

上传代码到云效

1.获得邀请链接&#xff0c;加入工作台 > 点击代码管理 2.创建代码库后 > 点击克隆下载 > 复制https链接 3.如果未安装git客户端先安装 > 选择一个本地文件夹右击鼠标点击Git Bash Here打开git命令窗 4.克隆时提示输入账号密码&#xff0c;在云效个人设置页面Ht…