ProxySQL 2.0 + MGR 8.0 讀寫分離實驗


來源:應IMG群友之約,匆忙寫成,安裝如有報錯寫在評論里,看見了我會解答的。

主要測試內容:
測試ProxySQL是否能自動識別MGR主從切換
測試ProxySQL對MGR讀寫分離

 

軟件版本:
操作系統:CentOS 7.6
數據庫:MySQL 8.0.19
中間件:ProxySQL 2.0.10
虛擬機:VM Workstation 15 Pro

IP地址分配:
ProxySQL 192.168.5.131
DB1 192.168.5.130:3306
DB2 192.168.5.130:3307
DB3 192.168.5.130:3308

關閉防火牆:
systemctl stop firewalld
systemctl disable firewalld.service

 

 

一、安裝MGR(過程省略了)

#不會安裝看我這篇文章:https://www.cnblogs.com/9527l/p/12435860.html
筆記本沒有那么多資源,在一台主機上安裝了3台MySQL以端口區分。

#啟動數據庫
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3306.cnf --user=mysql &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3307.cnf --user=mysql &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3308.cnf --user=mysql &

 

二、安裝ProxySQL
yum -y install proxysql-2.0.10-1-centos7.x86_64.rpm
service proxysql start

注:6032 是 ProxySQL 的管理端口號,6033 是對外服務的端口號。
/etc/init.d/proxysql #proxysql的啟動控制文件
/etc/proxysql.cnf #proxysql配置文件

#連接測試
mysql -uadmin -padmin -h127.0.0.1 -P6032

 

三、ProxySQL 監控 MGR配置

1、增加server

insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.5.130',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.5.130',3307);
insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.5.130',3308);

load mysql servers to runtime;
save mysql servers to disk;

 

2、添加user

#到192.168.5.130:3306 MySQL上增加

CREATE USER 'monitor'@'%' IDENTIFIED BY "monitor@1025";
CREATE USER 'proxysql'@'%' IDENTIFIED BY "proxysql@1025";

GRANT ALL PRIVILEGES ON *.* TO 'monitor'@'%' ;
GRANT ALL PRIVILEGES ON *.* TO 'proxysql'@'%' ;

 

#在Proxysql上設置監控賬號與程序賬號

set mysql-monitor_username='monitor';
set mysql-monitor_password='monitor@1025';

insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values('proxysql','proxysql@1025',1,10,1);

 

3、ProxySQL監控MGR視圖

#到192.168.5.130:3306 MySQL上增加

#注意哦,這是8.0的監控視圖和5.7不通用哦

USE sys;
 
DELIMITER $$
 
CREATE FUNCTION my_id() RETURNS TEXT(36) DETERMINISTIC NO SQL RETURN (SELECT @@global.server_uuid as my_id);$$
 
CREATE FUNCTION gr_member_in_primary_partition()
    RETURNS VARCHAR(3)
    DETERMINISTIC
    BEGIN
      RETURN (SELECT IF( MEMBER_STATE='ONLINE' AND ((SELECT COUNT(*) FROM
    performance_schema.replication_group_members WHERE MEMBER_STATE NOT IN ('ONLINE', 'RECOVERING')) >=
    ((SELECT COUNT(*) FROM performance_schema.replication_group_members)/2) = 0),
    'YES', 'NO' ) FROM performance_schema.replication_group_members JOIN
    performance_schema.replication_group_member_stats USING(member_id) where member_id=my_id());
END$$
 
CREATE VIEW gr_member_routing_candidate_status AS SELECT
sys.gr_member_in_primary_partition() as viable_candidate,
IF( (SELECT (SELECT GROUP_CONCAT(variable_value) FROM
performance_schema.global_variables WHERE variable_name IN ('read_only',
'super_read_only')) != 'OFF,OFF'), 'YES', 'NO') as read_only,
Count_Transactions_Remote_In_Applier_Queue as transactions_behind, Count_Transactions_in_queue as 'transactions_to_cert' 
from performance_schema.replication_group_member_stats where member_id=my_id();$$

 

4、設置讀寫組

主負責寫、從負責讀,當MGR主庫切換后,代理自動識別主從。
ProxySQL代理每一個后端MGR集群時,都必須為這個MGR定義寫組10、備寫組20、讀組30、離線組40,

 insert into mysql_group_replication_hostgroups (writer_hostgroup,backup_writer_hostgroup,reader_hostgroup, offline_hostgroup,active,max_writers,writer_is_also_reader,max_transactions_behind) values (10,20,30,40,1,1,0,100);

注意:max_transactions_behind 是設置延遲大小,可以給大點,建議自己去開個並行復制。

load mysql servers to runtime;
save mysql servers to disk;
load mysql users to runtime;
save mysql users to disk;
load mysql variables to runtime;
save mysql variables to disk;

5、測試ProxySQL是否能自動識別MGR主從切換

#原來主為3306,手動重啟MySQL 3306,后查看
select hostgroup_id, hostname, port,status from runtime_mysql_servers;

+--------------+---------------+------+--------+
| hostgroup_id | hostname | port | status |
+--------------+---------------+------+--------+
| 10 | 192.168.5.130 | 3307 | ONLINE |
| 30 | 192.168.5.130 | 3306 | ONLINE |
| 30 | 192.168.5.130 | 3308 | ONLINE |
+--------------+---------------+------+--------+

#查看ProxySQL對MGR監控狀態

mysql> select hostname,
-> port,
-> viable_candidate,
-> read_only,
-> transactions_behind,
-> error
-> from mysql_server_group_replication_log
-> order by time_start_us desc
-> limit 6;
+---------------+------+------------------+-----------+---------------------+-------+
| hostname | port | viable_candidate | read_only | transactions_behind | error |
+---------------+------+------------------+-----------+---------------------+-------+
| 192.168.5.130 | 3308 | YES | YES | 0 | NULL |
| 192.168.5.130 | 3307 | YES | NO | 0 | NULL |
| 192.168.5.130 | 3306 | YES | YES | 0 | NULL |
| 192.168.5.130 | 3308 | YES | YES | 0 | NULL |
| 192.168.5.130 | 3307 | YES | NO | 0 | NULL |
| 192.168.5.130 | 3306 | YES | YES | 0 | NULL |
+---------------+------+------------------+-----------+---------------------+-------+
6 rows in set (0.00 sec)

 

6、配置讀寫分離規則

insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)
VALUES (1,1,'^SELECT.*FOR UPDATE$',10,1),
(2,1,'^SELECT',30,1);

load mysql query rules to runtime;
save mysql query rules to disk;

load mysql servers to runtime;
save mysql servers to disk;
load mysql users to runtime;
save mysql users to disk;
load mysql variables to runtime;
save mysql variables to disk;

四、測試是否可以讀寫分離

#proxysql上執行

mysql -uproxysql -pproxysql@1025 -h127.0.0.1 -P6033

#下面測試sql是否會寫入走10組,讀取走30

mysql> create database test;

mysql>use test

mysql> create table t(id int primary key,name varchar(20,age int);

mysql> insert into t values(1,"hehe");

mysql> select * from t;

 

#查看路由規則

mysql -uadmin -padmin -h127.0.0.1 -P6032

mysql> select hostgroup,digest_text from stats_mysql_query_digest order by digest_text desc limit 5;
+-----------+----------------------------------+
| hostgroup | digest_text |
+-----------+----------------------------------+
| 10 | show databases |
| 30 | select host,user from mysql.user |
| 10 | select @@version_comment limit ? |
| 30 | select * from t |
| 10 | insert into t values(?,?) |
+-----------+----------------------------------+
5 rows in set (0.00 sec)



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM