
读写分离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.bakvi 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=utf84.启动atlas
启动:/usr/local/mysql-proxy/bin/mysql-proxyd test start ps -ef |grep proxy5.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、REPLACE5.4什么是分表?
表达到800w行我们考虑采用分表的策略5.2基本分表策略
- 1、分区(partition)
- 2、atlas 自动分表
tables参数设置格式:数据库名.表名.分表字段.子表数量,
5.3分表的思路:
1.预估分表的个数,例如3个(school库下的stu表)
2.准备分表,创建3个分表,并且和原表结构,命名规范是stu_0,_1,_2create 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分片的方式下才能添加节点。