天天看點

MaxScale binlog server的搭建

官方手冊:

https://mariadb.com/resources/blog/binlog-server

參考文章:

http://www.linuxidc.com/Linux/2016-12/137892.htm

http://www.sohu.com/a/120438391_487514

缺點:目前binlog server還不支援GTID的複制。

<a href="https://s1.51cto.com/wyfs02/M01/9B/3D/wKiom1lfuzTCdceWAADNVrhJq18091.png" target="_blank"></a>

實驗拓撲圖:

<a href="https://s1.51cto.com/wyfs02/M01/9B/3D/wKiom1lfuzXg5-WDAACBo37piV4775.png" target="_blank"></a>

步驟1:

Node1上建立複制權限的賬戶:

&gt; grant replication client,replication slave,select on *.* to 'rpl'@"192.168.2.%" identified by 'rpl';

# 這是給從庫複制用的賬号,同時也是maxscale拉取binlog的賬戶,它比正常的slave 賬戶多了一個select權限。

先把Node2挂到node1下,模拟沒有binlog server之前的架構:

過程無非就是導出node1的全量資料,在node2上恢複并change master 到node1,具體步驟略過。

Node3 上安裝maxscale:

rpm -ivh maxscale-2.1.4-1.rhel.6.x86_64.rpm

mkdir  /data/binlog/ -p

chown maxscale.maxscale /data/binlog/ -R

vim/etc/maxscale.conf 内容如下:

[maxscale]                                                                                                                 

threads=4   # 根據CPU核心數量來設定

## 連接配接到Master的資訊

[Replication]

type=service

router=binlogrouter

version_string=5.6.36-log  

# version_string 參數用于将主庫的版本資訊傳遞到從庫,MaxScale sends server handshakepacket to clients

router_options=server-id=13,heartbeat=30,transaction_safety=1,rcompatibility=1,send_slave_heartbeat=1

binlogdir=/data/binlog   # 這個目錄屬主屬組必須是maxscale

user=rpl

passwd=rpl

#說明:

#server-id 設定的是maxscale的id,不能與主庫或者從庫重名。

#heartbeat=30表示當maxscale在30秒内沒有接收到主庫推送的binlog日志,發送心跳檢查

#transaction_safety=1 用于啟用binlog日志中的不完整事務檢測。當MariaDBMaxScale啟動時,如果目前binlog檔案已損壞或找到不完整的事務,則可能會出現錯誤消息。在正常工作期間,binlog事件不會配置設定到從庫,直到事務已經送出。預設值為off,設定transaction_safety= on以啟用不完全事務檢測。【類似relay_log_recovery = ON的作用】

#send_slave_heartbeat=1開啟心跳檢查

## 提供給slave連接配接的資訊

[ReplicationListener]

type=listener

service=Replication

protocol=MySQLClient

port=5308

## maxscale後端管理端口

[MaxAdmin Service]

router=cli

[MaxAdmin Listener]

service=MaxAdmin Service

protocol=maxscaled

socket=default

vim /data/binlog/master.ini 加上如下的内容:

[binlog_configuration]

master_host=192.168.2.11   # 主庫位址

master_port=3306             #主庫端口号

master_user=rpl              #master的複制賬号

master_password=rpl       # master的複制密碼

filestem=mysql    # 表示拉過來的binlog檔案以mysql.***這種命名方式。我的主庫也是mysql.*這種命名方式

添加這個master.ini檔案,以便啟動maxscale後自動去拉取主庫的目前的全部binlog檔案(即便後來主庫的binlog過期後被自動purge掉了,maxscale伺服器上的binlog還會儲存着的)

然後,在node3上開啟maxscale服務:

/etc/init.d/maxscale start

稍等片刻,node3會把主庫的全部binlog都拉過來。

<a href="https://s3.51cto.com/wyfs02/M01/9B/3D/wKioL1lfu43TiG1eAAA9A9yYRFo483.png" target="_blank"></a>

日志記錄在/var/log/maxscale/maxscale.log 裡面。

ss -lnt|grep 5308 端口起來的話。

mysql -urpl -prpl -h 127.0.0.1 -P 5308 即可登陸到maxscale控制台,和mysql使用起來一樣。

現在我們把node4這個新的從庫加到node3的binlog server 下面:

首先,将node1的全備份資料導入到node4,

然後head -35 all.sql 全備份裡面找到類似:

CHANGE MASTER TOMASTER_LOG_FILE='mysql.000004', MASTER_LOG_POS=2254 這樣的記錄。

在node4上執行change master操作:

&gt; CHANGE MASTER TO MASTER_HOST='192.168.2.13' ,

 MASTER_PORT=5308,

 MASTER_USER='rpl',

 MASTER_PASSWORD='rpl',

 MASTER_LOG_FILE='mysql.000004',

 MASTER_LOG_POS=2254 ;

注意上面的change master操作中,我們隻改了下master的位址和端口、複制用的使用者名、密碼。

因為binlog server實際上和master的資料是一樣的,它隻直接把master的binlog拖過來的。

同樣的操作,我們可以把node2也挂到binlog server下面。

在node2上:

show slave status\G 記錄下Exec_Master_Log_Pos和Master_Log_File。

stop slave;

reset slave all;

然後使用change master将上級指向binlog server即可。

其他maxscale的指令:

在node3上,執行show slave hosts; 可以看到

<a href="https://s1.51cto.com/wyfs02/M02/9B/3D/wKioL1lfu6qh1WyQAAAmBw2TjsE858.png" target="_blank"></a>

還可以登陸maxscale控制台:

maxadmin -S /tmp/maxadmin.sock 

MaxScale&gt; show services  等其他很多檢視狀态的指令,可使用help提示。這裡不是重點。

本文轉自 lirulei90 51CTO部落格,原文連結:http://blog.51cto.com/lee90/1945438,如需轉載請自行聯系原作者

繼續閱讀