Atlas代理MySQL集群实现读写分离

  • 一、Atlas简介和架构
    • 1.1 环境准备
    • 1.2 配置时间服务器
  • 二、主服务器配置
    • 2.1 master节点1的配置
    • 2.2 master节点2的配置
    • 2.3 主服务器配置完成后的测试
  • 三、从服务器配置
    • 3.1 slave节点1的配置
    • 3.1 slave节点2的配置
    • 3.3 从服务器配置完成后的测试
  • 四、Atlas的配置
    • 4.1 下载并安装Atlas
    • 4.2 配置读写分离
    • 4.3 启动Atlas软件
    • 4.4 测试Atlas代理MySQL

一、Atlas简介和架构

  • Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-prox 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。
  • Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。Atlas的整体架构,可参考下面这两幅图:

1.1 环境准备

IP地址 主机参数
atlas_agent 192.168.100.10
mysql_master_node01 192.168.100.20
mysql_master_node02 192.168.100.21
mysql_slave_node01 192.168.100.11
mysql_slave_node02 192.168.100.12
#MySQL主从节点安装MySQL5.7
yum -y install mysql-community-server*#启动MySQL
systemctl start mysqld#查找MySQL初始密码并进行修改
grep password /var/log/mysqld.log
mysqladmin -uroot -p'g<jrr-jrU8-D' password 'Pakho@611'

1.2 配置时间服务器

#建立时间同步环境,在主节点上搭建时间同步服务器
[root@mysql_master_node01 ~]# yum -y install ntp#配置NTP
[root@mysql_master_node01 ~]# vim /etc/ntp.conf
server 127.127.1.0
Fudge 127.127.1.0 stratum 8           #注释原有pool下的server配置,设置时区为+08区#重启服务并设置为开机启动
[root@mysql_master_node01 ~]# systemctl restart ntpd && systemctl enable ntpd#在其余节点上进行时间同步
yum -y install ntpdate
ntpdate 192.168.100.20

二、主服务器配置

2.1 master节点1的配置

#启动二进制日志
[root@mysql_master_node01 ~]# vim /etc/my.cnf
[mysqld]
log_bin                                                 #开启二进制目录
server-id=1                                             #指明服务器ID
gtid_mode=ON
enforce_gtid_consistency=1
[root@mysql_master_node01 ~]# systemctl restart mysqld  #重启以使配置生效#登录MySQL授权复制用户
[root@mysql_master_node01 ~]# mysql -uroot -p
mysql> grant replication slave,replication client on *.* to 'myslave'@'192.168.100.%' identified by 'Pakho@0403';
#该动作并不是集群中必要的动作,是一次授权行为,该账户仅用于集群同步时使用
#replication:复制
mysql> flush privileges;#设置对应主服务器
mysql> change master to-> master_host='192.168.100.21',-> master_user='myslave',-> master_password='Pakho@0403',-> master_auto_position=1;                           #自动进行位置记录mysql> start slave;
mysql> show slave status\G

2.2 master节点2的配置

[root@mysql_master_node02 ~]# vim /etc/my.cnf
[mysqld]
log_bin                                                 #开启二进制目录
server-id=2                                             #指明服务器ID
gtid_mode=ON
enforce_gtid_consistency=1
[root@mysql_master_node02 ~]# systemctl restart mysqld  #重启以使配置生效#登录MySQL授权复制用户
[root@mysql_master_node02 ~]# mysql -uroot -p
mysql> grant replication slave,replication client on *.* to 'myslave'@'192.168.100.%' identified by 'Pakho@0403';
mysql> flush privileges;#设置对应主服务器
mysql> change master to-> master_host='192.168.100.20',-> master_user='myslave',-> master_password='Pakho@0403',-> master_auto_position=1;                           #自动进行位置记录mysql> start slave;
mysql> show slave status\G

2.3 主服务器配置完成后的测试

# master_node01建表,node02查看
mysql> create database master;

# master_node02建表,node01查看
mysql> create table Y2101(id int);


双方同步成功,双主设置完成!

三、从服务器配置

#同步现有数据库并发送至从服务器[root@mysql_master_node01 ~]# mysqldump -p'Pakho@611' --all-databases --single-transaction --master-data=2 --flush-logs > mmss-mysql-all.sql
#所有的库,保持数据可用性,不关机的备份 InnoDB一致性服务可用性,注释掉二进制日志记录,切断日志重定向到备份文件[root@mysql_master_node01 ~]# scp -r mmss-mysql-all.sql 192.168.100.11:/tmp
[root@mysql_master_node01 ~]# scp -r mmss-mysql-all.sql 192.168.100.12:/tmp

3.1 slave节点1的配置

