redis主從復(fù)制的搭建步驟

這篇文章將為大家詳細(xì)講解有關(guān)redis主從復(fù)制的搭建步驟,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元江蘇做網(wǎng)站,已為上家服務(wù),為江蘇各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

主從復(fù)制的原理

在Redis集群中,讓若干個(gè)Redis服務(wù)器去復(fù)制另一個(gè)Redis服務(wù)器,我們定義被復(fù)制的服務(wù)器為主服務(wù)器(master),而對(duì)主服務(wù)器進(jìn)行復(fù)制的服務(wù)器則被稱為從服務(wù)器(slave),這種模式叫做主從復(fù)制模式。

來(lái)源:簡(jiǎn)書主從復(fù)制的作用

主從復(fù)制,讀寫分離,容災(zāi)恢復(fù)。一臺(tái)主機(jī)負(fù)責(zé)寫入數(shù)據(jù),多臺(tái)從機(jī)負(fù)責(zé)備份數(shù)據(jù)。在高并發(fā)的場(chǎng)景下,即便是主機(jī)掛了,可以用從機(jī)代替主機(jī)繼續(xù)工作,避免單點(diǎn)故障導(dǎo)致系統(tǒng)性能問(wèn)題。讀寫分離,讓讀多寫少的應(yīng)用性能更佳。

主從復(fù)制架構(gòu)

At the base of Redis replication there is a very simple to use and configure master-slave replication that allows slave Redis servers to be exact copies of master servers.

確實(shí)是簡(jiǎn)單的,一個(gè)命令: slaveof 主機(jī)ip 主機(jī)port ,就可以確定主從關(guān)系;一個(gè)命令:./redis-sentinel sentinel.conf ,就可以開啟哨兵監(jiān)控。

搭建是簡(jiǎn)單的,維護(hù)是痛苦的。在高并發(fā)場(chǎng)景下,會(huì)有很多想不到的問(wèn)題出現(xiàn)。我們只有清楚復(fù)制的原理,熟悉主機(jī),從機(jī)宕機(jī)后的變化。才能很好的跨過(guò)這些坑。下面的每一個(gè)步驟都是一個(gè)小的知識(shí)點(diǎn),小的場(chǎng)景。每做完一個(gè)步驟,你都會(huì)收獲到知識(shí)。

架構(gòu)圖:一主二仆一兵(也可以多主多仆多兵)

redis主從復(fù)制的搭建步驟

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

Redis的主從復(fù)制最大的缺點(diǎn)就是延遲,主機(jī)負(fù)責(zé)寫,從機(jī)負(fù)責(zé)備份,這個(gè)過(guò)程有一定的延遲,當(dāng)系統(tǒng)很繁忙的時(shí)候,延遲問(wèn)題會(huì)更加嚴(yán)重,從機(jī)器數(shù)量的增加也會(huì)使這個(gè)問(wèn)題更加嚴(yán)重。

搭建前的準(zhǔn)備工作

因?yàn)楦F,筆者選擇用一臺(tái)服務(wù)器模擬三臺(tái)主機(jī)。和生產(chǎn)環(huán)境的區(qū)別僅僅是ip地址和port端口不同。

第一步:將redis.conf 拷貝三份,名字分別是,redis6379.conf,redis6380.conf,redis6381.conf

第二步:修改三個(gè)文件的port端口,pid文件名,日志文件名,rdb文件名

第三步:分別打開三個(gè)窗口模擬三臺(tái)服務(wù)器,開啟redis服務(wù)。

