新聞中心

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比巧家網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式巧家網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋巧家地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
主從模式解析
主從模式的結(jié)構(gòu)圖如下:
圖1:Redis 主從模式
如圖 1 所示,Redis 主機會一直將自己的數(shù)據(jù)復(fù)制給 Redis 從機,從而實現(xiàn)主從同步。在這個過程中,只有 master 主機可執(zhí)行寫命令,其他 salve 從機只能只能執(zhí)行讀命令,這種讀寫分離的模式可以大大減輕 Redis 主機的數(shù)據(jù)讀取壓力,從而提高了Redis 的效率,并同時提供了多個數(shù)據(jù)備份。主從模式是搭建 Redis Cluster 集群最簡單的一種方式。
主從模式實現(xiàn)
Redis 提供了兩種實現(xiàn)主從模式的方法,下面進行逐一介紹。為了方便演示,我們只從一臺機器上搭建主從模式。
1) 使用命令實現(xiàn)
使用命令在服務(wù)端搭建主從模式,其語法格式如下:
redis-server --port--slaveof
執(zhí)行以下命令:
#開啟開啟一個port為6300的從機,它依賴的主機port=6379 C:\Users\Administrator> redis-server --port 6300 --slaveof 127.0.0.1 6379
輸出結(jié)果如下圖:
圖2:Redis 主從模式
接下來開啟客戶端,并執(zhí)行查詢命令,如下所示:
C:\Users\Administrator>redis-cli -p 6300 127.0.0.1:6300> get name "jack" 127.0.0.1:6300> get website "www.biancheng.net" #不能執(zhí)行寫命令 127.0.0.1:6300> set myname BangDe (error) READONLY You can't write against a read only slave. 127.0.0.1:6300> keys * 1) "myset:__rand_int__" 2) "ID" 3) "title" 4) "course2" 5) "website" 6) "age" 7) "user:2" 8) "salary" 9) "mystream" 10) "key:__rand_int__" 11) "user:uv:2021011308" ....
注意:此時 port=6300 的服務(wù)端界面不能關(guān)閉。從上述命令可以看出,port =6300 的從機,完全備份了主機的數(shù)據(jù),它可以執(zhí)行查詢命令,但是不能執(zhí)行寫入命令。
如果你注意觀察服務(wù)端的話,您會看到以下提示:
[18160] 20 Jan 17:40:34.101 # Server initialized #服務(wù)初始化 [18160] 20 Jan 17:40:34.108 * Ready to accept connections #準(zhǔn)備連接 [18160] 20 Jan 17:40:34.108 * Connecting to MASTER 127.0.0.1:6379 #連接到主服務(wù)器 [18160] 20 Jan 17:40:34.109 * MASTER <-> REPLICA sync started #啟動副本同步 [18160] 20 Jan 17:40:34.110 * Non blocking connect for SYNC fired the event.#自動觸發(fā)SYNC命令,請求同步數(shù)據(jù) [18160] 20 Jan 17:40:34.110 * Master replied to PING, replication can continue... [18160] 20 Jan 17:40:34.112 * Partial resynchronization not possible (no cached master) [18160] 20 Jan 17:40:34.431 * Full resync from master: 6eb220706f73107990c2b886dbc2c12a8d0d9d05:0 [18160] 20 Jan 17:40:34.857 * MASTER <-> REPLICA sync: receiving 6916 bytes from master #從主機接受了數(shù)據(jù),并將其存在于磁盤 [18160] 20 Jan 17:40:34.874 * MASTER <-> REPLICA sync: Flushing old data #清空原有數(shù)據(jù) [18160] 20 Jan 17:40:34.874 * MASTER <-> REPLICA sync: Loading DB in memory #將磁盤中數(shù)據(jù)載入內(nèi)存 [18160] 20 Jan 17:40:34.879 * MASTER <-> REPLICA sync: Finished with success #同步數(shù)據(jù)完成
可以看出主從模式下,數(shù)據(jù)的同步是自動完成的,這個數(shù)據(jù)同步的過程,又稱為
全量復(fù)制。
您也可以使用下面的命令來創(chuàng)建主從模式。啟動一個服務(wù)端,并指定端口號:
#指定端口號為63001,不要關(guān)閉 redis-server --port 63001
打開一個客戶端,連接服務(wù)器,如下所示:
#連接port=63001的服務(wù)器 C:\Users\Administrator>redis-cli -p 63001 #現(xiàn)在處于主機模式下,所以允許讀寫數(shù)據(jù) 127.0.0.1:63001> keys * 1) "FANS" 2) "user:login" 3) "course2" 4) "1" 5) "age" 6) "ID" 7) "title" 8) "counter:__rand_int__" 9) "key:__rand_int__" 10) "user:3" 11) "user:2" ... 127.0.0.1:63001> set myname 123456 OK #將當(dāng)前服務(wù)器設(shè)置成從服務(wù)器,從屬于6379 127.0.0.1:63001> SLAVEOF 127.0.0.1 6379 OK #寫入命令執(zhí)行失敗 127.0.0.1:63001> SET mywebsite www.biancheng.net (error) READONLY You can't write against a read only replica. #再次切換為主機模式,執(zhí)行下面命令 127.0.0.1:63001> SLAVEOF no one OK #寫入成功 127.0.0.1:63001> SET mywebsite www.biancheng.net OK
上述示例中,主要使用了兩個命令,如下所示:
slaveof IP PORT #設(shè)置從服務(wù)器 slaveof no one #使服務(wù)器切換為獨立主機
2) 修改配置文件實現(xiàn)
每個 Redis 服務(wù)器都有一個與其對應(yīng)的配置文件,通過修改該配置文件也可以實現(xiàn)主從模式,下面在 Ubuntu 環(huán)境下對該方法進行演練。
新建 redis_6302.conf 文件,并添加以下配置信息:
slaveof 127.0.0.1 6379 #指定主機的ip與port port 6302 #指定從機的端口
啟動 Redis 服務(wù)器,執(zhí)行以下命令:
$ redis-server redis_6302.conf
客戶端連接服務(wù)器,并進行簡單測試。執(zhí)行以下命令:
$ redis-cli -p 6302 127.0.0.1:6300> HSET user:username biangcheng #寫入失敗 (error) READONLY You can't write against a read only slave.
提示:通過命令搭建主從模式,簡單又快捷,所以不建議您使用修改配置文件的方法。
主從模式不足
主從模式并不完美,它也存在許多不足之處,下面做了簡單地總結(jié):
- 1) Redis 主從模式不具備自動容錯和恢復(fù)功能,如果主節(jié)點宕機,Redis 集群將無法工作,此時需要人為干預(yù),將從節(jié)點提升為主節(jié)點。
- 2) 如果主機宕機前有一部分數(shù)據(jù)未能及時同步到從機,即使切換主機后也會造成數(shù)據(jù)不一致的問題,從而降低了系統(tǒng)的可用性。
- 3) 因為只有一個主節(jié)點,所以其寫入能力和存儲能力都受到一定程度地限制。
- 4) 在進行數(shù)據(jù)全量同步時,若同步的數(shù)據(jù)量較大可能會造卡頓的現(xiàn)象。
雖然主從模式存在上述不足,但它仍是實現(xiàn)分布式集群的基礎(chǔ),后續(xù)將介紹《Redis集群:Sentinel哨兵模式》,它同樣依賴于主從模式實現(xiàn)。
分享文章:RedisCluster主從模式詳解
當(dāng)前地址:http://www.dlmjj.cn/article/coidejp.html


咨詢
建站咨詢
