博學谷 - mysql資料庫效能優化筆記05 - 讀寫分離中介軟體MaxScale

hecr_mingong發表於2020-09-28

1.maxscale下載地址
https://downloads.mariadb.com/files/MaxScale

2.安裝maxscale命令

yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y
wget https://downloads.mariadb.com/MaxScale/1.4.5/centos/7/x86_64/maxscale-1.4.5-1.centos.7.x86_64.rpm
rpm -ivh maxscale-1.4.5-1.centos.7.x86_64.rpm

2.配置maxscale
建立監控使用者:

create user 'maxmon'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'maxmon'@'%';

建立路由使用者:

create user 'maxrou'@'%' identified by '123456';
grant select on mysql.* to 'maxrou'@'%';
flush privileges;

配置maxscale.cnf檔案:

vi /etc/maxscale.cnf

配置server:

[server1]
type=server
#自己的伺服器地址
address=111.111.235.111
#自己的伺服器埠
port=3306
protocol=MySQLBackend

[server2]
type=server
#自己的伺服器地址
address=111.111.187.111
#自己的伺服器埠
port=3306
protocol=MySQLBackend
[MySQL Monitor]
type=monitor
module=mysqlmon
#改成上述配置的伺服器
servers=server1,server2
#主資料庫的監聽使用者的賬號
user=maxmon
#主資料庫監聽使用者的密碼
passwd=123456
monitor_interval=10000
#因為配置了Read-Write Service模組,所以該模組的servers、user、passwd清空
#因為假如去掉該段程式碼的話,會導致啟動maxscale失敗
[Read-Only Service]
type=service
router=readconnroute
servers=
user=
passwd=
router_options=slave

# ReadWriteSplit documentation:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadWriteSplit.md

[Read-Write Service]
type=service
router=readwritesplit
#伺服器的名稱
servers=server1,server2
#主資料庫路由使用者的賬號
user=maxrou
#主資料庫路由使用者的密碼
passwd=123456
max_slave_connections=100%

3.啟動 maxscale
執行命令:

maxscale --config=/etc/maxscale.cnf

檢視maxscale啟動狀態:
命令:

netstat -ntelp

結果:

[root@iZbp1e9mxelwe7pwimpw8sZ ~]# netstat -ntelp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
tcp        0      0 0.0.0.0:4006            0.0.0.0:*               LISTEN      0          504699     21342/maxscale      
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      997        22771      1153/mysqld         
tcp        0      0 0.0.0.0:6603            0.0.0.0:*               LISTEN      0          504700     21342/maxscale      
tcp        0      0 0.0.0.0:22222           0.0.0.0:*               LISTEN      0          26262      1573/sshd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          26264      1573/sshd           
tcp6       0      0 :::80                   :::*                    LISTEN      0          24734      1483/docker-proxy   

4006 是 Read-Write Listener 使用的埠,用於連線 MaxScale
6603 是 MaxAdmin Listener 使用的埠,用於 MaxScale 管理器
登 錄 MaxScale 管 理 器 , 查 看 一 下 數 據 庫 連 接 狀 態 , 默 認 的 用 戶 名 和 密 碼 是
admin/mariadb

登入maxscale檢視狀態:

 maxadmin --user=admin --password=mariadb
 list servers
[root@iZbp1e9mxelwe7pwimpw8sZ ~]# maxadmin --user=admin --password=mariadb
MaxScale>  list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 111.111.235.111  |  3306 |           1 | Master, Running
server2            | 111.111.187.111  |  3306 |           1 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale> 

4.測試maxscale
在主資料庫master建立測試使用者:

create user 'rtest'@'%' identified by '111111';
grant ALL PRIVILEGES on *.* to 'rtest'@'%';

使用mysql客戶端到連線maxscale:

mysql -urtest -p'111111' -h'192.168.33.11' -P4006

測試命令:

select @@hostname;
start transaction;
select @@hostname;
rollback;
select @@hostname;
mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| ljy        |
+------------+
1 row in set (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@hostname;
+-------------------------+
| @@hostname              |
+-------------------------+
| iZbp1e9mxelwe7pwimpw8sZ |
+-------------------------+
1 row in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| ljy        |
+------------+
1 row in set (0.00 sec)

mysql> 

測試步驟及結果解釋:
第一次select @@hostname;使用的是salve進行讀操作,開啟事務後start transaction;使用的是master進行寫操作,事務回滾後rollback;使用的是salve進行讀操作.

5.文章參考連結
a. https://www.boxuegu.com
b. https://downloads.mariadb.com/files/MaxScale

相關文章