Mariadb半同步複製,主從複製與雙主複製

知識背景

  

一.mariadb複製相關知識

  
1.mariadb的來源
  
  mysql數據庫目前在數據庫市場中所佔份額僅僅次於oracle數據庫,同時也是開源數據庫的龍頭老大。因爲mysql數據庫的開源性和高性能,同時仍是免費的(不過被oracle收購後不容樂觀),所以,mysql之父又開啓了一個mysql的新分支mariadb,mariadb相對mysql而言版更新快,新特性實裝速度迅速,mysql官方版本的優勢mariadb也會很快的加以吸取。
  
2.mariadb複製的流程
  
  mariadb數據庫支持同步複製,半同步複製和異步複製,在複製的過程當中一個服務器充當主服務器,而一個或者多個服務器作爲從服務器。主服務器在進行修改時,會將更新寫入二進制日誌文件,而且維護文件的一個索引來跟蹤日誌循環。日誌的記錄會發送到從服務器進行數據修改。當從服務器到主服務器上獲取二進制日誌時,它會通知主服務器從日誌中讀取最後一次成功的更新的位置,從服務器則會接收從該位置以後發生的所有操做。
  
3.同步複製,異步複製,半同步複製
  
  同步複製:Master提交事務,直到事務在全部的Slave都已提交,此時纔會返回客戶端,事務執行完畢。缺點:完成一個事務可能會有很大的延遲。
  異步複製:當Slave準備好纔會向Master請求binlog。缺點:不能保證一些事件都可以被全部的Slave所接收。
  半同步複製:半同步複製工做的機制處於同步和異步之間,Master的事務提交阻塞,只要一個Slave已收到該事務的事件且已記錄。它不會等待全部的Slave都告知已收到,且它只是接收,並不用等其徹底執行且提交。若到達超時時長仍未收到則轉爲異步複製。
  
4.複製的經常使用架構
  
  複製技術在實際應用中有多種實現架構,常見的有如下幾種:
  1.一主一從,即一臺主數據庫,一臺從數據庫;
  2.一主多從,即一臺主數據庫,多臺從數據庫,主要用在寫操做不頻繁,可是有着大量讀操做的環境中;
  3.主主互備,即兩臺mariadb數據庫服務器互相將對方做爲本身的主服務器,本身又同時做爲對方的從服務器進行復制。主要用於對數據庫寫操做較多的環境中,防止出現數據庫的單點故障。
  4.雙主多從,在主主互備的基礎上,在加上多個從服務器,主要用戶對數據庫寫操做比較多,同時查操做也比較多的環境中。
  
  mysql

複製的實現

  

主從複製(基於異步)

  

節點 系統 mariadb ip
主節點 CentOS7.4 10.3.7 192.168.99.130
從節點 CentOS7.4 10.3.7 192.168.99.131

  
圖示
Mariadb半同步複製,主從複製與雙主複製linux

2.1.安裝mariadb,這裏爲了省事直接yum安裝了,其餘安裝方式不會影響後續操做;清理iptalbes和selinux,防止干擾實驗sql

iptables -F
    iptables -X
    setenforce 0
    yum install mariadb-server -y

2.修改主數據庫的配置文件數據庫

# mariadb 10.2之前的版本
    vim /etc/my.cnf
    #10.3以後的版本已經放到/etc/my.cnf.d/下
    vim /etc/my.cnf.d/server.cnf

在[mysqld]下添入一下字段vim

#惟一標示的id段,不可重複
server-id=1 
#開啓二進制日誌,能夠自定義路徑和文件名
log-bin=mysql-bin
#開啓二進制中繼日誌並定義命名格式
relay-log=mysq-relay-bin
#複製的過濾項,負責過濾掉不須要複製的庫和表
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

Mariadb半同步複製,主從複製與雙主複製
3.修改從數據的配置文件安全

# mariadb 10.2之前的版本
    vim /etc/my.cnf
    #10.3以後的版本已經放到/etc/my.cnf.d/下
    vim /etc/my.cnf.d/server.cnf
#惟一標示的id段,不可重複
    server-id=2
    #開啓二進制日誌,能夠自定義路徑和文件名
    log-bin=mysql-bin
    #開啓二進制中繼日誌並定義命名格式
    relay-log=mysq-relay-bin
    #複製的過濾項,負責過濾掉不須要複製的庫和表
    replicate-wild-ignore-table=mysql.%
    replicate-wild-ignore-table=test.%
    replicate-wild-ignore-table=information_schema.%