[root@itdragon bin]# cp redis.conf redis6379.conf
[root@itdragon bin]# cp redis.conf redis6380.conf
[root@itdragon bin]# cp redis.conf redis6381.conf
[root@itdragon bin]# vim redis6379.conf
logfile "6379.log"
dbfilename dump_6379.rdb
[root@itdragon bin]# vim redis6380.conf
pidfile /var/run/redis_6380.pid
port 6380
logfile "6380.log"
dbfilename dump_6380.rdb
[root@itdragon bin]# vim redis6381.conf
port 6381
pidfile /var/run/redis_6381.pid
logfile "6381.log"
dbfilename dump_6381.rdb
[root@itdragon bin]# ./redis-server redis6379.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
(empty list or set)
[root@itdragon bin]# ./redis-server redis6380.conf 
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> keys *
(empty list or set)
[root@itdragon bin]# ./redis-server redis6381.conf 
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6381
127.0.0.1:6381> keys *
(empty list or set)

主從復(fù)制搭建步驟

基礎(chǔ)搭建

第一步:查詢主從復(fù)制信息,分別選擇三個(gè)端口,執(zhí)行命令:info replication。

# 6379 端口
[root@itdragon bin]# ./redis-server redis6379.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
......

# 6380 端口
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:0
......

# 6381 端口
127.0.0.1:6381> info replication
# Replication
role:master
connected_slaves:0
......

三個(gè)端口都打印相同的信息:role:master 角色是master,connected_slaves:0 連接從機(jī)數(shù)量為零。了解更多參數(shù)含義可訪問(wèn)連接: http://redisdoc.com/server/info.html

第二步:選擇6379端口,執(zhí)行命令:set k1 v1

127.0.0.1:6379> set k1 v1
OK

第三步:設(shè)置主從關(guān)系,分別選擇6380端口和6381端口,執(zhí)行命令:SLAVEOF 127.0.0.1 6379

# 6380 端口
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
......

# 6381 端口
127.0.0.1:6381> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
......

# 6379 端口
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=98,lag=1
......

主從關(guān)系發(fā)生了變化:

6380端口和6381端口打印的信息: role:slave 從機(jī);master_host:127.0.0.1 主機(jī)的ip地址;master_port:6379 主機(jī)的port 端口。

6379端口打印的信息: role:master 主機(jī);connected_slaves:2 連了兩個(gè)從機(jī); slaveX : ID、IP 地址、端口號(hào)、連接狀態(tài)、從庫(kù)信息

第四步:全量復(fù)制,分別選擇6380端口和6381端口,執(zhí)行命令:get k1

# 6380 端口
127.0.0.1:6380> get k1
"v1"

# 6381 端口
127.0.0.1:6381> get k1
"v1"

兩個(gè)端口都可以打印k1的值,說(shuō)明在建立主從關(guān)系時(shí),從機(jī)便擁有了主機(jī)的數(shù)據(jù)。

第五步:增量復(fù)制,選擇6379端口,執(zhí)行命令:set k2 v2。然后分別選擇6380端口和6381端口,執(zhí)行命令:get k2

# 6379 端口
127.0.0.1:6379> set k2 v2
OK

# 6380 端口
127.0.0.1:6380> get k2
"v2"

# 6381 端口
127.0.0.1:6381> get k2
"v2"

兩個(gè)端口都可以打印k2的值,說(shuō)明建立主從關(guān)系后,主機(jī)新增的數(shù)據(jù)都會(huì)復(fù)制給從機(jī)。

第六步:主從的讀寫分離,選擇6380端口,執(zhí)行命令:set k3 v3

# 6380 端口
127.0.0.1:6380> set k3 v3
(error) READONLY You can't write against a read only slave.

# 6379 端口
127.0.0.1:6379> set k3 v3
OK

從機(jī)6380寫入失敗,是因?yàn)樽x寫分離的機(jī)制。

第七步:主機(jī)宕機(jī)的情況,選擇6379端口,執(zhí)行命令:shutdown

# 6379 端口
127.0.0.1:6379> SHUTDOWN
not connected> QUIT

# 6380 端口
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
......

# 6381 端口
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
......

從打印的結(jié)果得知:從機(jī)原地待命

第八步:主機(jī)宕機(jī)后恢復(fù),選擇6379端口,重啟Redis服務(wù),執(zhí)行命令:set k4 v4。分別選擇6380端口和6381端口,執(zhí)行命令:get k4

