采用Atlas实现MySQL读写分离

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

##采用Atlas实现MySQL读写分离


一、基础介绍

==========================================================================================

1、背景描述

目前我们的高可用DB的代理层采用的是360开源的Atlas,从上线以来,已稳定运行2个多月。无论是从性能上,还是稳定性上,

相比其他开源组件(amoeba、cobar、MaxScale、MySQL-Proxy等),还是很出色的。


当初我们之所以选择Atlas,主要看中它有以下优点:

(1)、基于mysql-proxy-0.8.2进行修改,代码完全开源;

(2)、比较轻量级,部署配置也比较简单;

(3)、支持DB读写分离;

(4)、支持从DB读负载均衡,并自动剔除故障从DB;

(5)、支持平滑上下线DB;

(6)、具备较好的安全机制(IP过滤、账号认证);

(7)、版本更新、问题跟进、交流圈子都比较活跃。


在测试期间以及线上问题排查过程中,得到了360 Atlas作者朱超的热心解答,在此表示感谢。有关更多Atlas的介绍,我就不一一例举,可以参考以下链接:

https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md


3、系统环境

CentOS 7.2 x86_64

网络环境:master  192.168.10.25

          slave   192.168.10.26

  mysql-atlas-proxy  192.168.10.28


##安装mysql-server主服务端(192.168.10.25)

service  firewalld  stop

chkconfig  firewalld  off

setenforce  0

getenforce

sed  -i  's/^SELINUX=enforcing/SELINUX=permissive/'  /etc/selinux/config

yum  install  -y  mariadb  mariadb-server

service  mariadb  restart

chkconfig  mariadb  on

sed -i '1aserver_id=25'  /etc/my.cnf

sed -i '2alog-bin=mysql-bin'  /etc/my.cnf

service  mariadb  restart

mysql -uroot  -e "grant  all on *.*  to  admin@'%'  identified  by '01';flush privileges;"

mysql -uroot  -e "grant  replication slave on *.*  to  rep@'%'  identified  by '01';flush privileges;"

mysql -uroot  -e "select user,host,password from  mysql.user;"

mysql  -uroot  -e  "reset master;show  master  status;"


##安装mysql-server主服务端(192.168.10.26)

service  firewalld  stop

chkconfig  firewalld  off

setenforce  0

getenforce

sed  -i  's/^SELINUX=enforcing/SELINUX=permissive/'  /etc/selinux/config

yum  install  -y  mariadb  mariadb-server

service  mariadb  restart

chkconfig  mariadb  on

sed -i '1aserver_id=26'  /etc/my.cnf

sed -i '2alog-bin=mysql-bin'  /etc/my.cnf

service  mariadb  restart

mysql -uroot  -e "grant  all on *.*  to  admin@'%'  identified  by '01';flush privileges;"

mysql -uroot  -e "grant  replication slave on *.*  to  rep@'%'  identified  by '01';flush privileges;"

mysql -uroot  -e "select user,host,password from  mysql.user;"

mysql  -uroot  -e  "change master to master_host='192.168.100.11',master_user='rep',master_password='01',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=245;"

sleep  30s

mysql  -uroot  -e  "start slave;show  slave  status\G"



##安装配置atlas读写分离(192.168.10.28)

service  iptables  stop

chkconfig  iptables  off

setenforce  0

getenforce

sed  -i  's/^SELINUX=enforcing/SELINUX=permissive/'  /etc/selinux/config

grep  '^SELINUX='  /etc/selinux/config


安装和配置atlas软件

rpm  -ivh  Atlas-2.2.1.el6.x86_64.rpm

echo "PATH=$PATH:/usr/local/mysql-proxy/bin/"  >> /etc/profile

source  /etc/profile

ll /usr/local/mysql-proxy/


##mysql-proxy文件功能说明:

bin目录下放的都是可执行文件

1. “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到

2. “mysql-proxy”是MySQL自己的读写分离代理

3. “mysql-proxyd”是360弄出来的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的


conf目录下放的是配置文件

1. “test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑

lib目录下放的是一些包,以及Atlas的依赖

log目录下放的是日志,如报错等错误信息的记录

进入bin目录,使用encrypt来对数据库的密码进行加密,我的MySQL数据的用户名是admin,密码是01,我需要对密码进行加密


cd /usr/local/mysql-proxy/bin/

./encrypt 01   生成加密密码,并复制此密码

