探索MySQL高可用架构之MHA(5)

-----构建mysql高可用系列(共9篇)

上一篇文章介绍了本次架构的AB复制操作!

本篇文章主要介绍本次架构中的Atlas读写分离!

为什么要分库、分表、读写分离?

现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库。

Master库负责数据更新,Slave库当然负责非实时数据查询。

因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验。

我们通常的做法就是把查询从主库中抽取出来,采用多个从库,使用负载均衡,减轻每个从库的查询压力。

采用读写分离技术的目标:有效减轻Master库的压力,又可以把用户查询数据的请求分发到不同的Slave库,从而保证系统的健壮性。

我们看下采用读写分离的背景。随着网站的业务不断扩展,数据不断增加,用户越来越多,数据库的压力也就越来越大,采用传统的方式。

比如:数据库或者SQL的优化基本已达不到要求,这个时候可以采用读写分离的策 略来改变现状。

常见实现读写分离的方法:

a.开发在代码中写死  #指定修改操作,连接的是主库。查询操作,连接的是从库

b.第三方工具实现   #Atlas、cobar、TDDL、mysql-proxy、阿米巴等

我们这套架构中的读写分离是使用Atlas实现的,Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。

它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。

目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。

主要功能:

a.读写分离

b.从库负载均衡

c.IP过滤

d.SQL语句黑白名单

e.自动分表

下面就让我们开始操作吧:

主库和所有从库全操作

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ identified by ‘mysql‘;  #权限控制
mysql> FLUSH PRIVILEGES;   #让权限修改生效

安装Atlas

rpm -ivh Atlas-2.2.1.el5.x86_64.rpm  #rpm方式安装
rpm -ql Atlas  #查看Atlas安装的详细路径
grep -v ‘^#‘ /usr/local/mysql-proxy/conf/test.cnf  |grep -v ‘^$‘  > /usr/local/mysql-proxy/conf/lipengfei   #过滤配置文件中的乱码,重写向到lipengfei文件
mv test.cnf test.cnf.old   #备份test.cnf文件
cat /usr/local/mysql-proxy/conf/lipengfei > /usr/local/mysql-proxy/conf/test.cnf  
#将lipengfei文件输入,重定向到test.cnf
/usr/local/mysql-proxy/bin/encrypt mysql      
#mysql是我root用户的密码,把密码加密,加密后:TWbz0dlu35U=

修改Atlas配置文件

vi /usr/local/mysql-proxy/conf/test.cnf 
[mysql-proxy]
plugins = admin,proxy    #默认插件不用修改
admin-username=admin     #Atlas管理员用户
admin-password=admin     #Atlas管理员
admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses = 10.142.132.49:3306    #主库的IP及端口
proxy-read-only-backend-addresses = 10.142.132.47:3306,10.142.132.48:3306   #从库的IP及端口
pwds = root:TWbz0dlu35U=    #root用户与其对应的加密过的密码
daemon = true     #设置Atlas的运行方式,线上运行时设为true
keepalive = true   
#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true
event-threads = 8   #工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
log-level = message   #日志级别,分为message、warning、critical、error、debug五个级别
log-path = /usr/local/mysql-proxy/log   #日志路径 
instance = test   #实例的名称
proxy-address = 0.0.0.0:1234   #Atlas监听的工作接口IP和端口
admin-address = 0.0.0.0:5678   #Atlas监听的管理接口IP和端口
charset = utf8   #默认字符集

查看监听端口

netstat -tanlp | grep mysql

开启、关闭Atlas

/usr/local/mysql-proxy/bin/mysql-proxyd test start
/usr/local/mysql-proxy/bin/mysql-proxyd test stop

登录并管理Atlas

 mysql -h 10.142.132.50 -P 5678 -u admin -padmin   #登录管理
 mysql> select * from help;    #查看Atlas帮助
+-------------------+---------------------------------------+
| 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", ...                        |
| ADD CLIENT $client         | example: "add client 192.168.1.2", ...                  |
| REMOVE CLIENT $client      | example: "remove client 192.168.1.2", ...               |
| SAVE CONFIG                | save the backends to config file                        |
+-------------------+---------------------------------------+
10 rows in set (0.00 sec)

