广告
返回顶部
首页 > 资讯 > 数据库 >Atlas+mysql主主集群实现读写分离
  • 649
分享到

Atlas+mysql主主集群实现读写分离

2024-04-02 19:04:59 649人浏览 独家记忆
摘要

前言    目前线上系统数据库采用的是主主架构。其中一台主仅在故障时切换使用,(仅单台服务器对外提供服务,当一台出现问题,切换至另一台),该结构很难支撑较大并发,另外双主中的另外一台机在

前言

    目前线上系统数据库采用的是主主架构。其中一台主仅在故障时切换使用,(仅单台服务器对外提供服务,当一台出现问题,切换至另一台),该结构很难支撑较大并发,另外双主中的另外一台机在非故障时没得到有效利用。 结合以上情况,拟采用数据库中间件提供读写分离功能(一主读写,一主读)。既可以提高读并发能力,又可以充分利用数据库服务器,后期可继续增加主主集群的从服务器扩充读并发性能。如下为具体架构图:

Atlas+mysql主主集群实现读写分离

Atlas官方链接: https://GitHub.com/Qihoo360/Atlas/blob/master/README_ZH.md

Atlas下载链接: Https://github.com/Qihoo360/Atlas/releases

Atlas (普通) : Atlas-2.2.1.el6.x86_64.rpm

Atlas (分表) : Atlas-sharding_1.0.1-el6.x86_64.rpm


Ip及软件信息

IP

系统

软件版本

安装路径

备注

192.168.9.150

Centos release 6.8 (Final)

Atlas-2.2.1.el6.x86_64.rpm

/usr/local/Mysql-proxy

Atlas普通版 

192.168.9.175

CentOS release 6.8 (Final)

mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

/usr/local/mysql

主主集群

192.168.9.176

CentOS release 6.8 (Final)

mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

/usr/local/mysql

主主集群


MYSQL主主集群架设

基本原理:

    对于一个mysql服务器, 一般有两个线程来负责复制和被复制。当开启复制之后。

1. Slave 上面的io 线程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2. Master 接收到来自Slave 的IO 线程的请求后,通过负责复制的IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给Slave 端的IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在Master 端的Binary Log文件的名称以及在Binary Log 中的位置;

3. Slave 的IO 线程接收到信息后,将接收到的日志内容依次写入到Slave 端的Relay Log 文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master 端的binlog的文件名和位置记录到master-info 文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log 的哪个位置开始往后的日志内容,请发给我”。

4. Slave 的SQL 线程检测到Relay Log 中新增加了内容后,会马上解析该Log 文件中的内容成为在Master 端真实执行时候的那些可执行的Query 语句,并在自身执行这些Query。这样,实际上就是在Master 端和Slave 端执行了同样的Query,所以两端的数据是完全一样的。

 如图:

Atlas+mysql主主集群实现读写分离

主主设置,既两台服务器互为主从的配置。

略(网上很多相关配置)

 

 ATLAS数据库中间件安装

下载并安装ATLAS数据库中间件

cd /usr/local/src
 
wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
 
rpm –ivh Atlas-2.2.1.el6.x86_64.rpm

安装好了,它会默认在”/usr/local/mysql-proxy”下给你生成4个文件夹,以及需要配置的文件,如下:

[root@localhost mysql-proxy]# ls
bin  conf  lib  log

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

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

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

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

 

编辑配置文件

cd /usr/local/mysql-proxy/conf/
vim test.cnf
[mysql-proxy]
 
#带#号的为非必需的配置项目
 
#管理接口的用户名
admin-username = user
 
#管理接口的密码
admin-passWord = pwd
 
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔。注意设置为主库仅支持写功能。若要读写要同时将该库在从库中进行设置。支持读功能。
proxy-backend-addresses = 192.168.9.175:3306
 
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔 。这里将主库的数据库再次配置到这里用以支持读。达到读负载均衡的目的。
proxy-read-only-backend-addresses = 192.168.9.176:3306@1,192.168.9.175:3306@1
 
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = root:/iZxz+0GRoA=
 
#设置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 = message
 
#日志存放的路径
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和端口
proxy-address = 0.0.0.0:1234
 
#Atlas监听的管理接口IP和端口
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, 192.168.1
 
#Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
#lvs-ips = 192.168.1.1


编辑添加启动脚本

