1. 程式人生 > >ProxySQL(讀寫分離)部署

ProxySQL(讀寫分離)部署

保護 info 環境 故障切換 mysql主從 start 生效 with 文件的

proxySQL是MySQL的中間件產品,是靈活強大的代理層,實現讀寫分離,支持Query路由功能,支持動態指定某個SQL進行緩存,支持動態加載配置,故障切換和一些SQL

過濾功能

環境:

192.168.139.152 proxy SQL中間件 server-id=1

192.168.139.153 master mysql server-id=2

192.168.139.154 slave mysql server-id=3

proxy SQL更多信息可以訪問 https://github.com/sysown/proxysql/wiki

MYSQL安裝(all node)

要點:所有節點都安裝MySQL並修改/etc/my.cnf 中的server-id

更新root密碼123qweASD!

修改配置文件/etc/my.cnf

[mysqld]

server-id=1

mysql主從部署(master-slave)

從節點read_only=on

PROXYSQL安裝(proxysql node)

安裝依賴包:

yum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes perl-IO-Socket-SSL

創建repo文件

cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL YUM repository
baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
gpgcheck=1
gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
EOF


安裝proxy SQL
yum install -y proxysql

proxysql配置文件的路徑為 /etc/proxysql.cnf

啟動proxy SQL
service proxysql start

查看proxysql版本:
proxy SQL--version

proxy SQL 默認用戶名/密碼 admin/admin

proxysql 管理端口6032 對外服務端口6033
登陸proxysql :
mysql -u admin -padmin -h 127.0.0.1 -P 6032
MySQL>show databases; 顯示5個數據庫 main disk stats monitor stats_history
main 內存配置數據庫,即MEMORY ,表裏存放後端db實例,用戶驗證,路由規則等信息
  主要表:mysql_servers 後端可以連接MySQL服務器的列表
      mysql_users 配置後端數據庫的賬戶和監控賬戶
     mysql_query_rules 指定Query路由到後端不同服務器的規則列表
註:runtime 開頭的表,表示當前運行的配置,不可修改;其余表修改後,LOAD使其生效,SAVE使其存到硬盤以供下次重啟加載


master 節點創建proxy SQL監控賬戶:
create user ‘monitor‘@‘192.168.139.%‘ identified by ‘123qweASD!‘;
grant all privileges on *.* to ‘monitor‘@‘192.168.139.%‘ with grant option;

master節點創建對外訪問賬戶:
mysql> create user ‘zs‘@‘192.168.139.%‘ identified by ‘123qweASD!‘;
mysql> grant all privileges on *.* to ‘zs‘@‘192.168.139.%‘ with grant option;

proxy SQL節點:添加主服務器列表 將主從MySQL加進去,自己不加
mysql -uadmin -padmin -h 127.0.0.1 -P 6032
mysql>insert into mysql_servers(hostgroup_id,hostname,port) values(10,‘192.168.139.153‘,3306);
mysql>insert into mysql_servers(hostgroup_id,hostname,port) values(10,‘192.168.139.154‘,3306);
mysql>load mysql servers to runtime;
mysql>save mysql servers to disk;
技術分享圖片

機器的狀態都是online狀態

proxysql配置監控賬號
mysql> set mysql-monitor_username=‘monitor‘;
mysql> set mysql-monitor_password=‘123qweASD!‘; ===》 /etc/proxysql.cnf 中的monitor_password也要修改

配置proxy SQL主從分組
mysql> insert into mysql_replication_hostgroups values(10,20,‘proxy‘);
mysql> load mysql servers to runtime;
mysql> save mysql servers to disk;
技術分享圖片

配置對外訪問賬號,默認指定庫,並對該用戶開啟事務持久化保護

mysql> insert into mysql_users(username,password,default_hostgroup) values(‘zs‘,‘123qweASD!‘,10);
mysql> update mysql_users set transaction_persistent=1 where username=‘zs‘;
mysql> load mysql users to runtime;
mysql> save mysql users to disk;

驗證登陸服務器就:
是主庫
技術分享圖片

讀寫分離策略配置

mysql> insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,‘^SELECT.*FOR UPDATE$‘,10,1); ===》寫
mysql> insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,‘^SELECT‘,20,1); ===》讀
mysql> load mysql query rules to runtime;
mysql> save mysql query rules to disk;

讀寫分離測試:

mysql -u zs -p123qweASD! -h 192.168.139.152 -P 6033 登陸proxysql所在機器登陸數據庫
mysql> select * from mysql.user; 讀操作
mysql> create database zhangyu ; 寫操作

登陸proxysql管理賬戶
技術分享圖片

10 是寫庫組 20是讀庫組

調整權重,讓某個機器承受更多讀操作

mysql> update mysql_servers set weight=10 where hostname=‘192.168.139.154‘;

mysql> load mysql servers to runtime;

mysql> save mysql servers to disk;

技術分享圖片



ProxySQL(讀寫分離)部署