MySQL集群高可用架构方案——Atlas架构
一. Atlas
1.简介
Atlas是由 Qihoo 360公司Web平台部基础架构团队,开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。
目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。现在有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。
2. 主要功能
Altas具有以下这些主要的功能:
读写分离
从库负载均衡
IP过滤
自动分表
DBA可平滑上下线DB
自动摘除宕机的DB
二. MySQL主从系统搭建
设计图
我们先来了解一下要实现的MySQL主从架构设计图。
2. 概述
从上图可以看出,如果我们要想使用Atlas,首先得需要搭建一个MySQL的集群。而Atlas作为数据库中间件,可以帮助我们实现请求路由、负载均衡等。
3. MySQL主从复制搭建
所以接下来,我们就要先实现一个MySQL主从架构的环境。
3.1 MySQL服务器版本选择
在Atlas官网,关于安装的注意事项中,建议MySQL选择的版本应该大于5.1版本,最好使用5.6版本,本教程使用MySQL5.6版本进行演示。
3.2 搭建步骤
我这里搭建MySQL集群使用docker容器进行搭建,关于Docker的学习,搭建可以查看千锋Docker视频教程(wilson)
https://www.bilibili.com/video/BV1ug411j71W
暂时无法在飞书文档外展示此内容
三. 基于Docker安装MYSQL
拉取MySQL5.6版本的镜像
首先我们进入duckerhub网站,地址如下:
https://hub.docker.com/
然后搜索mysql,查看mysql版本,将5.6版本的MySQL拉取到本地,拉取命令如下:
docker pull mysql:5.6.51
2. 开始安装
首先我们在docker平台上启动两个MySQL服务,一个作为主机,一个作为从机。
3. 启动MySQL
主机(名字叫mysql-master):
docker run -p3307:3306 --name mysql-master --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.51
从机(名字叫mysql-slave):
docker run -p3308:3306 --name mysql-slave --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.51
4.查看容器
启动完成之后,我们可以使用docker ps命令查看当前运行的mysql容器。
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
329f0925de00 mysql:5.6.51 "docker-entrypoint.s…" 9 seconds ago Up 7 seconds 0.0.0.0:3308->3306/tcp mysql-slave
b6e89b46286f mysql:5.6.51 "docker-entrypoint.s…" 17 seconds ago Up 16 seconds 0.0.0.0:3307->3306/tcp mysql-master
5. 设置主机和从机
接着我们就可以设置mysql-master为主机,设置mysql-slave为从机了。
5.1 进入容器内部
使用docker命令进入mysql-master容器内部:
docker exec -it b6e89b46286f bash
5.2 安装vim编辑器
进入容器之后,因为容器内部没有安装vim编辑器,所以首先要安装一个vim编辑器,方便我们后面进行编辑操作。在安装vim之前,要先更新一个apt库,执行更新库的命令为:
apt-get update
更新库完成之后,再执行安装vim编辑器命令:
apt-get install -y vim
如果不先更新apt库,那么vim可能会安装不成功。
5.3 编辑my.cnf配置文件
接着使用vim编辑器打开mysql的配置文件my.cnf:
vim /etc/mysql/my.cnf
在my.cnf配置文件中,设置server-id=100,这里随便设置一个任意整数即可,对MySQL集群进行编号。然后在my.cnf中开启log-bin日志,这个操作很重要,这是实现MySQL集群、数据同步的关键:
log-bin=mysql-bin
四. Atlas的安装/配置
Atlas官网地址
https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
2. 下载地址
https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
3. 安装注意事项
安装时要注意以下事项:
1). Atlas只能安装在64位系统上;
2). Centos 5.X安装 Atlas-XX.el5.x86_64.rpm,Centos 6.X安装Atlas-XX.el6.x86_64.rpm;
3). 我在Centos7.x上面,安装Atlas-XX.el6.x86_64.rpm也没问题;
4). 如果本机之前安装过,那么需要先卸载;
5). mysql版本应大于5.1,建议使用Mysql 5.6。
4. 安装步骤
Atlas安装极其简单,只需要一条命令就能快速安装完成。
sudo rpm –i Atlas-XX.el6.x86_64.rpm
5. test.cnf配置文件
安装目录在/usr/local/mysql-proxy文件夹下,安装好之后就是配置介绍。
配置文件(/usr/local/mysql-proxy/conf/test.cnf)里面介绍了一些非必须的配置,我这里将非必须的都删除掉,如果大家有需要,请自行查看。
[mysql-proxy]
#管理接口的用户名(默认即可,进入管理客户端的用户名,非操作数据库的用户名)
admin-username = user
#管理接口的密码(默认即可)
admin-password = pwd
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses =192.168.1.134:3307
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
#proxy-read-only-backend-addresses = 192.168.1.134:3308@1
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的root为示例,将其替换为你的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 = 2
#日志级别,分为message、warning、critical、error、debug五个级别
log-level = message
#日志存放的路径
log-path = /usr/local/mysql-proxy/log
#实例名称,用于同一台机器上多个Atlas实例间的区分
#instance = test
#Atlas监听的工作接口IP和端口,相当于MySQL的3306端口,用于操作数据库的,以前我们都是直连数据库,现在我们连接中间件即可.
proxy-address = 0.0.0.0:1234
#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345
上面就是Atlas的最简配置,如果你有还什么特殊需要,请查看详细官网,地址为:
https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E5%AE%89%E8%A3%85
五. Atlas的启动和测试
启动
进入/usr/local/mysql-proxy/bin目录,执行下面的命令启动、重启或停止Atlas:
(1). sudo ./mysql-proxyd test start 启动Atlas。
(2). sudo ./mysql-proxyd test restart 重启Atlas。
(3). sudo ./mysql-proxyd test stop 停止Atlas。
注意:
1. 运行文件是:mysql-proxyd(不是mysql-proxy)
2. test是conf目录下配置文件的名字,也是配置文件里instance项的名字,三者需要统一
3. 可以使用ps -ef | grep mysql-proxy查看Atlas是否已经启动或停止
2. 测试
测试1234端口号是否能操作数据库:
mysql -uroot -h192.168.1.134 -P1234 -p123456
测试2345端口号是否能进入管理控制台,对MySQL集群进行管理:
mysql -uuser -h192.168.1.134 -P2345 -ppwd
通过select * from help;语句查看管理DB的各类命令:
SELECT * FROM backends; 查看当前MySQL的服务节点列表;
SELECT * FROM pwds; 查看MySQL加密之后的密码;
SELECT VERSION; 查看当前Atlas版本。
以上为Atlas的设计,如果你想了解更多其他的内容,可以查看官网,地址为:
https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E6%9E%B6%E6%9E%84
六. MyBatis连接Atlas操作数据库
本操作和操作单点数据库一模一样,所以这里就不再演示了。
注意: 由于MySQL数据库版本较低,所以对应MySQL的驱动尽量做到兼容,建议也替换成5.x!
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14