#从服务器数据还原
[root@mysql_slave_node01 ~]# mysql -uroot -p'Pakho@611' </tmp/mmss-mysql-all.sql
#配置MySQL配置文件
[root@mysql_slave_node01 ~]# vim /etc/my.cnf
[mysqld]
server-id=3
gtid_mode=ON                                           #GTID开启
enforce_gtid_consistency=1                             #开启自动协商ID
master-info-repository=TABLE                           #将主服务器的信息存在表,更安全
relay-log-info-repository=TABLE                        #把中继日志也存在表里,更安全
[root@mysql_slave_node01 ~]# systemctl restart mysqld  #重启以配置生效mysql> change master to-> master_host='192.168.100.20',                   #改变主服务器-> master_user='myslave',                          #拷贝时所使用的用户-> master_password='Pakho@0403',                   #账号的密码-> master_auto_position=1                          #自动进行位置记录-> for channel '192.168.100.20';                   #第一通道
mysql> change master to-> master_host='192.168.100.21',-> master_user='myslave',-> master_password='Pakho@0403',-> master_auto_position=1-> for channel '192.168.100.21';                   #第二通道
mysql> start slave;                                    #启动从服务器
mysql> show slave status\G

3.1 slave节点2的配置

#从服务器数据还原
[root@mysql_slave_node02 ~]# mysql -uroot -p'Pakho@611' </tmp/mmss-mysql-all.sql
#配置MySQL配置文件
[root@mysql_slave_node02 ~]# vim /etc/my.cnf
[mysqld]
server-id=4
gtid_mode=ON                                           #GTID开启
enforce_gtid_consistency=1                             #开启自动协商ID
master-info-repository=TABLE                           #将主服务器的信息存在表,更安全
relay-log-info-repository=TABLE                        #把中继日志也存在表里,更安全
[root@mysql_slave_node02 ~]# systemctl restart mysqld  #重启以配置生效[root@mysql_slave_node02 ~]# mysql -uroot -p
mysql> change master to-> master_host='192.168.100.20',                   #改变主服务器-> master_user='myslave',                          #拷贝时所使用的用户-> master_password='Pakho@0403',                   #账号的密码-> master_auto_position=1                          #自动进行位置记录-> for channel '192.168.100.20';                   #第一通道
mysql> change master to-> master_host='192.168.100.21',-> master_user='myslave',-> master_password='Pakho@0403',-> master_auto_position=1-> for channel '192.168.100.21';                   #第二通道
mysql> start slave;                                    #启动从服务器
mysql> show slave status\G

3.3 从服务器配置完成后的测试

#插入数据后分别进入从服务器查看数据[root@mysql_master_node01 ~]# mysql -uroot -p'Pakho@611' -e 'insert into master.Y2101 values (20)';
[root@mysql_master_node02 ~]# mysql -uroot -p'Pakho@611' -e 'insert into master.Y2101 values (21)';

四、Atlas的配置

4.1 下载并安装Atlas

  • Atlas官方网站
#下载Atlas
[root@atlas_agent ~]# wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm#安装Atlas
[root@atlas_agent ~]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
  • 安装完成后会默认在/usr/local/mysql-proxy下生成4个文件夹,以及需要配置的文件

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

      1. encrypt是用来生成MySQL密码加密的,在配置的时候会用到
      2. mysql-proxy是MySQL自己的读写分离代理
      3. mysql-proxyd是360的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的
    • conf目录下放的是配置文件
      1. test.cnf只有一个文件,用来配置代理的,可以使用vim来编辑
    • lib目录下放的是一些包,以及Atlas的依赖
    • log目录下放的是日志,如报错等错误信息的记录

4.2 配置读写分离

#配置4台服务器节点开放权限给Atlas,四台服务器同时操作
mysql> grant all on *.* to test@'192.168.100.%' identified by 'Admin@123';
mysql> flush privileges;#加密用户密码
[root@atlas_agent ~]# /usr/local/mysql-proxy/bin/encrypt Admin@123
Tw8uck69VjyTZ6zxvGQr9A==#编辑test.cnf配置文件
[root@atlas_agent ~]# vim /usr/local/mysql-proxy/conf/test.cnf[mysql-proxy]#带#号的为非必需的配置项目#管理接口的用户名
admin-username = user#管理接口的密码
admin-password = pwd#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 192.168.100.20:3306,192.168.100.21:3306#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 192.168.100.11:3306@1,192.168.100.12@1#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = test:Tw8uck69VjyTZ6zxvGQr9A==#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:1234#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345

4.3 启动Atlas软件

#配置无误后,启动Atlas软件
[root@atlas_agent ~]# /usr/local/mysql-proxy/bin/mysql-proxyd test start
OK: MySQL-Proxy of test is started#关闭软件
/usr/local/mysql-proxy/bin/mysql-proxyd test stop

4.4 测试Atlas代理MySQL

#安装MySQL
[root@atlas_agent ~]# yum -y install mysql-community-server*#用管理账号user登录2345管理接口IP和端口
[root@atlas_agent ~]# mysql -h 127.0.0.1 -P 2345 -uuser -ppwd#查看帮助
mysql> select * from help;#查看服务器集群中的服务器状态
mysql> select * from backends;

