1. 程式人生 > >MHA +maxscale 實現讀寫分離高可用架構實戰

MHA +maxscale 實現讀寫分離高可用架構實戰

MHA 相關原理 http://mp.blog.csdn.net/postedit/79183726

 MHA  http://mp.blog.csdn.net/postedit/79183743 最佳實戰

MySQL讀寫分離原理相關知識體系  http://blog.csdn.net/wjl7813/article/details/79184468

本文以第2種方式實現(基於中間代理層實現)


建立監控複製狀態賬號
grant replication slave, replication client on *.* to [email protected]'192.168.137.%' identified by 'monitor18';


建立業務賬號
 grant all privileges on mycat.* to

[email protected]'192.168.137.%' identified by 'H2kXvhaJxRSl';
 grant select on *.* to [email protected]'192.168.137.%';








mkdir -p /data1/maxscale4007/log/
mkdir -p /data1/maxscale4007/data/
mkdir -p /data1/maxscale4007/cache/
mkdir -p /data1/maxscale4007/pid/
chown -R maxscale:maxscale /data1/maxscale4007
2.1.6.maxsacle建立祕鑰


[
[email protected]
opt]# maxpasswd /data1/maxscale4007/data/.secrets monitor18
Failed to encode the password
[[email protected] opt]# maxkeys /data1/maxscale4007/data/
[[email protected]er opt]# maxpasswd /data1/maxscale4007/data/.secrets monitor18
E2D5388FEC655E04F977AFFE91F08240
[[email protected] opt]# maxpasswd /data1/maxscale4007/data/.secrets H2kXvhaJxRSl
DAA9A9DD308D222752B398EBC03474EF


vim /etc/maxscale4007.cnf 
[maxscale]
threads=auto   
maxlog=1       
log_to_shm=0   
log_warning=1  
log_error=1    
log_notice=1   
log_info=0     
log_debug=0    
#log_augmentation=1
LimitNOFILE=65536
logdir=/data1/maxscale4007/log/  
datadir=/data1/maxscale4007/data/  
cachedir=/data1/maxscale4007/cache/  
piddir=/data1/maxscale4007/pid/  
libdir=/usr/lib64/maxscale/  
execdir=/usr/bin/  


[server1]
type=server
address=192.168.137.141
port=3389
protocol=MySQLBackend


[server2]
type=server
address=192.168.137.142
port=3389
protocol=MySQLBackend


[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon
passwd=E2D5388FEC655E04F977AFFE91F08240
monitor_interval=5000     
#detect_replication_lag=true 
#max_slave_replication_lag 
detect_stale_master=true  


#[Read-Only Service]
#type=service
#router=readconnroute
#servers=server2
#user=user_maxscale
#passwd=A622DB34CBF413527DE9048EBC3FE42E66EF97D8DD167887F781C5108213FD21
#router_options=slave




[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=user_maxscale
passwd=DAA9A9DD308D222752B398EBC03474EF
max_slave_connections=100%
use_sql_variables_in=master 
enable_root_user=1  
#master_accept_reads=true 


[MaxAdmin Service]
type=service
router=cli


#[Read-Only Listener]
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=3300




[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4007




[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=/data1/maxscale4007/maxadmin.sock
port=6604


啟動 maxscale
[
[email protected]
opt]# maxscale -f /etc/maxscale4007.cnf 


maxscale服務狀態
[[email protected] opt]# maxadmin -S /data1/maxscale4007/maxadmin.sock
MaxScale>  list listeners
Listeners.
---------------------+--------------------+-----------------+-------+--------
Service Name         | Protocol Module    | Address         | Port  | State
---------------------+--------------------+-----------------+-------+--------
Read-Write Service   | MySQLClient        | *               |  4007 | Running
MaxAdmin Service     | maxscaled          | *               |  6604 | Running
MaxAdmin Service     | maxscaled          | /data1/maxscale4007/maxadmin.sock |     0 | Running
---------------------+--------------------+-----------------+-------+--------


MaxScale> list servers 
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.137.141 |  3389 |           0 | Master, Running
server2            | 192.168.137.142 |  3389 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale> list services 
Services.
--------------------------+----------------------+--------+---------------
Service Name              | Router Module        | #Users | Total Sessions
--------------------------+----------------------+--------+---------------
Read-Write Service        | readwritesplit       |      1 |     1
MaxAdmin Service          | cli                  |      3 |     4
--------------------------+----------------------+--------+---------------


MaxScale> show services
Service 0x1915e10
Service:                             Read-Write Service
Router:                              readwritesplit (0x7f7e0a75fd40)
State:                               Started
Number of router sessions:           0
Current no. of router sessions:      0
Number of queries forwarded:          0
Number of queries forwarded to master:0 (0.00%)
Number of queries forwarded to slave: 0 (0.00%)
Number of queries forwarded to all:   0 (0.00%)
Started:                             Tue Dec 26 05:02:16 2017
Root user access:                    Enabled
Backend databases:
192.168.137.141:3389  Protocol: MySQLBackend
192.168.137.142:3389  Protocol: MySQLBackend
Users data:                          0x192b5f0
Total connections:                   1
Currently connected:                 1
Service 0x1914350
Service:                             MaxAdmin Service
Router:                              cli (0x7f7e0a969560)
State:                               Started
Started:                             Tue Dec 26 05:02:16 2017
Root user access:                    Disabled
Backend databases:
Users data:                          0x193bfa0
Total connections:                   4
Currently connected:                 3

[[email protected] mha]$ mysql -h 192.168.137.140 -P4007 -uuser_maxscale -pH2kXvhaJxRSl  

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

master 建立一個測試庫 percona 

mysql> create database percona;
Query OK, 1 row affected (2.65 sec)


mysql> use percona;
Database changed
mysql> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
Query OK, 0 rows affected (0.33 sec)


mysql>  INSERT INTO percona.example VALUES (1, 'percona1');
Query OK, 1 row affected (0.14 sec)


mysql> 
mysql> select * from example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
+---------+-----------+
1 row in set (0.00 sec)


mysql> INSERT INTO percona.example VALUES (2, 'percona2');
Query OK, 1 row affected (0.00 sec)


mysql> INSERT INTO percona.example VALUES (3, 'percona3');
Query OK, 1 row affected (0.00 sec)


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


mysql> select * from example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
|       2 | percona2  |
|       3 | percona3  |
+---------+-----------+
3 rows in set (0.00 sec)


mysql> select * from example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
|       2 | percona2  |
|       3 | percona3  |
+---------+-----------+
3 rows in set (0.00 sec)


mysql> select * from example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
|       2 | percona2  |
|       3 | percona3  |
+---------+-----------+
3 rows in set (0.00 sec)