Mariadb半同步複製,主從複製與雙主複製
4.啓動mariadb服務器

#主從都執行
    systemctl start mariadb

5.同步數據庫(若是都是新數據庫沒必要作這步操做)
若是主數據庫上已經有了數據,那麼在執行復制以前要先行將兩個數據庫的數據同步。架構

#建立讀鎖,禁止寫入數據
flush tables with read lock;
#同步完成後記得釋放

6.建立複製用戶,通常建議建立一個專門用來複制數據的帳號,以避免影響的數據的安全性。oracle

#grant replication slave on *.* to '用戶名'@'容許登錄的ip' identified by '密碼';

grant replication slave on *.* to 'slave'@'192.168.99.131' identified by 'slave';

#使得受權生效
flush privileges;

#查看當前主庫的二進制日誌信息
show master status;

Mariadb半同步複製,主從複製與雙主複製
7.配置從數據庫,將192.168.99.130做爲主庫異步

#mariadb> change master to \
                                #-> master_host='192.168.99.130', 指定主庫ip
                                #-> master_user='slave', 指定備份帳號名
                                #-> master_password='slave', 指定備份帳號的密碼
                            #-> master_log_file='mysql-bin.000001', 主服務器的二進制日誌名
                                #-> master_log_pos=851; 二進制文件的位置
mariadb> change master to \
                                -> master_host='192.168.99.130',
                                -> master_user='slave',
                                -> master_password='slave',
                                -> master_log_file='mysql-bin.000001',
                                -> master_log_pos=851;

8.從數據庫開啓slave

start slave;

9.檢查運行狀態

show slave status\G;

Mariadb半同步複製,主從複製與雙主複製

slave_IO_running和slave_SQl_running 是運行在從服務器節點上的主從複製線程,正常狀況下均爲yes
replicate_wild_ignore_table 顯示的是不復制的庫和表

  

雙主複製(基於異步)

  
雙主複製是在主從複製的基礎上,對主從雙方作一次身份反轉。
架構圖
Mariadb半同步複製,主從複製與雙主複製
1.在主從基礎上繼續作如下

#上一次的從做爲本次的主
#grant replication slave on *.* to '用戶名'@'容許登錄的ip' identified by '密碼';

grant replication slave on *.* to 'slave'@'192.168.99.130' identified by 'slave';

#使得受權生效
flush privileges;

#查看當前主庫的二進制日誌信息
show master status;

Mariadb半同步複製,主從複製與雙主複製
2.在從數據庫(上次的主)執行如下操做

mariadb> change master to \
                                -> master_host='192.168.99.131',
                                -> master_user='slave',
                                -> master_password='slave',
                                -> master_log_file='mysql-bin.000001',
                                -> master_log_pos=650;

3.啓動備份

start slave;
#查看運行狀態
show status slave;

Mariadb半同步複製,主從複製與雙主複製

ps:
若是兩臺服務器都作數據更新時候回出現自增加字段發生衝突。
在配置文件加入

auto_increment_offset=1 開始點
auto_increment_increment=2 增加幅度
另一臺加入
auto_increment_offset=2 開始點
auto_increment_increment=2 增加幅度

新配置文件

server-id=#(id數字) 
log-bin=mysql-bin
relay-log=mysq-relay-bin
# 「#」內填寫對應數字來避免衝突
auto_increment_offset=#(開始點)
auto_increment_increment=# (增加幅度)
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

總的來講不推薦使用主主複製,mysql主主模型很難保證數據的一致性,因此僅僅做爲演示。

配置半同步複製

  
半同步複製須要啓動對應的插件

#查看半同步複製協議是否開啓
show global variables like '%semi%';

Mariadb半同步複製,主從複製與雙主複製
開啓半同步協議(舊版本須要手動安裝,新版本已經內置,直接開啓修好)

#舊版本安裝
#主節點
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
#開啓主節點半同步
SET GLOBAL rpl_semi_sync_master_enabled=1;
#設置超時時間
SET GLOBAL rpl_semi_sync_master_timeout=2000;
#從節點
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
開啓從節點半同步複製
SET GLOBAL rpl_semi_sync_slave_enabled=1;
#新版本
#開啓主節點半同步
SET GLOBAL rpl_semi_sync_master_enabled=1;
#設置超時時間
SET GLOBAL rpl_semi_sync_master_timeout=2000;
#從節點
SET GLOBAL rpl_semi_sync_slave_enabled=1;

半同步複製的主從和主主,都是基本異步複製的基礎上的,所以配置過程和上面的配置流程相同。

相關文章
相關標籤/搜索