vim /etc/init.d/atlas
#!/bin/sh
#
#atlas:    Atlas Daemon
#
# chkconfig:    - 90 25
# description:  Atlas Daemon
#
# Source function library.
start()
{
        echo -n $"Starting atlas: "
        /usr/local/mysql-proxy/bin/mysql-proxyd test start
        echo 
}
stop()
{
        echo -n $"Shutting down atlas: "
        /usr/local/mysql-proxy/bin/mysql-proxyd test stop
        echo
}
ATLAS="/usr/local/mysql-proxy/bin/mysql-proxyd"
[ -f $ATLAS ] || exit 1
# See how we were called.
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                sleep 3
                start
                ;;
        *)
                echo $"Usage: $0 {start|stop|restart}"
                exit 1
esac
exit 0

赋予启动脚本权限并添加开机启动

chmod –R 755 /etc/init.d/atlas
chkconfig atlas on                               
 
启动atlas
service atlas start

端口介绍

默认会开启两个端口1234和2345端口。(以上端口可以在配置文件中修改)

Atlas监听的工作接口IP和端口

proxy-address = 0.0.0.0:1234

 

Atlas监听的管理接口IP和端口

admin-address = 0.0.0.0:2345

访问管理后台并查看管理命令(注意用户名密码为缺省的,为了安全最好修改掉):

mysql -uuser -ppwd -P2345 -h 127.0.0.1
mysql> select * from help;
+----------------------------+---------------------------------------------------------+
| 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", ...                        |
| SELECT * FROM clients      | lists the clients                                       |
| ADD CLIENT $client         | example: "add client 192.168.1.2", ...                  |
| REMOVE CLIENT $client      | example: "remove client 192.168.1.2", ...               |
| SELECT * FROM pwds         | lists the pwds                                          |
| ADD PWD $pwd               | example: "add pwd user:raw_password", ...               |
| ADD ENPWD $pwd             | example: "add enpwd user:encrypted_password", ...       |
| REMOVE PWD $pwd            | example: "remove pwd user", ...                         |
| SAVE CONFIG                | save the backends to config file                        |
| SELECT VERSION             | display the version of Atlas                            |
+----------------------------+---------------------------------------------------------+
16 rows in set (0.00 sec)

访问工作端口

可使用NAVICAT客户端进行连接配置

Atlas+mysql主主集群实现读写分离

读负载均衡验证(经验证会交替采用后端两台数据库服务器响应请求)

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| db1        |
+------------+
1 row in set
mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| db2        |
+------------+
1 row in set

读写分离验证

mysql> begin;select @@hostname;commit;
Query OK, 0 rows affected
 
+------------+
| @@hostname |
+------------+
| db1        |
+------------+
1 row in set
 
Query OK, 0 rows affected
 
mysql> begin;select @@hostname;commit;
Query OK, 0 rows affected
 
+------------+
| @@hostname |
+------------+
| db1        |
+------------+
1 row in set
 
Query OK, 0 rows affected

 

压力测试

    读写分离压力测试需要使用到jmeter了,它是Java写第一套开源的压力测试工具,因为这个比较方便。他有专门测试MySQL的模块,需要使用MySQL的JDBC驱动jar包,配置很简单,东西很好很强大很好用。

Jmeter下载地址:http://jmeter.apache.org/download_jmeter.cgi

MySQL的JDBC  :http://dev.mysql.com/downloads/connector/j/

下载下来后,分别都解压开来,打开Jmeter ( 在bin路面下的jmeter.bat ) ,在测试计划中,导入JDBC的jar包。具体步骤略



您可能感兴趣的文档:

--结束END--

本文标题: Atlas+mysql主主集群实现读写分离

