Mysql代理中间件 Atlas 安装和配置

2024-04-23 04:38

本文主要是介绍Mysql代理中间件 Atlas 安装和配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



标签:atlas 代理 mysql mysql_proxy


这两天在学习mysql的读写分离和负载均衡,尝试了主从模式和mysql cluter,最后还是选择了一主多从,然后读写分离,这比较适合读量大的网站。然后对于mysql的负载均衡器,起先尝试了一下SQL请求路由器 Amoeba,读写分离不错,但是不支持事务,因为我测试的网站是采取spring mvc+hibernate的。然后看到了360公司的MySQL中间层 Atlas,这是支持事务的,把自己的安装和配置记录一下。

首先,先去下载Altas的rpm包,下载地址:https://github.com/Qihoo360/Atlas/releases

要看清楚版本,centos 5.x:Atlas-1.0.3.el5.x86_64.rpm    centos 6.x:

我的系统是centos 6.4 ,所以下载Atlas-1.0.3.el6.x86_64.rpm

千万别搞错了,否则最后启动会出错。大家也可以采取源码编译安装,不过rpm安装比较省时省力,而且简单。

下载rpm 

?
1
wget https: //github .com /Qihoo360/Atlas/releases/download/1 .0.3 /Atlas-1 .0.3.el6.x86_64.rpm

安装 

?
1
rpm -i Atlas-1.0.3.el6.x86_64.rpm

安装的目录是/usr/local/mysql-proxy

conf文件夹下有一个自带的配置文件test.cnf,我们可以直接修改,下面是我修改的

主数据库服务器:192.168.83.11

从数据库服务器:192.168.83.12

proxy服务器:192.168.83.13

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[mysql-proxy]
#Atlas加载的模块名称,不需要改
plugins = admin, proxy
#管理接口的用户名
admin-username = root
#管理接口的密码
admin-password = 123456
#实现管理接口的Lua脚本所在路径
admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin .lua
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 192.168.83.11:3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy- read -only-backend-addresses = 192.168.83.12:3306@1
#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true
daemon = false
#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true
keepalive = false
#工作线程数,推荐设置与系统的CPU核数相等
event-threads = 4
#日志级别,分为message、warning、critical、error、debug五个级别
log-level = message
#日志存放的路径
log-path = /usr/local/mysql-proxy/log
#实例名称,用于同一台机器上多个Atlas实例间的区分
instance = test
#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:1234
#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345
#连接池的最小空闲连接数,应设为event-threads的整数倍,可根据业务请求量大小适当调大或调小
min-idle-connections = 8
#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,此设置项用于多个用户名同时访问同一个Atlas实例的情况,若只有一个用户名>则不需要设置该项
#pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc=
#默认字符集,若不设置该项,则默认字符集为latin1
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

最后,进入到bin文件夹下,启动Altas

?
1
. /mysql-proxy --defaults- file =.. /conf/test .cnf

最好配置文件中的 daemon设置为true,为后台守护运行。

原先我使用官网的

?
1
. /mysql-proxyd test start

但是一直提示我启动失败,后来咨询了作者教我使用上面的那个带配置文件的启动,成功了。

查看Altas运行情况

?
1
. /mysql-proxyd instance status

 应该有两个进程的。

我后来使用NaviCat连接工作端口,用户名和密码就是上面配置文件的管理用户和密码,成功了。

经过测试,Altas的读写分离和事务支持很好,明天发布2.0版本,增加对JDBC的支持。



详细配置:


   Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平 台,每天承载的读写请求数达几十亿条。

主要功能:
* 读写分离
* 从库负载均衡
* IP过滤
* SQL语句黑白名单
* 自动分表


一、环境
OS CentOS-6.4 x86_64
Atlas IP : 192.168.4.215
MySQL Master IP : 192.168.4.213

MySQL Slave IP : 192.168.4.214


二、MySQL授权
MySQL主从已经配置好之后,主从对Atlas进行授权
mysql> grant all on *.* to atlas@‘192.168.4.215‘ identified by ‘123456‘;


