MariaDB Proxy读写分离的实现

MySQL Master

在MySQL Master端(172.16.251.69)授权

#mysql

mysql> GRANT ALL ON*.* TO 'admin'@'172.16.%.%' IDENTIFIED BY 'admin';

mysql> FLUSHPRIVILEGES;

 

 

MySQL Slave

在MySQL Slave端的数据库上查看是否有授权的用户

wKioL1NPv0_RieKAAAC4_8VeZUU093.jpg

 

测试

下面的操作均在Maridb Proxy(172.16.251.70)上执行

管理功能测试

此时,若我们还试图以传统的方式连接Mysql的话,很显然是会失败的,如下:

# mysql

ERROR 2002(HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'(2 "No such file or directory")

 

正确的方式:

[root@station150 ~]#mysql-uadmin -padmin -h172.16.251.70 --port=4041

Welcome to theMariaDB monitor.Commands end with ; or\g.

Your MySQLconnection id is 1

Server version:5.0.99-agent-admin

MySQL [(none)]> SELECT* FROM HELP;

MySQL [(none)]>SELECT * FROM backends;

+-------------+--------------------+---------+------+------+-------------------+

| backend_ndx |address| state| type | uuid | connected_clients |

+-------------+--------------------+---------+------+------+-------------------+

|1 | 172.16.251.69:3306 | unknown |rw| NULL |0 |

|2 | 172.16.251.68:3306 | unknown |ro| NULL |0 |

+-------------+--------------------+---------+------+------+-------------------+

2 rows in set (0.01sec)

 

读写分离测试

通过MariadbProxy(172.16.251.70)访问Master MySQL(172.16.251.69)的数据库

# mysql -uadmin-padmin -h172.16.251.70 [--port=3306]

(1)测试写操作

mysql -uadmin -padmin-h172.16.251.70

wKioL1NPwmmQ6QrEAABdluqfs4c525.jpg

 

然后分别去Master端和Slave端,验证是否能看通过Mariadb Proxy新建的mydb1数据库

wKioL1NPwAGy6L8yAACbnmZBxSk360.jpg

 

通过Mariadb Proxy删除hellodb数据库及其中的数据,并验证

wKioL1NPwCjhESxQAACiWpIENuE455.jpg

 

MariaDB Proxy 70
执行批量导入数据的操作:

wKiom1NPwQuSwkZ7AACZonHQ0p4647.jpg

wKioL1NPwOjwhuj4AABT8JbyetY536.jpg

验证读写分离的最好办法是:分别在Master(可读写),Slave(只读)上使用tcpdump抓包工具,看可以捕捉到哪种操作的数据报文

 

测试读操作

在Master上捕获到的和读写操作相关的报文

wKioL1NPwWfCeoVMAAFAbE4cHcc236.jpg

由于在Master上可以进行读写操作,所以当读(查询)操作较少的时候,基本上Master自身就处理了,

所以想要验证效果就必须批量导入数据或执行查询操作。

 

在MariadbProxy(70)执行批量读操作

for i in `seq10`;do mysql -uadmin -padmin -h172.16.251.70 -e "select * fromhellodb.classes where ClassID=$i";done

下面是批量执行读操作时,在Slave上捕获到的和读写操作相关的报文

 

wKiom1NPwgLAfVfSAAFDtHfbXyQ495.jpg

wKioL1NPwdyRvtfLAAC0sVSdEHw398.jpg

 

朋友,还记得之前在MariaDBProxy上执行SELECT * FROM backends;时state栏的状态信息吗?

刚开执行读写操作的时候,只有Master(172.16.251.69)的state是up状态,而在我批量执行读操作之后,

现在Slave(172.16.251.68)的state也变成了up状态,表示Slave端已接受到了读请求

wKiom1NPwjLT2Cc6AAK7T16qsKw707.jpg

posted @ 2017-07-01 10:16  Hanson666  阅读(613)  评论(0编辑  收藏  举报