命令记不住

登陆

读写分离 Atlas 部署

读写分离Atlas部署

1.读写分离产品介绍

  • altas
  • mycat
  • DBLE
  • DRDS
  • mysql router
  • proxySQL(perconna)

源码 Github: https://github.com/Qihoo360/Atlas

2.Atlas软件介绍

  • 读写分离
  • 从库负载均衡
  • 自动分表
  • IP过滤
  • SQL语句黑白名单
  • DBA可平滑上下线DB
  • 自动摘除宕机的DB

3.Atlas环境部署

下载地址:https://github.com/Qihoo360/Atlas/releases

1.注意:

  • 1、Atlas只能安装运行在64位的系统上
  • 2、Centos 5.X安装 Atlas-XX.el5.x86_64.rpm,Centos 6.X安装Atlas-XX.el6.x86_64.rpm。
  • 3、后端mysql版本应大于5.1,建议使用Mysql 5.6以上

2..安装

rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
yum localinstall Atlas-2.2.1.el6.x86_64.rpm
yum install -y Atlas*

3..配置文件使用

cd /usr/local/mysql-proxy/conf/
mv test.cnf test.cnf.bak
 vi test.cnf
[mysql-proxy]
admin-username = user
admin-password = pwd
proxy-backend-addresses = 10.0.0.55:3306
proxy-read-only-backend-addresses = 10.0.0.51:3306,10.0.0.53:3306
pwds = repl:3yb5jEku5h4=,mha:O2jBXONX098=
daemon = true
keepalive = true
event-threads = 8
log-level = message
log-path = /usr/local/mysql-proxy/log
sql-log=ON
proxy-address = 0.0.0.0:33060
admin-address = 0.0.0.0:2345
charset=utf8

4.启动atlas
启动:

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

ps -ef |grep proxy

5.Atlas功能测试

测试读操作:

mysql -umha -pmha  -h 10.0.0.53 -P 33060 
show variables  like 'server_id'

测试写操作:

mysql> begin;show variables like 'server_id';commit;

制作加密密码

/usr/local/mysql-proxy/bin/encrypt  123    

4. Atlas基本管理

连接管理接口:

mysql -uuser -ppwd -h127.0.0.1 -P2345

打印帮助:

mysql> select * from help;

查询后端所有节点信息:

mysql>  SELECT * FROM backends    ;
+-------------+----------------+-------+------+
| backend_ndx | address        | state | type |
+-------------+----------------+-------+------+
|           1 | 10.0.0.55:3306 | up    | rw   |
|           2 | 10.0.0.51:3306 | up    | ro   |
|           3 | 10.0.0.53:3306 | up    | ro   |
+-------------+----------------+-------+------+
3 rows in set (0.00 sec)

动态添加删除节点:

REMOVE BACKEND 3;

动态添加节点:

ADD SLAVE 10.0.0.53:3306;

保存配置到配置文件

SAVE CONFIG;

5.自动分表

使用Atlas的分表功能时,首先需要在配置文件test.cnf设置tables参数。
tables参数设置格式:数据库名.表名.分表字段.子表数量,
比如:
你的数据库名叫school,表名叫stu,分表字段叫id,总共分为2张表,
那么就写为school.stu.id.2,如果还有其他的分表,以逗号分隔即可。
用户需要手动建立2张子表(stu_0,stu_1,注意子表序号是从0开始的)。
所有的子表必须在DB的同一个database里。
当通过Atlas执行(SELECT、DELETE、UPDATE、INSERT、REPLACE)操作时,Atlas会根据分表结果(id%2=k),定位到相应的子表(stu_k)。例如,执行select * from stu where id=3;,Atlas会自动从stu_1这张子表返回查询结果。但如果执行SQL语句(select * from stu;)时不带上id,则会提示执行stu 表不存在。
Atlas暂不支持自动建表和跨库分表的功能。
Atlas目前支持分表的语句有SELECT、DELETE、UPDATE、INSERT、REPLACE

5.4什么是分表?
表达到800w行我们考虑采用分表的策略

5.2基本分表策略

  • 1、分区(partition)
  • 2、atlas 自动分表

tables参数设置格式:数据库名.表名.分表字段.子表数量,

5.3分表的思路:
1.预估分表的个数,例如3个(school库下的stu表)
2.准备分表,创建3个分表,并且和原表结构,命名规范是stu_0,_1,_2

 create table stu_0 like stu;
 create table stu_1 like stu;
 create table stu_2 like stu;

3.配置文件中开启分表规则

tables = school.stu.id.3

6.测试分表的功能

1.准备分表:

mysql -umha -pmha  -h 10.0.0.53 -P 33060  

原始结构:

create database school;
use school;
create table stu (id int ,name varchar(20));

创建分表

create table stu_0 like stu;
create table stu_1 like stu;
create table stu_2 like stu;

2.开启分表规则:

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

添加以下配置:

tables = school.stu.id.3

重启atlas:

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

测试分表功能:

mysql -uapp -p123 -h 10.0.0.53 -P 33060
use school 
insert into stu values(1,'zhang3');
insert into stu(id,name) values(11,'zhang3');
insert into stu(id,name) values(12,'zhang3');
insert into stu(id,name) values(13,'zhang3');

7.ip过滤(白名单)

client-ips=192.168.1.2, 192.168.2

7.1SQL黑名单
Atlas会屏蔽不带where条件的delete和update操作,以及sleep函数。

7.2atlas-sharding
(1)不能跨分片访问数据
(2)不能跨分片join
(3)在添加新分片时,只能实在range分片的方式下才能添加节点。