cd /usr/local/mysql-proxy/conf/

cp -v  test.cnf  test.cnf.bak    //备份test.cnf配置文件

vi  test.conf   修改后的读写分享的完整配置文件内容

[mysql-proxy]

admin-username = user

admin-password = pwd

proxy-backend-addresses = 192.168.100.11:3306

pwds = admin:VFnEp9P4Vu4=, rep:VFnEp9P4Vu4=

daemon = true

keepalive = true

event-threads = 8

log-level = message

log-path = /usr/local/mysql-proxy/log

proxy-address = 0.0.0.0:3306

admin-address = 0.0.0.0:2345


test.cnf读写分离配置文件功能说明:

1:[mysql-proxy]   //读写分离代理配置

6:admin-username = user    //管理接口的用户名

9:admin-password = pwd     //管理接口的密码

12:proxy-backend-addresses = 192.168.100.11:3306    //主数据库的IP地址和端口号(可读可写)

18:pwds = admin:VFnEp9P4Vu4=, rep:VFnEp9P4Vu4=      //后端MYSQL的用户名和encrypt命令生成的加密密码

21:daemon = true      //设置为守护进程模式(后台运行)

24:keepalive = true   //允许keepalive

27:event-threads = 8   //工作线程数为8

30:log-level = message   //日志等级为message消息

33:log-path = /usr/local/mysql-proxy/log    //日志文件路径

45:proxy-address = 0.0.0.0:3306      //Atlas监听的管理接口IP和端口

48:admin-address = 0.0.0.0:2345      //Atlas监听的管理接口IP和端口


重启atlas服务:/usr/local/mysql-proxy/bin/mysql-proxyd  test  start

查状态:./etc/init.d/mysqld  status


设置mysql-proxyd开机启动:

echo "/usr/local/mysql-proxy/bin/mysql-proxyd  test  start" >> /etc/profile

source  /etc/profile


登录测试:mysql  -uadmin  -p01  -h 192.168.10.28 -P3306


登录到atlas管理端:mysql  -uuser  -ppwd  -h 192.168.10.28 -P2345







      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1952214,如需转载请自行联系原作者




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
关系型数据库 MySQL Java
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
92 0
|
4月前
|
SQL 关系型数据库 MySQL
mysql 主从复制与读写分离
mysql 主从复制与读写分离
|
30天前
|
SQL 关系型数据库 MySQL
(二十五)MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学
在上篇《主从原理篇》中,基本上把主从复制原理、主从架构模式、数据同步方式、复制技术优化.....等各类细枝末节讲清楚了,本章则准备真正对聊到的几种主从模式落地实践,但实践的内容通常比较枯燥乏味,因为就是调整各种配置、设置各种参数等步骤。
114 2
|
30天前
|
关系型数据库 MySQL PHP
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
49 2
|
11天前
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。
|
20天前
|
cobar 关系型数据库 MySQL
使用MyCat实现MySQL主从读写分离(一)概述
【8月更文挑战第11天】MySQL读写分离通过主从复制分散负载,主库负责写操作,从库承担读查询,以复制技术确保数据一致性。此策略有效缓解锁竞争,提升查询效能并增强系统可用性。实现方式包括应用层处理,简便快捷但灵活性受限;或采用中间件如MyCAT、Vitess等,支持复杂场景但需专业团队维护。
33 0
|
24天前
|
SQL 关系型数据库 MySQL
基于proxysql实现MySQL读写分离
基于proxysql实现MySQL读写分离
|
3月前
|
关系型数据库 MySQL
mysql-proxy实现mysql的读写分离
mysql-proxy实现mysql的读写分离
|
3月前
|
SQL 关系型数据库 MySQL
经验大分享:MySQL安装Atlas
经验大分享:MySQL安装Atlas
29 0
|
4月前
|
负载均衡 关系型数据库 MySQL
MySQL读写分离技术深度解析
在高并发、大数据量的互联网应用环境中,数据库作为数据存储的核心组件,其性能直接影响着整个系统的运行效率。MySQL作为最常用的开源关系型数据库之一,虽然功能强大,但在处理大量并发读写请求时,单点服务器的性能瓶颈逐渐显现。为了解决这一问题,MySQL读写分离技术应运而生,成为提升数据库性能、实现负载均衡的有效手段。

热门文章

最新文章

下一篇
云函数