# 6379 端口
[root@itdragon bin]# ./redis-server redis6379.conf 
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set k4 v4
OK

# 6380 端口
127.0.0.1:6380> get k4
"v4"

# 6381 端口
127.0.0.1:6381> get k4
"v4"

主機(jī)重啟后,一切正常。

第九步:從機(jī)宕機(jī)后恢復(fù),選擇6380端口,執(zhí)行命令:shutdown。選擇6379端口,執(zhí)行命令:set k5 v5。選擇6380端口,重啟Redis服務(wù)后執(zhí)行命令:get k5

# 6380 端口
127.0.0.1:6380> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# ./redis-server redis6380.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
......
127.0.0.1:6380> get k5
"v5"

# 6379 端口
127.0.0.1:6379> set k5 v5
OK

從機(jī)宕機(jī)后,一切正常。筆者用的是redis.4.0.2版本的??催^(guò)其他教程,從機(jī)宕機(jī)恢復(fù)后,只能同步主機(jī)新增數(shù)據(jù),也就是k5是沒(méi)有值的,可是筆者反復(fù)試過(guò),均有值。留著備忘!

第十步:去中性化思想,選擇6380端口,執(zhí)行命令:SLAVEOF 127.0.0.1 6381。選擇6381端口,執(zhí)行命令:info replication

# 6380 端口
127.0.0.1:6380> SLAVEOF 127.0.0.1 6381
OK

# 6381 端口
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
......
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=1677,lag=1
......

雖然6381 是6380的主機(jī),是6379的從機(jī)。在Redis眼中,6381依舊是從機(jī)。一臺(tái)主機(jī)配多臺(tái)從機(jī),一臺(tái)從機(jī)在配多臺(tái)從機(jī),從而實(shí)現(xiàn)了龐大的集群架構(gòu)。同時(shí)也減輕了一臺(tái)主機(jī)的壓力,缺點(diǎn)是增加了服務(wù)器間的延遲。

從機(jī)上位

模擬主機(jī)宕機(jī),人為手動(dòng)慫恿從機(jī)上位的場(chǎng)景。先將三個(gè)端口恢復(fù)成6379是主機(jī),6380和6381是從機(jī)的架構(gòu)。

從機(jī)上位步驟:

第一步:模擬主機(jī)宕機(jī),選擇6379端口,執(zhí)行命令:shutdown

第二步:斷開主從關(guān)系,選擇6380端口,執(zhí)行命令:SLAVEOF no one

第三步:重新搭建主從,選擇6381端口,執(zhí)行命令:info replication,SLAVEOF 127.0.0.1 6380

第四步:之前主機(jī)恢復(fù),選擇6379端口,重啟Redis服務(wù),執(zhí)行命令:info replication

在6379主機(jī)宕機(jī)后,6380從機(jī)斷開主從關(guān)系,6381開始還在原地待命,后來(lái)投靠6380主機(jī)后,6379主機(jī)回來(lái)了當(dāng)它已是孤寡老人,空頭司令。

# 6379端口

127.0.0.1:6379> SHUTDOWN
not connected> QUIT

# 6380端口
127.0.0.1:6380> SLAVEOF no one
OK
127.0.0.1:6380> set k6 v6
OK

# 6381端口
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
......
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK
127.0.0.1:6381> get k6
"v6"

哨兵監(jiān)控

從機(jī)上位是需要人為控制,在生產(chǎn)環(huán)境中是不可取的,不可能有人實(shí)時(shí)盯著它,也不可能大半夜起床重新搭建主從關(guān)系。在這樣的需求促使下,哨兵模式來(lái)了?。。?/p>

哨兵有三大任務(wù):

1 監(jiān)控:哨兵會(huì)不斷地檢查你的Master和Slave是否運(yùn)作正常

