亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

Redis集群主從復(fù)制(一主兩從)搭建配置教程【W(wǎng)indows環(huán)境】

來源:轉(zhuǎn)載 發(fā)布時間:2018-10-27 15:53:35 閱讀量:1057

由于本地環(huán)境的使用,所以搭建一個本地的Redis集群,本篇講解Redis主從復(fù)制集群的搭建,使用的平臺是Windows,搭建的思路和Linux上基本一致! 

(精讀閱讀本篇可能花費您15分鐘,略讀需5分鐘左右)


Redis主從復(fù)制簡單介紹

為了使得集群在一部分節(jié)點下線或者無法與集群的大多數(shù)節(jié)點進行通訊的情況下, 仍然可以正常運作, Redis 集群對節(jié)點使用了主從復(fù)制功能: 集群中的每個節(jié)點都有 1 個至 N 個復(fù)制品(replica), 其中一個復(fù)制品為主節(jié)點(master), 而其余的 N-1 個復(fù)制品為從節(jié)點(slave)。[ 摘自 Redis 集群中的主從復(fù)制 ]


那么上面是主從復(fù)制呢,簡單的來說就是一個主節(jié)點master可以擁有一個甚至多個從節(jié)點的slave,而一個slave又可以擁有多個slave,如此下去,形成了強大的多級服務(wù)器集群架構(gòu)。 



其中主節(jié)點以寫為主(可寫也可以讀),從節(jié)點只能讀不可寫入!【讀寫分離場景】 

其中主節(jié)點寫入的數(shù)據(jù)會同步(不是準實時的)到salve上,這樣如果主節(jié)點出現(xiàn)故障,數(shù)據(jù)丟失,則可以通過salve進行恢復(fù)?!救轂?zāi)恢復(fù)場景,注:因為數(shù)據(jù)不是實時同步的,可能會存在從salve恢復(fù)數(shù)據(jù)后有數(shù)據(jù)丟失問題】


綜上:下面是關(guān)于redis主從復(fù)制的一些特點: 

1.一個master可以有多個slave 

2.除了多個slave連到相同的master外,slave也可以連接其他slave形成圖狀結(jié)構(gòu) 

3.主從復(fù)制不會阻塞master。也就是說當一個或多個slave與master進行初次同步數(shù)據(jù)時,master可以繼續(xù)處理client發(fā)來的請求。相反slave在初次同步數(shù)據(jù)時則會阻塞不能處理client的請求。 

4.主從復(fù)制可以用來提高系統(tǒng)的可伸縮性,我們可以用多個slave 專門用于client的讀請求,比如sort操作可以使用slave來處理。也可以用來做簡單的數(shù)據(jù)冗余 

5.可以在master禁用數(shù)據(jù)持久化,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數(shù)據(jù)持久化。 

6.可以用于讀寫分離和容災(zāi)恢復(fù)。


Redis主從復(fù)制的常用的幾種方式

一主二仆 A(B、C) 一個Master兩個Slave

薪火相傳(去中心化)A - B - C ,B既是主節(jié)點(C的主節(jié)點),又是從節(jié)點(A的從節(jié)點)

反客為主(主節(jié)點down掉后,手動操作升級從節(jié)點為主節(jié)點) & 哨兵模式(主節(jié)點down掉后,自動升級從節(jié)點為主節(jié)點)

本次主要介紹一主二仆,和反客為主的操作,薪火相傳不做介紹。哨兵模式后面專門寫一篇進行介紹!


Redis主從復(fù)制的搭建(一主二仆)

1.下載Windows環(huán)境的Redis安裝包

Redis For Windows Download 

或者 

Redis For Windows GitHub


2.下載完成進行解壓

解壓收的目錄如下圖: 



3.相關(guān)配置操作

(1)復(fù)制三份解壓后Redis

我自己本地修改了名稱,復(fù)制后文件夾名稱顯示如下:


Redis-x64-3.2.100-6379

Redis-x64-3.2.100-6380

Redis-x64-3.2.100-6381

1

2

3

4

(2)修改redis.windows.conf

6379文件夾,不做修改!


6380文件夾,修改如下:


port 6380


# slaveof <masterip> <masterport>

slaveof 127.0.0.1 6379

1

2

3

4

5

6381文件夾,修改如下:


port 6381

slaveof 127.0.0.1 6379

1

2

3

我默認大家是知道redis.xx.conf的相關(guān)配置的!如果不知道,請看: 

Redis學習——redis.conf 配置文件介紹


(3)加入簡單的window腳本,方便快速啟動!

在對應(yīng)的redis文件夾下面新建


startRedisServer.bat


腳本的內(nèi)容為:


@echo off

redis-server.exe redis.windows.conf

@pause

1

2

3

4

然后在redis文件夾同級的目錄下在新建


start6379.cmd


@echo off

cd Redis-x64-3.2.100-6379

startRedisServer.bat

1

2

3

4

然后6380和6381和上面操作一樣,操作完成后如下圖:




4.啟動測試

啟動規(guī)則:先啟動主節(jié)點,然后在啟動從節(jié)點!


(1)可以使用命令啟動

進入相應(yīng)的文件夾目錄,使用啟動命令:


redis-server.exe


(2)使用腳本啟動

如上面圖片,分別執(zhí)行start6379.cmd, 

start6380.cmd,start6381.cmd。


先啟動Master。使用客戶端登錄,查看信息如圖:




然后啟動6380和6381,然后可以看到:如圖




在此查看6378的主從復(fù)制信息:如圖




