maxscale


一.maxscale簡介
1.MaxScale是maridb開發的一個mysql數據中間件,其配置簡單,能夠實現讀寫分離,並且可以根據主從狀態實現寫庫的自動切換。
2.官網:
https://mariadb.com/kb/en/mariadb-enterprise/mariadb-maxscale-20/

二.安裝
1.安裝可以通過rpm安裝
2.可以直接下載文件放入指定目錄,本次采用第二種方法

#wget https://downloads.mariadb.com/MaxScale/2.0.2/centos/5Server/x86_64/maxscale-2.0.2.centos.5.tar.gz
#tar zxvf maxscale-2.0.2.centos.5.tar.gz
#mkdir /usr/local/maxscale
#mv ./maxscale-2.0.2/* /usr/local/maxscale/
#cp /usr/local/maxscale/etc/maxscale.cnf.template /etc/maxscale.cnf

 

修改啟動腳本,使其可以提供service服務

#cp /usr/local/maxscale/share/maxscale/maxscale /etc/init.d/maxscale
#vi /etc/init.d/maxscale

將腳本中的///bin替換為/usr/local/maxscale/bin/maxscale
這將可以使用 service maxscale start|stop|restart啟動停止或重啟maxscale


三.賬戶配置
1.在主從庫上授權兩個賬戶
a.監視賬戶

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

  

b.路由賬戶

create user maxscale_route@'192.168.1.%' identified by "123456";
GRANT SELECT ON mysql.user TO maxscale_route@'192.168.1.%';
GRANT SELECT ON mysql.db TO maxscale_route@'192.168.1.%';
GRANT SELECT ON mysql.tables_priv TO maxscale_route@'192.168.1.%';
GRANT SHOW DATABASES ON *.* TO maxscale_route@'192.168.1.%';

 


四.讀寫分離配置
0.vi /etc/maxscale.cnf
基本配置

[maxscale]
# 開啟線程個數,默認為1.設置為auto會同cpu核數相同
threads=auto
# timestamp精度
ms_timestamp=1
# 將日志寫入到syslog中
syslog=1
# 將日志寫入到maxscale的日志文件中
maxlog=1
# 不將日志寫入到共享緩存中,開啟debug模式時可打開加快速度
log_to_shm=0
# 記錄告警信息
log_warning=1
# 記錄notice
log_notice=1
# 記錄info
log_info=1
# 不打開debug模式
log_debug=0
# 日志遞增
log_augmentation=1
 
# 相關目錄設置
basedir=/usr/local/maxscale/
logdir=/u01/maxscale/logs/trace/
datadir=/u01/maxscale/data/
cachedir=/u01/maxscale/cache/
piddir=/u01/maxscale/tmp/

  

1.讀寫分離配置
a.配置兩個server

[server1]
type=server
address=192.168.1.126
port=3306
protocol=MySQLBackend
serv_weight=3 #讀的比重

[server2]
type=server
address=192.168.1.84
port=3306
protocol=MySQLBackend
serv_weight=2 #讀的比重

  

b.配置monitor

[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=maxscale_monitor
passwd=123456
# 心跳間隔10s
monitor_interval=10000
# 如果有5.1的mysql版本,一定要設置此項,否者slave頻繁報lost_slave
mysql51_replication=true
# 當slave斷掉時,是否將所有訪問指向master
detect_stale_master = true

  

  

  

c.配置讀寫分離

[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale_route
passwd=123456
max_slave_connections=100%  #所有的slave提供select查詢服務
#use_sql_variables_in=all	#動態參數可以走全部的數據庫  [all|master]  如果設置為master的話前台看到的中文是亂碼,一般建議設置為all
#weightby=serversize	#權重設置
#enable_root_user=1	#允許root用戶登錄執行
master_accept_reads=true #master是否接受讀請求
#auth_all_servers=true	#
#log_auth_warnings=true	#身份驗證失敗和警告的日志記錄,記錄那些試圖連接到MaxScale和來自哪里
#filters=Hint	#強制select走master的選項
#允許slave落后master多少秒
max_slave_replication_lag=3600

  

  

d.配置端口

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

[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
port=6603
socket=default

  

 

五.啟動
1./usr/local/maxscale/bin/maxscale start
2.查看狀態(以下的user和password均為默認賬號密碼):
/usr/local/maxscale/bin/maxadmin --user=admin --password=mariadb
(/usr/local/maxscale/bin/maxadmin -S /tmp/maxadmin.sock #使用該項也可以登錄)

MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.1.126 | 3306 | 2 | Master, Running
server2 | 192.168.1.84 | 3306 | 2 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

  

更多幫助可以使用 help命令來獲得


如果想要更改maxadmin的密碼在配置文件中加上

[MaxAdmin Service]
type=service
router=cli
user=maxscale
passwd=123456

  

3.設置服務器維護狀態

MaxScale> set server server2 maintenance
MaxScale> list servers
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.1.126 | 3306 | 1 | Master, Running
server2 | 192.168.1.84 | 3306 | 0 | Maintenance, Slave, Running

  

4.清除維護狀態

MaxScale> clear server server2 maintenance
MaxScale> list servers
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.1.126 | 3306 | 3 | Master, Running
server2 | 192.168.1.84 | 3306 | 3 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

  

六.只讀,按一定比例分攤讀
1.配置只讀服務

[Read-Only Service]
type=service
router=readconnroute
servers=server1,server2
user=maxscale_route
passwd=123456
weightby=serv_weight

  

server1和server2增加分攤比例

[server1]
type=server
address=192.168.118.126
port=3306
protocol=MySQLBackend
serv_weight=3

[server2]
type=server
address=192.168.118.84
port=3306
protocol=MySQLBackend
serv_weight=2

  


2.配置端口

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

  

3.重新啟動


七.filter
1.讀寫分離,如果slave沒有問題,默認讀全部走slave,但有時候我們需要能夠讀取走master,這時候就需要配置filter
在讀寫分離項中配置,多個filter之前用'|'號分開

filters=Hint

[Hint]
type=filter
module=hintfilter

  

重啟maxscale

應用在sql查詢中:
select * from table where id=10; -- maxscale route to master
將使讀走master


2.有時候我們希望一個數據表能到達指定服務器,則可以這樣配置

[tableFilter]
type=filter
module=namedserverfilter
match=table_name1|table_name2|table_name3
options=ignorecase,extended #忽略大小寫,並啟用擴展配置,這將使用正則表達式
server=server1

 

ps:以上options中按文檔應該ignorecase,extended兩者都應該生效,但實際測試是發現前面的生效,后面的就不生效

讀寫分離路由中配置
filters=tableFilter

這將使帶有table_name1,table_name2,table_name3的查詢或更新,全部到達server1


八.測試和總結
1.如果你有用過mycat和amoeba,你將會發現maxscale配置更加簡單一些,與前兩者相比,maxscale並沒有使用連接池(不知道是不是我理解有誤)
2.mycat和amoeba作為中間件,客戶端在連接時候,賬號和密碼是在其配置文件中指定.但maxscale並不是,而是要求在后端(server1和server2)上定義賬號,maxscale並不驗證賬號密碼正確性,而是有后端去驗證.
這項相比前兩者,更加透明.


免責聲明!

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



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