本文链接: https://www.lsjlt.com/news/36631.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Atlas+mysql主主集群实现读写分离
    前言    目前线上系统数据库采用的是主主架构。其中一台主仅在故障时切换使用,(仅单台服务器对外提供服务,当一台出现问题,切换至另一台),该结构很难支撑较大并发,另外双主中的另外一台机在...
    99+
    2022-10-18
  • MYSQL主从和ATLAS读写分离的搭建
    本篇内容介绍了“MYSQL主从和ATLAS读写分离的搭建”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、...
    99+
    2022-10-18
  • Atlas实现读写分离
    该Atlas方案的实现需要基于MHA架构(而MHA架构需要 实现mysql主从复制且开启GTID特性) 常见方案介绍: Mysql-proxy(oracle)Mysql-router(oracle)Atla...
    99+
    2022-10-18
  • MySQL 中间件Atlas 实现读写分离
    〇 Atlas架构介绍 Atlas是Qihoo360开发的一个中间件,位于Client和MySQL Server中间层,可以作为读写分离,分库分表中间件。 对于MySQL Server而言,Atlas像是...
    99+
    2022-10-18
  • MySQL主从复制、读写分离、高可用集群搭建
    MySQL主从复制、读写分离、高可用集群搭建 一、服务介绍      1.1 Keepalived    Keepa...
    99+
    2022-10-18
  • Mycat如何实现Mysql集群读写分离
    这篇文章给大家分享的是有关Mycat如何实现Mysql集群读写分离的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySQL 读写分离的概述MySQL 作为目前世界上使用最广泛的免...
    99+
    2022-10-19
  • Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群
    目录 高可用: 为什么需要高可用呢? 高可用的主要作用: keepalived是什么?它用在哪里? 什么是VRRP协议,它的作用是什么? 搭建一个基于keepalived的高可用Mysql主从复制读写分离集群 一、项目中的IP地址配置表:...
    99+
    2023-09-18
    数据库
  • mysql主从及读写分离
     主从同步1 主配置把237配置为主数据库服务器  授权用户从42数据库服务器连接自己的时候有拷贝数据的权限grant   replication &nbs...
    99+
    2022-10-18
  • mysql主从配置实现一主一从读写分离
    主从介绍Mysql主从又叫Replication、AB复制。简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步 mysql主从是基于binlog,主上需开启binlo...
    99+
    2022-10-18
  • Django搭建MySQL主从实现读写分离
    目录一、MySQL主从搭建操作步骤二、Django实现读写分离自动指定一、MySQL主从搭建 主从配置原理: 主库写日志到 BinLog 从库开个 IO 线程读取...
    99+
    2022-11-12
  • Redis主从实现读写分离
    前言 大家在工作中可能会遇到这样的需求,即Redis读写分离,目的是为了压力分散化。下面我将为大家介绍借助AWS的ELB实现读写分离,以写主读从为例。 实现 引用库文件 <!-- redis客...
    99+
    2022-06-04
    主从 Redis
  • Mycat中间件实现Mysql主从读写分离
    环境规划: IP地址 主机名 角色 备注 10.4.132.50 k8s01 mycat,master 10.4.132.42 k8s02 slave ...
    99+
    2022-10-18
  • MySQL 主从复制与读写分离
             在实际生产环境中,如果对数据库的读写都在同一块数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个...
    99+
    2022-10-18
  • mysql主从基于docker和django实现读写分离
    目录1.主从搭建实操2.django实现读写分离settings.py配置手动指定读写分离自动指定(写router和配置setting)更细粒度(分库分表时需要)在数据库迁移时,可以指定把哪个app的表结构迁移到哪个库1...
    99+
    2022-08-25
  • amoeba实现mysql读写分离+主从复制架构
    一、环境系统:centos6.5mysql版本:mysql5.6master服务器:192.168.1.21slave服务器: 192.168.1.100master写 slave读二、实现mysql主从复...
    99+
    2022-10-18
  • MyCat怎么实现MySQL一主两从读写分离
    这篇文章主要介绍“MyCat怎么实现MySQL一主两从读写分离”,在日常操作中,相信很多人在MyCat怎么实现MySQL一主两从读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2022-10-18
  • MyCat如何实现MySQL双主一从读写分离
    这篇文章给大家分享的是有关MyCat如何实现MySQL双主一从读写分离的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1)配置server.xml<user nam...
    99+
    2022-10-18
  • SpringBoot环境-MySQL主从复制,读写分离的实现
    目录 概述 环境 主从复制 读写分离 概述  记录在MySQL数据库中主从复制以及SpringBoot环境操作MySQL数据库读写分离的实现步骤。  背景 :因为我们在对数据库进行操作时,如果读写操作都由一台数据库承担的话压...
    99+
    2023-09-06
    mysql 数据库 java linux
  • 利用Amoeba实现MySQL主从复制和读写分离
    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave)的方式...
    99+
    2022-10-18
  • MySQL中如何实现主从复制与读写分离
    MySQL中如何实现主从复制与读写分离,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1,mysql的配置CentOS 5.x,6.0编译安装N...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作