這篇文章將為大家詳細(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)圖:一主二仆一兵(也可以多主多仆多兵)
主從復(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)。
總結(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)