正常通过代理操作

 mysql -h 10.142.132.50 -P 1234 -u root -pmysql  #通过代理机器登录mysql
 SHOW VARIABLES LIKE ‘server_id‘;        #查看当前Mysql的序号

发现上面的SHOW VARIABLES LIKE ‘server_id‘;操作,每次的结果都不一样,分离是3台从库的server_id,说明我们的读写分离功能配置成功了!

到此为止,咱们的读写分离功能就配置结束了!

只要朋友们仔细点按着我写的文章一步一步操作,相信你也可以成功的,加油吧!

时间: 2024-10-13 04:14:33

探索MySQL高可用架构之MHA(5)的相关文章

探索MySQL高可用架构之MHA(7)

-----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的keepalive读写分离! 本篇文章主要介绍本次架构中的mha安装部分! 关于MHA MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于 Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在 0~30秒之内自动完成数据库的故

探索MySQL高可用架构之MHA(4)

-----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构中的Mysql源码安装.本篇文章主要介绍本次架构中的ABBB复制. 首先我们先介绍什么是MySql AB复制???? AB复制又称主从复制,实现的是数据同步.如果要做MySQL AB复制,数据库版本尽量保持一致.如果版本不一致,从服务器版本高于主服务器,但是版本不一致不能做双向复制. MySQL AB复制有什么好处呢? a.解决宕机带来的数据不一致,因为MySQL AB复制可以实时备份数据. b.减轻数据库服务器压力,这点很容

探索MySQL高可用架构之MHA(6)

-----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的Atlas读写分离! 本篇文章主要介绍本次架构中的keepalive部分! 什么是Keepalived呢???? keepalived是一款c语言写的实现在linux系统上实现负载均衡和高可用的软件.它遵从于GNU是一款优秀的开源软件.keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障的发生. 两个关键词的解释 负载均衡 keepalived内置了对ipvs函数的调

MySQL高可用架构之MHA (未完,待续)

MySQL高可用架构之MHA 简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. 该软件由两部分组成:

MySQL高可用架构之MHA

1.关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover功能.MHA在监控到master节点故障时,会提升其中拥有的最新数据的slave节点成为新的master节点,在此期间,MHA会通过其它从节点获取额外信息来避免一致性方面的问题.MHA还提供了master节点的在线切换功能,即按需切换master/slave节点. MHA服务有两种角色,MHA Manager(管理节点)和MHA No

MySQL高可用系列之MHA(二)

一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: hostname/ip/port (Local Only) hostname为MySQL Server的IP地址或主机名: ip为MySQL Server的IP地址,缺省从$hostname中获取:port为MySQL Server的端口号,缺省为3306 ssh_host/ssh_ip/ssh_por

mysql高可用集群——MHA架构

目录 1.下载 2.搭建mha 2.1 系统配置 2.2 架构 2.3 添加ssh公钥信任 2.4 安装mha节点 2.5 manager配置文件 2.6 检查 2.7 启动manager进程 2.8 碰到的问题 3.测试切换 3.1 正常切换测试 3.2 回切测试 3.3 雪崩测试 3.4 主从不一致切换测试 下载 mha链接地址:http://pan.baidu.com/s/1pJkDGX9#dir/path=%2Fmysql%2FHA%2Fmha 或者:https://code.googl

mysql实现高可用架构之MHA

一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题.MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点. MHA 是由日本人 yoshinorim

整个MHA+keepalived+lvs+mysql高可用架构配置说明

整个MHA+keepalived+lvs+mysql高可用架构配置说明1.1. 环境简介1.1.1.vmvare虚拟机,系统版本CentOS7.5 x86_64位最小化安装,mysql的版本5.7.21,1.1.2.虚拟机器的ssh端口均为默认22,1.1.3.虚拟机的iptables全部关闭,1.1.4.虚拟机的selinux全部关闭,1.1.5.虚拟机服务器时间全部一致 ntpdate 0.asia.pool.ntp.org1.1.6.3台机器的ssh端口为22**1.2.此次试验采用的是3