企業級Mysql數據庫集羣--Mysql-Proxy

Mysql-Proxy

Mysql-Proxy是mysql官方提供的Mysql中間件服務,上游可接入若干個Mysql-client,後端可連接若干個Mysql-server

它使用Mysql協議,任何使用Mysql-client的上游無需修改任何代碼,即可遷移至Mysql-Proxy上

Mysql-Proxy可以分析與修改請求;攔截查詢和修改結果則需要通過編寫Lua腳本來完成

Mysql-Proxy允許用戶指定Lua腳本對請求進行攔截,對請求進行分析與修改,它還允許用戶指定Lua腳本對服務器的返回結果

進行修改,加入一些結果集或者去除一些結果集均可

特點

1、 sql攔截與修改

2、 性能分析與監控

3、讀寫分離

4、請求路由

操作流程

首先搭建基於 Gtid 的主從複製

server1(master)–rw

ip:172.25.30.1/24

yum install -y mysql-*.rpm

vim /etc/my.cnf

server_id=1

log-bin=mysql-bin

gtid_mode=ON

enforce_gtid_consistency=true

systemctl start mysqld

cd /var/lib/mysql

grep password /var/log/mysql.log

mysql -uroot -p

alter user root@localhost identified by 'Wps+123ld';

grant replication slave on *.* to repl@'172.25.30.%' identified by 'Wps+123ld';

show master status;

server2(slave)=r

ip:172.25.30.2/24

yum install -y mysql-*.rpm

vim /etc/my.cnf

server_id=2

gtid_mode=ON

enforce_gtid_consistency=true

systemctl start mysqld

cd /var/lib/mysql

grep password /var/log/mysql.log

mysql -uroot -p

alter user root@localhost identified by 'Wps+123ld';

change master to master_host='172.25.30.1',master_user='repl',master_password='Wps+123ld'',master_auto_position=1;

start slave;

show slave status\G;

Slave_IO_Running: Yes

IO線程已正常運行

Slave_SQL_Running: Yes

SQL線程已正常運行

show tables;

gtid_executed

是否添加

server3(proxy)–代理

ip:172.25.30.3/24

yum install -y mysql-*.rpm

tar xf mysql-proxy-*.tar.gz -C /usr/local

cd /usr/local

mv mysql-proxy-* mysql-proxy

cd mysql-proxy/bin

./mysql-proxy --help

./mysql-proxy --help-proxy

mkdir conf

cd conf

vim mysql-proxy.conf

1 [mysql-proxy]

2 proxy-address=0.0.0.0:3306

mysql-proxy運行的端口

3 proxy-read-only-backend-addresses=172.25.30.2:3306

slave節點:只讀

4 proxy-backend-addresses=172.25.30.1:3306

master節點:可讀可寫

5 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

lua腳本的路徑

6 pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid

進程pid的位置

7 log-file=/usr/local/mysql-proxy/log/mysql-proxy.log

日誌位置

8 plugins=proxy

9 log-level=debug

定義日誌級別

10 keepalive=true

mysql-proxy崩潰時嘗試重啓

11 daemon=true

打入後臺

find . -name *.lua

cd share/doc/mysql-proxy

pwd

/usr/local/mysql-proxy/share/doc/mysql-proxy

vim rw-splitting.lua

修改主機數量

40 min_idle_connections = 1,

最小連接數

41 max_idle_connections = 2,

最大連接數

cd /usr/local/mysql-proxy/

mkdir log

建立目錄,存放進程pid和日誌

chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf

修改配置文件的權限

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

netstat -ntlp

3306 mysql-proxy

cd /usr/local/mysql-proxy/log

cat mysql-proxy.log

查看日誌

測試

server1

mysql -uroot -pWps+123ld

grant insert,update,select on *.* to leon@'%' identified by 'Wps+123ld';

flush privileges;

create database test;

use test;

create table usertb (
    -> username varchar(20) not null,
    -> password varchar(20) not null);

insert into usertb values ('user1','111');

select * from usertb;

server2

 select * from usertb;
 
數據同步

server3

yum install -y lsof

lsof -i 3306

真實主機1次
mysql -h 172.25.30.3 -uleon -pWps+123ld  
show databases;
server3
lsof -i 3306
listen server1


真實主機2次
mysql -h 172.25.30.3 -uleon -pWps+123ld  
show databases;
server3
lsof -i 3306
listen server1

真實主機3次
mysql -h 172.25.30.3 -uleon -pWps+123ld  
show databases;
server3
lsof -i 3306
listen server2

用戶數量很多的時候,數據庫的代理就會把後端的數據庫實現讀寫分離

server1是寫的數據庫

server2是讀的數據庫

server1和server2滿足gtid的異步複製的時候,真機往數據庫寫入的東西其實是寫入了server1,並沒有寫入server2,server2上面的數據是複製過去的

因此客戶在server1、server2上面都能查到剛剛寫進去的數據

當關閉server1和server2的異步複製的時候,真機往數據庫寫入數據的東西只寫進了server1,沒有寫進去server2,server2也沒有複製一份

因爲server1可以查看到,server2和用戶都查不到剛剛寫進去的數據,此時的客戶讀的是server2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章