redis-08-主從復(fù)制

[TOC]

1 簡介

Redis的主從復(fù)制簡單來說就是:

  • 根據(jù)一定的策略將主機(jī)數(shù)據(jù)同步至從機(jī)
  • 主從復(fù)制,讀寫分離,容災(zāi)備份
  • 主寫從讀,高可用

2 本文目的

本篇文章將配置如下結(jié)構(gòu)的主從復(fù)制示例:

replication
  • h1作為主機(jī)(master)
  • h2和h3作為備機(jī)(slave)
  • 主機(jī)h1負(fù)責(zé)寫數(shù)據(jù)
  • 備機(jī)h2、h3負(fù)責(zé)讀數(shù)據(jù)
  • 為方便,此處用主機(jī)名代替IP地址。此處實(shí)驗(yàn)環(huán)境中ip地址和主機(jī)名關(guān)系如下:
[root@h1 redis]$ cat /etc/hosts
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

192.168.1.131   h1 # 主機(jī)(master)
192.168.1.132   h2 # 備機(jī)(slave)
192.168.1.133   h3 # 備機(jī)(salve)
[root@h1 redis]$  

2 配置

2.1 注意點(diǎn)

  • 配置之前請先確保主機(jī)和備機(jī)中的Redis配置文件以下幾項(xiàng)已經(jīng)修改:
# 關(guān)閉保護(hù)模式--不然在不同的主機(jī)上redis的主從機(jī)是連接不了的
protected-mode no
# 以后臺進(jìn)程的方式運(yùn)行redis服務(wù)
daemonize yes
# 綁定所有網(wǎng)絡(luò)地址(方便起見才這么做的)
bind 0.0.0.0
  • 將redis啟動(dòng)過程中的警告處理掉:

http://blog.csdn.net/hylexus/article/details/69358037

2.2 動(dòng)態(tài)配置

此處所謂的動(dòng)態(tài)配置指的是在redis運(yùn)行時(shí)使用命令動(dòng)態(tài)配置集群中的主從關(guān)系。

  • 主機(jī)的配置文件不用修改
  • 分別啟動(dòng)三臺redis服務(wù)器
  • 先來看看主從關(guān)系
# 此時(shí)的三臺主機(jī)顯示的都是master角色
h1:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
h1:6379>
# h2信息
h2:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
h2:6379>  
# h3信息
h3:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
h3:6379>  
  • 動(dòng)態(tài)配置主從關(guān)系

其實(shí)配置很簡單,只需要配置備機(jī)即可:

# 將當(dāng)前機(jī)器配置為<host>機(jī)器上redis服務(wù)的備機(jī)
slaveof <host> <port>

具體操作如下:

# 備機(jī)h2配置
h2:6379> SLAVEOF h1 6379
OK
h2:6379> info replication
# Replication
role:slave
master_host:h1 # 當(dāng)前h2是h1的備機(jī)
master_port:6379 # 主機(jī)端口
master_link_status:up # 通信鏈路已經(jīng)連通
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:15
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
h2:6379>  

# 配置h3
h3:6379> SLAVEOF h1 6379
OK
h3:6379> info replication
# Replication
role:slave
master_host:h1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:57
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
h3:6379>  
  • 測試
# 先清空數(shù)據(jù)
h1:6379> FLUSHALL
OK
# 在主機(jī)上添加數(shù)據(jù)
h1:6379> set k1 v1
OK
h1:6379>  

# 在備機(jī)h2上查看
h2:6379> get k1
"v1"
h2:6379>  

# 在備機(jī)h3上查看
h3:6379> get k1
"v1"
h3:6379>  

2.3 靜態(tài)配置

此處所謂的靜態(tài)配置是和2.1中所謂的靜態(tài)配置相對應(yīng)的配置,指的是在redis的配置文件中事先配好主從關(guān)系。

分別在備機(jī)h2和h3的配置文件里增加如下配置即可:

# 一條配置指令即可
SLAVEOF h1 6379

3 同步過程

  • slave啟動(dòng)成功后,連接到master后會(huì)發(fā)送一個(gè)sync命令
  • master收到sync命令后
    • 啟動(dòng)后臺備份進(jìn)程備份(包括寫操作的數(shù)據(jù))
    • 數(shù)據(jù)備份完成后將傳送整個(gè)數(shù)據(jù)文件到slave,即一次完全同步
  • 只要是重新連接master,一次完全同步(全量復(fù)制)將被自動(dòng)執(zhí)行.
    • 同時(shí),slave在接收到數(shù)據(jù)庫文件數(shù)據(jù)后,將其存盤并加載到內(nèi)存中
  • 集群穩(wěn)定后
    • master繼續(xù)將收到的寫操作命令依次傳給slave,即增量同步
  • 可以使用slaveof no one來使某臺slave重新恢復(fù)自由身,即不再做任何主機(jī)的備機(jī).

4 主從復(fù)制的特點(diǎn)

  • 一個(gè)master可以有N個(gè)slave
  • 某個(gè)slave宕機(jī),讀性能下降
  • master宕機(jī),導(dǎo)致寫操作完全無法執(zhí)行
  • master宕機(jī)后,需手動(dòng)配置和指定新的master及其附屬slave的從屬關(guān)系

因此,僅僅使用主從復(fù)制還是不夠的。因?yàn)橹鲝膬H僅針對高并發(fā),對于高可用沒有考慮。

請看下一篇文章中介紹的哨兵模式。

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容