在登錄6380和6381的客戶端,查看節(jié)點信息:如圖




測試讀寫,【主節(jié)點可讀可寫,從節(jié)點只能讀不可寫】,如下圖:




測試當主節(jié)點shutdown后,從節(jié)點的狀態(tài)【從節(jié)點可讀,從節(jié)點也不會升級為主節(jié)點】:


127.0.0.1:6381> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:up

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

127.0.0.1:6381>

127.0.0.1:6381> get hello

"world"

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

測試當主節(jié)點重新啟動后,從節(jié)點的狀態(tài)【從節(jié)點依然可以連接主節(jié)點】:


127.0.0.1:6379> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6380,state=online,offset=43,lag=0

slave1:ip=127.0.0.1,port=6381,state=online,offset=43,lag=0

master_repl_offset:43

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:42

127.0.0.1:6379>

1

2

3

4

5

6

7

8

9

10

11

12

13

小插曲【反客為主】 

測試當主節(jié)點shutdown后,使用slaveof no one 是的6380成為主節(jié)點,但是也只是主節(jié)點,沒有任何從節(jié)點?。喝鐖D


127.0.0.1:6381> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:down

master_last_io_seconds_ago:-1

master_sync_in_progress:0

slave_repl_offset:155

master_link_down_since_seconds:jd

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

127.0.0.1:6381>

127.0.0.1:6381>

127.0.0.1:6381> slave no one

(error) ERR unknown command 'slave'

127.0.0.1:6381> slaveof no one

OK

127.0.0.1:6381> 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

127.0.0.1:6381> set test 11

OK

127.0.0.1:6381> get test

"11"

127.0.0.1:6381>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

詳細可以參考 Redis主從復(fù)制 中的內(nèi)容!


Redis主從復(fù)制的原理

第一種介紹

當設(shè)置好slave服務(wù)器后,slave會建立和master的連接,然后發(fā)送sync命令。

Master接到命令啟動后臺的存盤進程,同時收集所有接收到的用于修改數(shù)據(jù)集命令,在后臺進程執(zhí)行完畢之后,master將傳送整個數(shù)據(jù)文件到slave,以完成一次完全同步。

全量復(fù)制:而slave服務(wù)在接收到數(shù)據(jù)庫文件數(shù)據(jù)后,將其存盤并加載到內(nèi)存中。(第一次全量)

增量復(fù)制:Master繼續(xù)將新的所有收集到的修改命令依次傳給slave,完成同步。(之后增量)

但是只要是重新連接master,一次完全同步(全量復(fù)制)將被自動執(zhí)行。

當設(shè)置好slave服務(wù)器后,slave會建立和master的連接,然后發(fā)送sync命令。無論是第一次同步建立的連接還是連接斷開后的重新連接,master都會啟動一個后臺進程,將數(shù)據(jù)庫快照保存到文件中,同時master主進程會開始收集新的寫命令并緩存起來。后臺進程完成寫文件 后,master就發(fā)送文件給slave,slave將文件保存到磁盤上,然后加載到內(nèi)存恢復(fù)數(shù)據(jù)庫快照到slave上。接著master就會把緩存的命令轉(zhuǎn)發(fā)給slave。而且后續(xù)master收到的寫命令都會通過開始建立的連接發(fā)送給slave。從master到slave的同步數(shù)據(jù)的命令和從 client發(fā)送的命令使用相同的協(xié)議格式。當master和slave的連接斷開時slave可以自動重新建立連接。如果master同時收到多個 slave發(fā)來的同步連接命令,只會使用啟動一個進程來寫數(shù)據(jù)庫鏡像,然后發(fā)送給所有slave。


第二種介紹:

圖片內(nèi)容來源網(wǎng)絡(luò):




第三種介紹:

Redis 主從同步有兩種方式(或者所兩個階段):全同步和部分同步。 

主從剛剛連接的時候,進行全同步;全同步結(jié)束后,進行部分同步。當然,如果有需要,Slave 在任何時候都可以發(fā)起全同步。Redis 策略是,無論如何,首先會嘗試進行部分同步,如不成功,要求從機進行全同步,并啟動 BGSAVE……BGSAVE 結(jié)束后,傳輸 RDB 文件;如果成功,允許從機進行部分同步,并傳輸積壓空間中的數(shù)據(jù)。 



Redis主從復(fù)制(一主兩從/一主多從)的分析

IO劇增 

每次slave斷開以后(無論是主動斷開,還是網(wǎng)路故障)再連接master都要將master全部dump出來rdb,在aof,即同步的過程都要重新執(zhí)行一遍;所以要記住多臺slave不要一下都啟動起來,否則master可能IO劇增(間隔1-2分)


復(fù)制延遲 

由于所有的寫操作都是先在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統(tǒng)很繁忙的時候,延遲問題會更加嚴重,Slave機器數(shù)量的增加也會使這個問題更加嚴重。


可用性不高 

當有主節(jié)點發(fā)生異常情況,就會導致不能寫入,導致業(yè)務(wù)出錯![解決方法是可以使用Redis-Sentinel模式,詳情見系列文章第二篇]

注意: 

Redis 集群不保證數(shù)據(jù)的強一致性(strong consistency)Redis 集群的一致性保證(guarantee): 在特定條件下, Redis 集群可能會丟失已經(jīng)被執(zhí)行過的寫命令。

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

作者:每天都在變得更好的阿飛 

來源:CSDN 

原文:https://blog.csdn.net/u010648555/article/details/79427606 

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!


分享:
評論:
你還沒有登錄,請先