数据库应用——Atlas代理MySQL集群实现读写分离
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
目录下放的都是可执行文件encrypt
是用来生成MySQL密码加密的,在配置的时候会用到mysql-proxy
是MySQL自己的读写分离代理mysql-proxyd
是360的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的
conf
目录下放的是配置文件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集群实现读写分离相关推荐
- 数据库应用——MyCat代理MySQL集群
MyCat代理MySQL集群 一.MyCat代理MySQL集群 1.1 MyCat概述 1.2 MyCat功能 1.3 MyCat图示 二.Mycat实战详解 2.1 MyCat实战案例 2.1.1 ...
- 使用阿里云Mysql集群做读写分离_以及使用阿里云服务器自己搭建MyCat集群_费用核算---Linux工作笔记046
咨询了一下阿里云,如果买阿里云的MySQL服务器的话,一台是5500一年,4GHz频率的CPU, 50G的硬盘,如果你也跟我一样,一个单表的数据就达到了20GB的话,那么,只买一台阿里的MySql 服 ...
- CentoOS7.9搭建mysql5.7分布式集群+主从复制+读写分离知识整理
一.集群介绍 MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, Galera Cluster, InnoDB ...
- 高性能数据库集群:读写分离
目录 1.前言 2.读写分离 2.1 什么是读写分离? 2.2 什么情况下需要读写分离? 2.3 复制延迟 2.4 分配机制 2.5 Mysq支持的复制类型及与原理 1.前言 关系数据库由于其 ACI ...
- Redis集群(读写分离、哨兵机制、Cluster集群)
文章目录 概念概述 一.主从复制 原理 优点 缺点 同步原理 二.哨兵(Sentinel)机制 原理 哨兵的三大工作任务 优点 缺点 三.Redis内置集群(Cluster模式) 原理 集群搭建(实践 ...
- mysql集群一:主从复制,通过mysql-proxy做负载均衡
mysql集群架构方式很多,根据不同的需求做不一样的架构,简单一点的就是mysql的replication,也就是Mysql的复制功能,模式有:master-slaves,master-slaves- ...
- 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 复制的功 ...
- MySQL集群解决方案
** 1:mysql数据分库分表,读写分离,主从切换使用mycat 2:集群方案(分布式+集群) ** 分布式:不同的服务器部署不同的模块/工程,他们之间通过RPC/Rmi通信和调用,对外提供服务和组 ...
- MySQL主从架构、读写分离、集群相关面试问题
文章目录 一.MySQL主从同步原理 二.MySQL主从集群面试相关问题 1.全库同步与部分同步 2.GTID同步集群 3.集群扩容与MySQL数据迁移 4.理解半同步复制 5.主从集群与读写分离 6 ...
最新文章
- 雷观(十七):想拉人入伙,合伙创业,请拿出一点认真的态度
- Kafka基础知识入门
- [leetcode] 746.使用最小花费爬楼梯
- 性能测试系列:高可用测试linux常用命令
- 关于两栏布局,三栏布局,一级点击三角触发select的onchange事件问题
- 程序设计与编译(C++入门)
- EGE程序打包发布与图标修改
- 《人人都是项目经理》-云倩读书笔记
- vue网页打印后事件失效
- 电商网站一般用什么技术开发
- 【短道速滑四】Halcon的texture_laws算子自我研究
- python正则表达式爬取链家租房信息
- 【BUG】Python3|爬虫请求得到的json中的值全是问号
- Pycharm环境下调用Qt desinger 常见问题以及解决方法
- Docker 下 jitsi-meet 视频服务器 安装部署
- 因增强导致BDC录屏执行异常的梗
- 苹果7p服务器维护中,苹果7p无服务怎么解决
- ubuntu 扩充交换空间
- 千分位、两位小数的展示
- 大学物理稳恒电场——恒定电流