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

相关文章

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

sqlserver、mysql、oracle、pgsql、sqlite五大关系数据库的对象名称和转义字符

《sqlserver、mysql、oracle、pgsql、sqlite五大关系数据库的对象名称和转义字符》:本文主要介绍sqlserver、mysql、oracle、pgsql、sqlite五大... 目录一、转义符1.1 oracle1.2 sqlserver1.3 PostgreSQL1.4 SQLi

win10安装及配置Gradle全过程

《win10安装及配置Gradle全过程》本文详细介绍了Gradle的下载、安装、环境变量配置以及如何修改本地仓库位置,通过这些步骤,用户可以成功安装并配置Gradle,以便进行项目构建... 目录一、Gradle下载1.1、Gradle下载地址1.2、Gradle下载步骤二、Gradle安装步骤2.1、安

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/