三、Atlas安装
Atlas官方文档:
https://github.com/Qihoo360/Atlas/wiki
CentOS-5.x下载地址
# wget https://github.com/Qihoo360/Atlas/releases/download/2.0.2/Atlas-2.0.2.el5.x86_64.rpm
# rpm -ivh Atlas-2.0.2.el5.x86_64.rpm
CentOS-6.x下载地址
# wget https://github.com/Qihoo360/Atlas/releases/download/2.0.2/Atlas-2.0.2.el6.x86_64.rpm
# rpm -ivh Atlas-2.0.2.el6.x86_64.rpm
Atlas安装后的文件路径
/usr/local/mysql-proxy/

四、Atlas配置

加密MySQL用户密码,获取的加密串填写到配置文件的pwds参数中。
# /usr/local/mysql-proxy/bin/encrypt 123456

/iZxz+0GRoA=


vim /usr/local/mysql_proxy/conf/test.conf

[mysql-proxy]

#带#号的为非必需的配置项目

#管理接口的用户名
admin-username = user

#管理接口的密码
admin-password = pwd

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 192.168.4.213:3306

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 192.168.4.214:3306@1

#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = atlas:/iZxz+0GRoA=

#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
daemon = true

#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有mo
nitor,一般开发调试时设为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



启动

/usr/local/mysql-proxy/bin/mysql-proxyd test start

关闭

/usr/local/mysql-proxy/bin/mysql-proxyd test stop

五、Atlas参数备注
instance参数
同一台机器上的多个Atlas实例,使用不同的端口,对应不同数据库,使用各自的配置文件
默认的黑白名单
不带where的delete会屏蔽,"sleep"会屏蔽
备注:
1.03版本已经支持set
autocommit语句,另外对于python来说需要在连接上后执行一句conn.autocommit(True)
pwds参数
配置MySQL用户名和对应的加密过的MySQL密码,密码使用/usr/local/mysql-proxy/bin/encrypt程序进行加
密,用户名和密码用冒号分开,可以使用多个用户,用逗号空格分隔。
client-ips参数
在引入中间层后,因为连接DB的是Atlas,所以DB改为对部署Atlas的机器的IP作访问授权,而client-ips参
数用来控制连接Atlas的客户端的IP
lvs-ips参数
比如LVS后面挂接两台Atlas,分别叫A和B,LVS去循环检测A和B的存活,当Atlas检测到是LVS的IP来请求时
,根据在线或不在线状态,向LVS的检测脚本返回不同的值,这里是设置Atlas前面的LVS的物理网卡的IP。
六、Atlas管理接口使用

# mysql -u管理用户 -p管理密码 -h127.0.0.1 -P管理端口
# mysql -uuser -ppwd -h127.0.0.1 -P2345
查看管理语句参数:
mysql> select * from help;
查看DB状态:
mysql> select * from backends;
+-------------+-------------------+-------+------+------+-------------------+
| backend_ndx | address | state | type | uuid | connected_clients |
+-------------+-------------------+-------+------+------+-------------------+
| 1 | 172.16.1.20:3306 | up | rw | NULL | 0 |
| 2 | 172.16.1.30:3306 | up | ro | NULL | 0 |
+-------------+-------------------+-------+------+------+-------------------+
备注:
connected_clients这个参数有bug,不能正常显示。

七、Atlas常见问题

1Atlas多实例启动问题:
如果配置文件中instance = instance,启动参数如下:
/usr/local/mysql-proxy/bin/mysql-proxyd instance start
如果配置文件中instance = test,启动参数如下:
/usr/local/mysql-proxy/bin/mysql-proxyd test start
可以使用mysql-proxy命令启动,
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf

备注:
使用脚本启动时,注意区分bin目录下面的mysql-proxy 和 mysql-proxyd 

2、使用Atlas时出现"too many connections"
原因是DBmax_connections设置过小
3、在管理接口发现后端DB的状态为down
a、后端DB是否已对Atlas所在机器的IP授权
b、推荐DBmy.cnf里的max_connect_errors设置为100000,默认值是10,值太小会影响AtlasDB的存活检
测,可以修改my.cnf文件的max_connect_errors参数,或者用下面指令直接修改;
mysql> set global max_connect_errors=100000;
4、主从同步延迟,不能马上读数据
可以在SQL语句前增加 /*master*/ ,就可以将读请求强制发往主库。






这篇关于Mysql代理中间件 Atlas 安装和配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927804

相关文章

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则