#通过代理访问Mysql
[root@atlas_agent ~]# mysql -h192.168.100.10  -utest -p'Admin@123' -P1234
#查询
mysql> select * from master.Y2101;

数据库应用——Atlas代理MySQL集群实现读写分离相关推荐

  1. 数据库应用——MyCat代理MySQL集群

    MyCat代理MySQL集群 一.MyCat代理MySQL集群 1.1 MyCat概述 1.2 MyCat功能 1.3 MyCat图示 二.Mycat实战详解 2.1 MyCat实战案例 2.1.1 ...

  2. 使用阿里云Mysql集群做读写分离_以及使用阿里云服务器自己搭建MyCat集群_费用核算---Linux工作笔记046

    咨询了一下阿里云,如果买阿里云的MySQL服务器的话,一台是5500一年,4GHz频率的CPU, 50G的硬盘,如果你也跟我一样,一个单表的数据就达到了20GB的话,那么,只买一台阿里的MySql 服 ...

  3. CentoOS7.9搭建mysql5.7分布式集群+主从复制+读写分离知识整理

    一.集群介绍 MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, Galera Cluster, InnoDB ...

  4. 高性能数据库集群:读写分离

    目录 1.前言 2.读写分离 2.1 什么是读写分离? 2.2 什么情况下需要读写分离? 2.3 复制延迟 2.4 分配机制 2.5 Mysq支持的复制类型及与原理 1.前言 关系数据库由于其 ACI ...

  5. Redis集群(读写分离、哨兵机制、Cluster集群)

    文章目录 概念概述 一.主从复制 原理 优点 缺点 同步原理 二.哨兵(Sentinel)机制 原理 哨兵的三大工作任务 优点 缺点 三.Redis内置集群(Cluster模式) 原理 集群搭建(实践 ...

  6. mysql集群一:主从复制,通过mysql-proxy做负载均衡

    mysql集群架构方式很多,根据不同的需求做不一样的架构,简单一点的就是mysql的replication,也就是Mysql的复制功能,模式有:master-slaves,master-slaves- ...

  7. 6 MySQL 集群Cluster

    文章目录 6 MySQL 集群Cluster 6.1 MySQL 主从复制 6.1.1 主从复制架构和原理 6.1.1.1 服务性能扩展方式 6.1.1.2 MySQL的扩展 6.1.1.3 复制的功 ...

  8. MySQL集群解决方案

    ** 1:mysql数据分库分表,读写分离,主从切换使用mycat 2:集群方案(分布式+集群) ** 分布式:不同的服务器部署不同的模块/工程,他们之间通过RPC/Rmi通信和调用,对外提供服务和组 ...

  9. MySQL主从架构、读写分离、集群相关面试问题

    文章目录 一.MySQL主从同步原理 二.MySQL主从集群面试相关问题 1.全库同步与部分同步 2.GTID同步集群 3.集群扩容与MySQL数据迁移 4.理解半同步复制 5.主从集群与读写分离 6 ...

最新文章

  1. 雷观(十七):想拉人入伙,合伙创业,请拿出一点认真的态度
  2. Kafka基础知识入门
  3. [leetcode] 746.使用最小花费爬楼梯
  4. 性能测试系列:高可用测试linux常用命令
  5. 关于两栏布局,三栏布局,一级点击三角触发select的onchange事件问题
  6. 程序设计与编译(C++入门)
  7. EGE程序打包发布与图标修改
  8. 《人人都是项目经理》-云倩读书笔记
  9. vue网页打印后事件失效
  10. 电商网站一般用什么技术开发
  11. 【短道速滑四】Halcon的texture_laws算子自我研究
  12. python正则表达式爬取链家租房信息
  13. 【BUG】Python3|爬虫请求得到的json中的值全是问号
  14. Pycharm环境下调用Qt desinger 常见问题以及解决方法
  15. Docker 下 jitsi-meet 视频服务器 安装部署
  16. 因增强导致BDC录屏执行异常的梗
  17. 苹果7p服务器维护中,苹果7p无服务怎么解决
  18. ubuntu 扩充交换空间
  19. 千分位、两位小数的展示
  20. 大学物理稳恒电场——恒定电流

热门文章

  1. C++制作加密聊天程序:这样设置一下,再也不用担心女朋友翻你手机了!
  2. excel中条形图的条目排序与逆序
  3. 解决:Excel打开文件,内容不显示
  4. js获取微信号_前端js可以直接获取到微信用户基本信息吗
  5. 小 V 视频号下载工具(可下载所有视频号中的视频+公众号中的部分视频、音频)
  6. 外网如何连接学校服务器
  7. nginx做小程序外链跳转_微信小程序跳转到其他网页(外部链接)的实现方法
  8. Python爬虫入门好学吗?为什么?
  9. Excel 快速跳到表格最后一行/第一行
  10. Stein引理(Stein's lemma)