Atlas 读写分离 & Atlas + MHA 故障自动恢复
Atals 介绍
Atlas 主要功能
读写分离
从库负载均衡
IP 过滤
自动分表
DBA 可平滑上下线 DB
自动摘除宕机的 DB
Atlas 相对于官方 MySQL-Proxy 的优势
将主流程中所有 Lua 代码用 C 重写,Lua 仅用于管理接口
重写网络模型、线程模型
实现了真正意义上的连接池
优化了锁机制,性能提高数十倍
Atlas 使用
Atlas 安装
[root@db03 ~]# yum localinstall -y Atlas-2.2.1.el6.x86_64.rpm
Atlas 目录
[root@db03 ~]# ll /usr/local/mysql-proxy/
total 0
drwxr-xr-x 2 root root 75 Jul 29 10:15 bin
drwxr-xr-x 2 root root 22 Jul 29 10:15 conf
drwxr-xr-x 3 root root 331 Jul 29 10:15 lib
drwxr-xr-x 2 root root 6 Dec 17 2014 log
Atlas 配置
[root@db03 ~]# cat /usr/local/mysql-proxy/conf/test.cnf
[mysql-proxy]
# 管理接口的用户名
admin-username = user
# 管理接口的密码
admin-password = pwd
# Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 172.16.1.55:3306
# Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 172.16.1.122:3306,172.16.1.123:3306
# 用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = rep:3yb5jEku5h4=,mha:O2jBXONX098=
# 设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
daemon = true
# 设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
keepalive = true
# 工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads = 8
# 日志级别,分为message、warning、critical、error、debug五个级别
log-level = error
# 日志存放的路径
log-path = /usr/local/mysql-proxy/log
# SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF
sql-log = OFF
# 慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。
#sql-log-slow = 10
# 实例名称,用于同一台机器上多个Atlas实例间的区分
instance = test
# Atlas监听的工作接口IP和端口,用来连接 MySQL 数据库
proxy-address = 0.0.0.0:1234
# Atlas监听的管理接口IP和端口,用来管理 MySQL 数据库节点
admin-address = 0.0.0.0:2345
# 分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3
# 默认字符集,设置该项后客户端不再需要执行SET NAMES语句
# charset = utf8
#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
#client-ips = 127.0.0.1
Atlas 启动
[root@db03 ~]# /usr/local/mysql-proxy/bin/mysql-proxyd test start
OK: MySQL-Proxy of test is started
# 检验启动
[root@db03 conf]# netstat -lntp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2345 0.0.0.0:* LISTEN 31101/mysql-proxy
tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 31101/mysql-proxy
Atlas 使用
# 1.连接 Atlas 管理端
[root@db03 ~]# mysql -uuser -ppwd -P 2345 -h127.0.0.1
# 2.执行命令
mysql> show databases;
ERROR 1105 (07000): use 'SELECT * FROM help' to see the supported commands
mysql> SELECT * FROM help;
+----------------------------+---------------------------------------------------------+
| command | description |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help | 查看帮助 |
| SELECT * FROM backends | 查看后端数据库主机列表 |
| SET OFFLINE $backend_id | DBA可平滑下线DB |
| SET ONLINE $backend_id | DBA可平滑上线DB |
| ADD MASTER $backend | 添加主库 |
| ADD SLAVE $backend | 添加从库 |
| REMOVE BACKEND $backend_id | 移除后端数据库 |
| SELECT * FROM clients | 客户端列表 |
| ADD CLIENT $client | 临时添加客户端 |
| REMOVE CLIENT $client | 临时移除客户端 |
| SELECT * FROM pwds | 客户端用户名和密码 |
| ADD PWD $pwd | 添加客户端用户名和密码 |
| ADD ENPWD $pwd | 添加客户端用户名和加密后的密码 |
| REMOVE PWD $pwd | 移除客户端用户 |
| SAVE CONFIG | 保存配置到配置文件 |
| SELECT VERSION | 查看Atlas版本 |
+----------------------------+---------------------------------------------------------+
16 rows in set (0.00 sec)
Atlas + MHA 故障恢复
Atlas 自动恢复思路
# 1.找到新的主库
# 2.将新的主库从 Atlas 中配置下线,之前是作为从库由 Atlas 管理
# 3.作出的修改,要保存到配置文件
Atlas + MHA 恢复脚本
在 MHA 切换主库后,也需要在 Atlas 的配置中修改 Master 节点和 Slave 节点,下面为主脚本,主要功能:
将提升为主库的从库的原有记录(原有记录为:从库、只读)删除
因为主库使用了 VIP 漂移,Atlas 管理的 Master 节点不需要修改,Master 节点的只要记录为 VIP 即可
将宕机的原主库修复,改为从库(第五步)
将恢复好的从库(原主库),添加到 Atlas 管理的 Slave 节点
[root@dbtest03 bin]# vim switch_atlas.sh
#/bin/bash
# 1.获取新的主库IP
new_master=`grep "as a new master" /etc/mha/app1/manager | tail -1 | awk -F '[ ,(]' '{print $2}'` &> /dev/null
# 2.获取新的主库在Atlas中的ID
new_master_id=`mysql -uuser -ppwd -h127.0.0.1 -P 2345 -e "SELECT * FROM backends" | grep $new_master | awk '{print $1}'` &> /dev/null
# 3.移除提升为主库的从库
mysql -uuser -ppwd -h127.0.0.1 -P 2345 -e "REMOVE BACKEND $new_master_id" &> /dev/null
# 4.找到挂掉的主机
down_server=`grep "Master .* is down" /etc/mha/app1/manager | tail -1 | awk -F '[ ,(]' '{print $2}'` &> /dev/null
# 5.远程连接执行恢复脚本
ssh $down_server "sh /tmp/start_mha.sh" & &> /dev/null
# 6.获取挂掉的主机的IP加端口
down_server_port=`grep "Master .* is down" /etc/mha/app1/manager | tail -1 | awk -F '[ ,()]' '{print $3}'` &> /dev/null
# 7.添加down的主库为新的从库到Atlas
mysql -uuser -ppwd -h127.0.0.1 -P 2345 -e "add slave $down_server_port" &> /dev/null
# 8.保存配置
mysql -uuser -ppwd -h127.0.0.1 -P 2345 -e "save config" &> /dev/null
MHA 恢复脚本
[root@dbtest01 tmp]# vim /tmp/start_mha.sh
#!/bin/bash
mysql_pid=`ps -ef | grep [m]ysqld | wc -l`
# 如果挂掉,重启;如果没有挂掉,杀掉重启
if [ $mysql_pid -eq 0 ];then
systemctl start mysqld
else
pkill mysqld
systemctl stop mysqld
systemctl start mysqld
fi
# 重新配置主从
change=`ssh 172.16.1.123 "grep 'CHANGE MASTER TO' /etc/mha/app1/manager | tail -1 | sed s#xxx#123#g" |awk -F: '{print $4}'` &>/dev/null
mysql -uroot -p12345 -e "$change;start slave;" 2>/dev/null
ssh 172.16.1.123 "\cp /etc/mha/app1.conf.bak /etc/mha/app1.conf" >/dev/null
master_host=`ssh 172.16.1.123 "grep 'as a new master' /etc/mha/app1/manager | tail -1"| awk -F '[ ,(]' '{print $2}'`
ssh 172.16.1.123 "cd /binlog && mysqlbinlog -R --host=${master_host} --user=mha --password=mha --raw --stop-never mysql-bin.000001 2>/dev/null" & >/dev/null
ssh 172.16.1.123 "nohup masterha_manager --conf=/etc/mha/app1.conf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/manager.log 2>&1 &" >/dev/null
Atlas 读写分离 & Atlas + MHA 故障自动恢复的更多相关文章
- Mysql 高可用(MHA)-读写分离(Atlas)-分布式架构(Mycat)
Mysql 高可用(MHA)-读写分离(Atlas) 1. 搭建主从复制(一主两从) 1.1 准备环境 1 主库:10.0.0.51/db01 2 从库:10.0.0.52/db02,10.0.0.5 ...
- MySQL主从复制与Atlas读写分离
配置主从复制 1. 增加主从配置 # 主库配置文件 server-id = 1 log-bin = /var/lib/mysql/mysql-bin expire_logs_days = 10 ski ...
- mysql主从之基于atlas读写分离
一 mysql读写分离的概念 写在主库,主库一般只有一个,读可以分配在多个从库上,如果写压力不大的话,也能把读分配到主库上. 实现是基于atlas实现的,atlas是数据库的中间件,程序只需要连接at ...
- ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录
前面的文章介绍了ProxySQL用法,这里说下ProxySQL中间件针对Mysql组复制模式实现读写分离以及主节点故障时能够自动切换到新的主节点,而应用对此过程无感知的功能.Mysql组复制(MGR) ...
- MySQL-18-MHA+Atlas读写分离架构
Atlas介绍 Atlas是由Qihoo 360 Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了 ...
- Atlas读写分离[高可用]
Atlas下载地址: https://github.com/Qihoo360/Atlas/releases Atlas是出于360的, 比mysql-proxy更稳定, 部署起来更方便. 环境: pr ...
- atlas读写分离
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug ...
- 数据切分——Atlas读写分离Mysql集群的搭建
关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog ...
- Atlas 读写分离
1.前置条件 需要配置好mysql 主从 主库:192.168.28.137:16205 从库:192.168.28.135:16205 Atlas:192.168.28.139 2.Atlas 部署 ...
随机推荐
- JVM 判断对象已死,实践验证GC回收
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 提升自身价值有多重要? 经过了风风雨雨,看过了男男女女.时间经过的岁月就没有永恒不变 ...
- Vitis下载安装尝试
Vitis下载安装记录 一.下载安装 文章目录 一.下载安装 提示:以下是本篇文章正文内容,下面案例可供参考 一.下载安装 首先本次下载主要使用的是linux系统,所以我们先看一下Vitis支持的li ...
- Mybatis解决字段与属性不匹配的问题、链表查询、嵌套查询、#{}和${}的区别
1.使用接口结合xml映射文件 创建一个接口,该接口要和映射文件匹配(接口中方法名要和映射文件中的id相同) 映射文件中命名空间要和接口全类名相同 测试: 创建一个与src同级的源文件夹resourc ...
- 消息队列之rabbitmq学习使用
消息队列之rabbitmq学习使用 1.RabbitMQ简介 1.1.什么是RabbitMQ? RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,Rabb ...
- 对于Spring MVC 拦截器的一些了解
Spring MVC 拦截器的执行顺序 应用场景 假设请求 localhost:8080/ 则要求直接重定向到 localhost:8080/login ; 定义拦截器顺序 permission lo ...
- 日志采集技术分析 Inode Inotify
日志采集技术分析[阿里] - 新手学习导向 - 中国红客联盟 - Powered by HUC http://www.cnhonkerarmy.com/thread-236973-1-1.html
- HA工作机制
HA工作机制 HA:高可用(7*24小时不中断服务) 主要的HA是针对集群的master节点的,即namenode和resourcemanager,毕竟DataNode挂掉之后影响 不是特别大,重启就 ...
- RMI笔记
这是<java核心技术> 第11章 分布式对象的笔记. RMI基本原理 我们使用远程方法调用是希望达到这样的目的: 可以像调用本地方法一样去调用一个远程方法. 实现远程调用的方式是 为客户 ...
- 龙芯fedora28日常生存指南
2021-01-30 v0.0.5 从0.0.1开始改了非常多,一月余时间的花费渴望为其他人提供一点帮助,能够快速上手. 这主要是这一年来我从3B1500到3A4000再到福珑2的日常使用记录,是之前 ...
- 【算法】深度优先搜索(dfs)
突然发现机房里有很多人不会暴搜(dfs),所以写一篇他们能听得懂的博客(大概?) PS:万能 yuechi ---- 大法师怎么能不会呢?! 若有错误,请 dalao 指出. 前置 我知道即使很多人都 ...