准备:
onproxy 192.168.1.25
MySQL主 192.168.1.17
MySQL从 192.168.1.18
客户机 192.168.1.22
安装:
[root@localhost root]# tar -zxf oneproxy-rhel5-linux64-v6.0.0-ga.tar.gz -C /usr/local/
[root@localhost root]# cd /usr/local/oneproxy/
[root@localhost oneproxy]# vim demo.sh
export ONEPROXY_HOME=/usr/local/oneproxy
[root@localhost oneproxy]# chmod +x demo.sh
[root@localhost oneproxy]# ./demo.sh
[root@localhost oneproxy]# vim oneproxy.service
ONEPROXY_HOME修改为
ONEPROXY_HOME=/usr/local/oneproxy
[root@localhost oneproxy]# cp oneproxy.service /etc/init.d/oneproxy
[root@localhost oneproxy]# chmod +x /etc/init.d/oneproxy
[root@localhost oneproxy]# /etc/init.d/oneproxy start
Starting OneProxy ... [确定]
[root@localhost oneproxy]# netstat -anpt | grep oneproxy
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 3137/oneproxy
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 3137/oneproxy
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 3137/oneproxy
tcp 0 0 127.0.0.1:3307 127.0.0.1:54567 ESTABLISHED 3137/oneproxy
tcp 0 0 127.0.0.1:54567 127.0.0.1:3307 ESTABLISHED 3137/oneproxy
切库、切表实验
(1)修改proxy.conf文件
[root@localhost oneproxy]# cd conf/
[root@localhost conf]# vim proxy.conf
8 proxy-address = 192.168.1.25:3307
9 admin-address = 192.168.1.25:4041
10 mysql-version = 5.5.22 #上述几个mysql的版本尽量保持一致
11 proxy-master-addresses.1 = 192.168.1.17:3306@server1
12 proxy-slave-addresses.1 = 192.168.1.18:3306@server1 #表示第一个server group
14 proxy-group-policy = server1:0
15 proxy-group-security = server1:0
安装MySQL,然后登陆,设置密码
service mysqld start
mysqladmin -uroot password 123456
/etc/init.d/oneproxy start
mysql -uadmin -pOneProxy -h 192.168.1.25 -P4041
mysql> passwd '123456';
+--------+------------------------------------------+
| TEXT | PASSWORD |
+--------+------------------------------------------+
| 123456 | 9D7E55EAF8912CCBF32069443FAC452794F8941B |
+--------+------------------------------------------+
1 row in set (0.03 sec)
把加密密码粘贴到conf文件里,再修改一下字符集
17 proxy-user-list = test/9D7E55EAF8912CCBF32069443FAC452794F8941B@kgcdb //主从复制的库
24 proxy-charset = utf8_chinese_ci
(2)授权test用户
所有MySQL授权test用户,密码123456,
onproxy主机要一般登录,然后授权,mysql -uroot -p
grant all on *.* to 'test'@'192.168.1.25' identified by '123456';
关于part.txt文件
cd /usr/local/oneproxy/conf/
vim part.txt
删除所有内容,把下边的内容粘贴进去
[
{
"table" :"test",
"pkey" :"id",
"type" :"int",
"method" :"hash",
"partitions":
[
{"suffix":"_0","group":"server1"},
{"suffix":"_1","group":"server1"},
{"suffix":"_2","group":"server2"},
{"suffix":"_3","group":"server2"},
{"suffix":"_4","group":"server3"},
{"suffix":"_5","group":"server3"},
{"suffix":"_6","group":"server4"},
{"suffix":"_7","group":"server4"}
]
},
{
"table" :"benet",
"pkey" :"id",
"type" :"int",
"method" :"hash",
"partitions":
[
{"suffix":"_0","group":"server1"},
{"suffix":"_1","group":"server1"},
{"suffix":"_2","group":"server2"},
{"suffix":"_3","group":"server2"},
{"suffix":"_4","group":"server3"},
{"suffix":"_5","group":"server3"},
{"suffix":"_6","group":"server4"},
{"suffix":"_7","group":"server4"}
]
}
]
配置完proxy.conf和part.txt之后,启动oneproxy
/etc/init.d/oneproxy stop
/etc/init.d/oneproxy start
如果启动不成功 oneproxy不能登录
在oneproxy主机上,登录test用户
mysql -utest -p123456 -h 192.168.1.25 -P 3307
use kgcdb
create table benet ( id int not null, name varchar(30) );
这里会卡着不动,过一会按三次ctrl+c可以退出,然后再进来
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| benet_0 |
| benet_1 |
+------------------+
2 rows in set (0.01 sec)
看到两个benet表,表明切表成功,然后插值验证
insert into benet_0 values(1,'make');
insert into benet_1 values(2,'makes');
在主或者从上都可以看到
关于proxy-group-policy与proxy-group-security
--proxy-group-policy=<servergroup>:<policy_value>
对于复杂的分库分表,则还需要编写Lua脚本来实现,在“lua”子目录下有一个示例脚本“oneproxy.lua”就是用来做分库分表的。其中“servergroup”表示针对哪个“Server Group”进行设置。?
此选项可以设置的“policy_value”值有:
0
默认值,什么也不做,依赖于Lua脚本来实现。
1
Read Failover功能,对于读操作,首先从Master读取,如果Master不可用,则从Slave端读取。
2
Read/Write Split功能,对于读操作,首先从Slave读取,如果Slave端不可用,则从Master端读取。除非所有的Slave都不可用,否则Master不参与读操作。
3
针对XtraDB Cluster群集环境的Read/Write Split功能,从集群中固定地选择一台作为写入节点,其他的节点作为读节点;如果选中的写入节点不可用,则重新选一台作为写入节点,其他可用的节点继续提供读,这个策略提供了写入节点的自动漂移,在双Master节点上也可以设置成这种策略。
4
Read/Write Split功能,对于读操作,从Master和Slave中随机选一台进行查询操作,写入操作则从在Master上进行。
5
随机读写功能,对于读操作,从Master和Slave中随机选一台进行查询操作,写入操作则是随机选一台Master进行操作。?
后续会继续内置更多的策略进去,以及不断优化已有的策略,为大家透明地做MySQL架构改造而努力。
proxy-group-security=server1:0
--proxy-group-security=<servergroup>:<policy_value>
安全级别,提升安全性,默认值为0,即没有任何设置。设成1禁止通过OneProxy来做DDL操作;设置为2则必须要有Where条件;设置为3只允许只读的操作。