中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis主從復制的搭建步驟

發布時間:2020-06-23 23:12:40 來源:億速云 閱讀:240 作者:元一 欄目:關系型數據庫

這篇文章將為大家詳細講解有關redis主從復制的搭建步驟,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

主從復制的原理

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

來源:簡書主從復制的作用

主從復制,讀寫分離,容災恢復。一臺主機負責寫入數據,多臺從機負責備份數據。在高并發的場景下,即便是主機掛了,可以用從機代替主機繼續工作,避免單點故障導致系統性能問題。讀寫分離,讓讀多寫少的應用性能更佳。

主從復制架構

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.

確實是簡單的,一個命令: slaveof 主機ip 主機port ,就可以確定主從關系;一個命令:./redis-sentinel sentinel.conf ,就可以開啟哨兵監控。

搭建是簡單的,維護是痛苦的。在高并發場景下,會有很多想不到的問題出現。我們只有清楚復制的原理,熟悉主機,從機宕機后的變化。才能很好的跨過這些坑。下面的每一個步驟都是一個小的知識點,小的場景。每做完一個步驟,你都會收獲到知識。

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

redis主從復制的搭建步驟

主從復制的缺點

Redis的主從復制最大的缺點就是延遲,主機負責寫,從機負責備份,這個過程有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,從機器數量的增加也會使這個問題更加嚴重。

搭建前的準備工作

因為窮,筆者選擇用一臺服務器模擬三臺主機。和生產環境的區別僅僅是ip地址和port端口不同。

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

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

第三步:分別打開三個窗口模擬三臺服務器,開啟redis服務。

[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)

主從復制搭建步驟

基礎搭建

第一步:查詢主從復制信息,分別選擇三個端口,執行命令: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
......

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

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

127.0.0.1:6379> set k1 v1
OK

第三步:設置主從關系,分別選擇6380端口和6381端口,執行命令: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
......

主從關系發生了變化:

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

6379端口打印的信息: role:master 主機;connected_slaves:2 連了兩個從機; slaveX : ID、IP 地址、端口號、連接狀態、從庫信息

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

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

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

兩個端口都可以打印k1的值,說明在建立主從關系時,從機便擁有了主機的數據。

第五步:增量復制,選擇6379端口,執行命令:set k2 v2。然后分別選擇6380端口和6381端口,執行命令: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"

兩個端口都可以打印k2的值,說明建立主從關系后,主機新增的數據都會復制給從機。

第六步:主從的讀寫分離,選擇6380端口,執行命令: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

從機6380寫入失敗,是因為讀寫分離的機制。

第七步:主機宕機的情況,選擇6379端口,執行命令: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
......

從打印的結果得知:從機原地待命

第八步:主機宕機后恢復,選擇6379端口,重啟Redis服務,執行命令:set k4 v4。分別選擇6380端口和6381端口,執行命令: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"

主機重啟后,一切正常。

第九步:從機宕機后恢復,選擇6380端口,執行命令:shutdown。選擇6379端口,執行命令:set k5 v5。選擇6380端口,重啟Redis服務后執行命令: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

從機宕機后,一切正常。筆者用的是redis.4.0.2版本的。看過其他教程,從機宕機恢復后,只能同步主機新增數據,也就是k5是沒有值的,可是筆者反復試過,均有值。留著備忘!

第十步:去中性化思想,選擇6380端口,執行命令:SLAVEOF 127.0.0.1 6381。選擇6381端口,執行命令: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的主機,是6379的從機。在Redis眼中,6381依舊是從機。一臺主機配多臺從機,一臺從機在配多臺從機,從而實現了龐大的集群架構。同時也減輕了一臺主機的壓力,缺點是增加了服務器間的延遲。

從機上位

模擬主機宕機,人為手動慫恿從機上位的場景。先將三個端口恢復成6379是主機,6380和6381是從機的架構。

從機上位步驟:

第一步:模擬主機宕機,選擇6379端口,執行命令:shutdown

第二步:斷開主從關系,選擇6380端口,執行命令:SLAVEOF no one

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

第四步:之前主機恢復,選擇6379端口,重啟Redis服務,執行命令:info replication

在6379主機宕機后,6380從機斷開主從關系,6381開始還在原地待命,后來投靠6380主機后,6379主機回來了當它已是孤寡老人,空頭司令。

# 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"

哨兵監控

從機上位是需要人為控制,在生產環境中是不可取的,不可能有人實時盯著它,也不可能大半夜起床重新搭建主從關系。在這樣的需求促使下,哨兵模式來了!!!

哨兵有三大任務:

1 監控:哨兵會不斷地檢查你的Master和Slave是否運作正常

2 提醒:當被監控的某個Redis出現問題時, 哨兵可以通過API向管理員或者其他應用程序發送通知

3 故障遷移:若一臺主機出現問題時,哨兵會自動將該主機下的某一個從機設置為新的主機,并讓其他從機和新主機建立主從關系。

哨兵搭建步驟:

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

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

第三步:設置監控的主機和上位的規則,編輯sentinel.conf,輸入 sentinel monitor itdragon-redis 127.0.0.1 6379 1 保存退出。解說:指定監控主機的ip地址,port端口,得票數。

第四步:前端啟動哨兵,執行命令:./redis-sentinel sentinel.conf。

第五步:模擬主機宕機,選擇6379窗口,執行命令:shutdown。

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

第七步:啟動6379服務器,

語法結構:sentinel monitor 自定義數據庫名 主機ip 主機port 得票數

若從機得票數大于設置值,則成為新的主機。若之前的主機恢復后,

如果哨兵也宕機了???那就多配幾個哨兵并且相互監控。

# 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 :一個新的從服務器已經被 Sentinel 識別并關聯。

+sdown :給定的實例現在處于主觀下線狀態。

-sdown :給定的實例已經不再處于主觀下線狀態。

redis主從復制的搭建步驟

redis主從復制的搭建步驟

總結

1 查看主從復制關系命令:info replication

2 設置主從關系命令:slaveof 主機ip 主機port

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

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

5 哨兵模式三大任務:監控,提醒,自動故障遷移

關于redis主從復制的搭建步驟就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

县级市| 阿拉善右旗| 都兰县| 临武县| 邯郸市| 大城县| 铁岭县| 秦皇岛市| 广河县| 巴塘县| 潍坊市| 鄂托克旗| 年辖:市辖区| 肃北| 依安县| 遂宁市| 兴化市| 丹寨县| 东乡族自治县| 玛曲县| 临江市| 祁阳县| 安龙县| 昭通市| 交口县| 中江县| 莆田市| 汉寿县| 阿拉善左旗| 多伦县| 西华县| 兴山县| 沂水县| 石柱| 苗栗市| 鄂托克前旗| 轮台县| 南充市| 乌恰县| 六枝特区| 海伦市|