Atlas

linux

17-1-23 17:01:41

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

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


简单的环境搭建



WEB服务         192.168.10.165

Atlas代理服务   192.168.10.158

主MySQL数据库   192.168.10.167

从MySQL数据库   192.168.10.189

从MySQL数据库   192.168.10.190


安装说明
https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E5%AE%89%E8%A3%85

下载地址
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

wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm


158安装
rpm -ivh  Atlas-2.2.1.el6.x86_64.rpm


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

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

1. “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到
2. “mysql-proxy”是MySQL自己的读写分离代理
3. “mysql-proxyd”是360弄出来的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的

conf目录下放的是配置文件

“test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑

lib目录下放的是一些包,以及Atlas的依赖
log目录下放的是日志,如报错等错误信息的记录


配置参数

获得加密的密码 
进入bin 目录  ./encrypt 111111  获得密码

vi /usr/local/mysql-proxy/conf/test.cnf 

[mysql-proxy]

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

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

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

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

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

proxy-read-only-backend-addresses =192.168.10.190:3306,192.168.10.189:3306
#192.168.10.190:3306@1

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

#设置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 = 6

#日志级别,分为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 = ON

#慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过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






先看本机是否启动 mysql  
/etc/init.d/mysqld status
执行 mysql 
提示 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)



启动
./mysql-proxyd test start
OK: MySQL-Proxy of test is started

mysql -h127.0.0.1 -P2345 -uuser -ppwd
进入数据库


WEB服务器使用 192.168.10.158:1234 端口链接数据库







web服务器是ecshop 新建文件  测试读写分离


<?

define('IN_ECS', true);

require(dirname(__FILE__) . '/includes/init.php');

/* 载入语言文件 */
require_once(ROOT_PATH . 'languages/' .$_CFG['lang']. '/user.php');

$sql = "update  ecs_goods set  click_count= click_count+1 where goods_id=1 ";
$db->query($sql);


$ls = $db -> getAll("SELECT goods_id,goods_name,shop_price,goods_brief,goods_weight,goods_thumb FROM  ".$ecs->table('goods')." WHERE  1   order by  sort_order asc  LIMIT 0 , 40");


foreach($ls as $v ){
echo  $v['goods_name']."<br>";

}

$sql = "insert into ecs_goods (goods_name) values ('123三三四') ";
$res = $db->query($sql);



?>