天天看點

Mysql資料庫之讀寫分離

前言:現在我忘的速度,已經超過了我學習的速度了....

-----------------

一 讀寫分離概述

讀寫分離很好了解,就是為了緩解伺服器的壓力,而将對資料庫的查詢操作(讀)和插入操作(寫),分隔,而孕育出來的技術.

區分讀寫操作的方法有兩種,一是從用戶端區分,二是從伺服器區分,為了增加使用者體驗.開發者果斷放棄了在使用者端區分,進而在伺服器端區分,進而實作讀寫分離技術.避免在一台伺服器上同時進行讀寫操作.提高資料庫伺服器的負載能力.

二 拓撲圖展示

Mysql資料庫之讀寫分離

mysql代理伺服器使用的是MaxScale代理軟體詳情請通路官網https://downloads.mariadb.com

下載下傳位址

https://downloads.mariadb.com/files/MaxScale

三 建構流程

1.部署mysql一主一從結構

主伺服器ip 192.168.4.51

從伺服器ip 192.168.4.52

2.部署mysql代理伺服器192.168.4.57

裝包,修改配置檔案,啟動服務

3.測試用戶端連接配接代理服務通路資料

四 部署服務

1.部署主從

配置主伺服器192.168.4.51

]# vim /etc/my.cnf
[mysqld]
server_id=51    //指定伺服器ID号 
log-bin=master51        //啟用binlog日志,并指定檔案名字首
...
[[email protected] ~]# systemctl restart mysqld        //重新開機mysqld
           

主伺服器授權使用者,并檢視binlog日志資訊

]# mysql -uroot -p123456

mysql> grant all on . to ‘repluser’@’%’ identified by ‘123456’;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show master status;

±----------------±---------±-------------±-----------------±------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

±----------------±---------±-------------±-----------------±------------------+

| master51.000001 | 453 | | | |

±----------------±---------±-------------±-----------------±------------------+

配置從伺服器192.168.4.52

]# vim /etc/my.cnf
[mysqld]
server_id=52   //不要重複,唯一,報存退出
連接配接mysql指定主庫資訊

mysql> change master to master_host='192.168.4.51',
    -> master_user='repluser',
    -> master_password='123456',
    -> master_log_file='master51.000001',
    -> master_log_pos=453;
啟動slave
mysql> start slave;
檢視
mysql> show  slave status\G;
確定兩個線程yes
  Slave_IO_Running: Yes        //IO線程YES
  Slave_SQL_Running: Yes        //SQL線程YES
           

2.配置maxscale代理伺服器

安裝:rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm

修改配置檔案

]# vim /etc/maxscale.cnf
[maxscale]
threads=auto            //運作的線程的數量
[server1]            //定義資料庫伺服器
type=server
address=192.168.4.51        //主伺服器ip
port=3306
protocol=MySQLBackend        
[server2]
type=server
address=192.168.4.52        //從伺服器IP
port=3306
protocol=MySQLBackend
[MySQL Monitor]                //定義監控的資料庫伺服器
type=monitor
module=mysqlmon
servers=server1, server2        //監控的資料庫清單,不能寫ip
user=maxscalemon                    //監控使用者
passwd=123qqq...A                //密碼
monitor_interval=10000        
#[Read-Only Service]        //不定義隻讀服務
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
[Read-Write Service]            //定義讀寫分離服務
type=service
router=readwritesplit
servers=server1, server2
user=maxscalerouter            //路由使用者
passwd=123qqq…A                //密碼
max_slave_connections=100%
[MaxAdmin Service]        //定義管理服務
type=service
router=cli
#[Read-Only Listener]        //不定義隻讀服務使用的端口号
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
[Read-Write Listener]            //定義讀寫服務使用的端口号
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006
[MaxAdmin Listener]        //管理服務使用的端口号
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4016     //手動添加,不指定時使用的是預設端口在啟動服務以後可以知道預設端口是多少

注意:除此以外的其他代碼均可删除,不删除要注釋掉
           

添加對應的授權使用者,主伺服器添加,從伺服器自動同步

mysql> grant replication slave,replication client on *.* to  [email protected]'%' identified by "123qqq…A";      //授權監控使用者
mysql> grant select on mysql.* to [email protected]"%" identified by "123qqq…A";   //授權路由使用者
           

确認添加後保險起見去從伺服器上檢視一下

啟動服務檢視對應端口和程序

]# maxscale -f  /etc/maxscale.cnf   
]# ps -C  maxscale        //檢視程序
PID TTY          TIME CMD
17930 ?        00:00:00 maxscale   
]# netstat  -antup | grep :4006  //檢視讀寫分離端口
tcp6       0      0 :::4006      :::*                    LISTEN      17930/maxscale
]# netstat  -antup | grep :4016  //檢視管理服務端口
tcp6       0      0 :::4016       :::*                    LISTEN      17930/maxscale
           

測試配置

在代理伺服器本機檢視的指令

]# maxadmin  -uadmin -pmariadb -P4016
MaxScale> list  servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.4.51    |  3306 |           0 | Master, Running
server2            | 192.168.4.52    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
//确認主從都是running的狀态
           

在其他主機檢視就要去主伺服器添加授權使用者,添加完使用者後,在主伺服器建庫建表插入一條資料,然後再到從伺服器插入一條資料,利用從伺服器不會同步資料到主伺服器的特性,從其他主機使用授權使用者通路讀寫分離代理伺服器的4006端口,連接配接成功後使用查詢語句可以看到2條插入的資料,表示讀寫分離服務建構成功.

繼續閱讀