2 提醒:當(dāng)被監(jiān)控的某個(gè)Redis出現(xiàn)問(wèn)題時(shí), 哨兵可以通過(guò)API向管理員或者其他應(yīng)用程序發(fā)送通知

3 故障遷移:若一臺(tái)主機(jī)出現(xiàn)問(wèn)題時(shí),哨兵會(huì)自動(dòng)將該主機(jī)下的某一個(gè)從機(jī)設(shè)置為新的主機(jī),并讓其他從機(jī)和新主機(jī)建立主從關(guān)系。

哨兵搭建步驟:

第一步:新開一個(gè)窗口,取名sentinel,方便觀察哨兵日志信息

第二步:創(chuàng)建sentinel.conf文件,也可以從redis的解壓文件夾中拷貝一份。

第三步:設(shè)置監(jiān)控的主機(jī)和上位的規(guī)則,編輯sentinel.conf,輸入 sentinel monitor itdragon-redis 127.0.0.1 6379 1 保存退出。解說(shuō):指定監(jiān)控主機(jī)的ip地址,port端口,得票數(shù)。

第四步:前端啟動(dòng)哨兵,執(zhí)行命令:./redis-sentinel sentinel.conf。

第五步:模擬主機(jī)宕機(jī),選擇6379窗口,執(zhí)行命令:shutdown。

第六步:等待從機(jī)投票,在sentinel窗口中查看打印信息。

第七步:?jiǎn)?dòng)6379服務(wù)器,

語(yǔ)法結(jié)構(gòu):sentinel monitor 自定義數(shù)據(jù)庫(kù)名 主機(jī)ip 主機(jī)port 得票數(shù)

若從機(jī)得票數(shù)大于設(shè)置值,則成為新的主機(jī)。若之前的主機(jī)恢復(fù)后,

如果哨兵也宕機(jī)了???那就多配幾個(gè)哨兵并且相互監(jiān)控。

# sentinel窗口
[root@itdragon bin]# vim sentinel.conf
sentinel monitor itdragon-redis 127.0.0.1 6379 1
[root@itdragon bin]# ./redis-sentinel sentinel.conf
......
21401:X 29 Nov 15:39:15.052 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ itdragon-redis 127.0.0.1 6380
21401:X 29 Nov 15:39:15.052 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ itdragon-redis 127.0.0.1 6380
21401:X 29 Nov 15:39:45.081 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ itdragon-redis 127.0.0.1 6380

21401:X 29 Nov 16:40:52.055 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ itdragon-redis 127.0.0.1 6380
21401:X 29 Nov 16:41:02.028 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ itdragon-redis 127.0.0.1 6380
......

# 6379端口
127.0.0.1:6379> SHUTDOWN
not connected> QUIT

# 6380端口
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=72590,lag=0
......

# 6381端口
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
......

+slave :一個(gè)新的從服務(wù)器已經(jīng)被 Sentinel 識(shí)別并關(guān)聯(lián)。

+sdown :給定的實(shí)例現(xiàn)在處于主觀下線狀態(tài)。

-sdown :給定的實(shí)例已經(jīng)不再處于主觀下線狀態(tài)。

redis主從復(fù)制的搭建步驟

redis主從復(fù)制的搭建步驟

總結(jié)

1 查看主從復(fù)制關(guān)系命令:info replication

2 設(shè)置主從關(guān)系命令:slaveof 主機(jī)ip 主機(jī)port

3 開啟哨兵模式命令:./redis-sentinel sentinel.conf

4 主從復(fù)制原則:開始是全量賦值,之后是增量賦值

5 哨兵模式三大任務(wù):監(jiān)控,提醒,自動(dòng)故障遷移

關(guān)于redis主從復(fù)制的搭建步驟就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

標(biāo)題名稱:redis主從復(fù)制的搭建步驟
轉(zhuǎn)載來(lái)源:http://bm7419.com/article16/jcejdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站用戶體驗(yàn)移動(dòng)網(wǎng)站建設(shè)、微信小程序、響應(yīng)式網(wǎng)站、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)