首頁  >  文章  >  後端開發  >  Redis集群的三種模式是什麼?

Redis集群的三種模式是什麼?

巴扎黑
巴扎黑原創
2017-09-16 10:01:2716943瀏覽

Redis集群的三種模式是什麼?

Redis叢集的三種模式

一、主從模式

透過持久化功能,Redis保證了即使在伺服器重啟的情況下也不會損失(或少量損失)數據,因為持久化會把內存中數據保存到硬碟上,重啟會從硬碟上載入資料。

但是因為資料是儲存在一台伺服器上的,如果這台伺服器出現硬碟故障等問題,也會導致資料遺失。為了避免單點故障,通常的做法是將資料庫複製多個副本以部署在不同的伺服器上,這樣即使有一台伺服器發生故障,其他伺服器仍然可以繼續提供服務。為此, Redis 提供了複製(replication)功能,可以實現當一台資料庫中的資料更新後,自動將更新的資料同步到其他資料庫上。

在複製的概念中,資料庫分為兩類,一類是主資料庫(master),另一類是從資料庫(slave)。主資料庫可以進行讀寫操作,當寫入操作導致資料變更時會自動將資料同步給從資料庫。而從資料庫一般是唯讀的,並接受主資料庫同步過來的資料。一個主資料庫可以擁有多個從資料庫,而一個從資料庫只能擁有一個主資料庫。

主從資料庫的配置

主資料庫不用配置,從redis的conf檔中可以載入從資料庫的信息,也可以在啟動時,使用redis- server --port 6380 --slaveof 127.0.0.1 6379

從資料庫一般是唯讀,可以改為可寫,但寫入的資料很容易被主同步沒,所以還是只讀就可以。

也可以在運作時使用slaveof ip port指令,停止原來的主,切換成剛剛設定的主slaveof no one會把自己變成主

複製原理

當從資料庫啟動時,會向主資料庫傳送sync指令,主資料庫接收到sync後開始在背景儲存快照rdb,在儲存快照期間收到的指令快取起來,當快照完成時,主資料庫會將快照和快取的命令一塊發送給從**。複製初始化結束。

之後,主每收到1個指令就同步傳送給從。

當出現斷開重連後,2.8之後的版本會將斷線期間的指令傳給重資料庫。增量複製

主從複製是樂觀複製,當客戶端發送寫執行給主,主執行完立即將結果返回客戶端,並異步的把命令發送給從,從而不影響性能。也可以設定至少同步給多少個從主才可寫。

無硬碟複製:如果硬碟效率低將會影響複製效能,2.8之後可以設定無硬碟複製,repl-diskless-sync yes

二、哨兵

當主資料庫遇到異常中斷服務後,開發者可以透過手動的方式選擇一個從資料庫來升格為主資料庫,以使得系統能夠繼續提供服務。然而整個過程相對麻煩且需要人工介入,難以自動化。 為此,Redis 2.8中提供了哨兵工具來實現自動化的系統監控和故障復原功能。

哨兵的作用是監控redis主、從​​資料庫是否正常運行,主出現故障自動將從資料庫轉換為主資料庫。

範例:

1主2從1哨兵

redis-server --port 6379 

redis-server --port 6380 - -slaveof 192.168.0.167 6379 

redis-server --port 6381 --slaveof 192.168.0.167 6379

哨兵設定檔sentinel.conf #.167 6379

哨兵設定檔sentinel.conf ##1670.121968.1969.5999.master 6379  1

這裡的1代表1個哨兵

註:

設定哨兵監控一個系統時,只需要設定其監控主資料庫即可,哨兵會自動發現所有複製該主資料庫的從資料庫

這樣哨兵就能監控主6379和從6380、6381,一旦6379掛掉,哨兵就會在2個從中選擇一個作為主,根據優先級選,如果一樣就選個id小的,當6379再起來就作為從存在。

三、集群(cluster-enable)

#使用集群,只需要將每個資料庫節點的cluster-enable配置打開即可。每個叢集中至少需要三個主資料庫才能正常運作。

即使使用哨兵,redis每個實例也是全量存儲,每個redis存儲的內容都是完整的數據,浪費內存且有木桶效應。為了最大化利用內存,可以採用集群,就是分佈式儲存。即每台redis儲存不同的內容。

叢集至少需要3主3從,且每個實例使用不同的設定文件,主從來不用配置,叢集會自己選。

修改每個實例的設定檔:

## cluster-enabled yes  --開啟叢集

 cluster-config-file nodes-6382.conf --集群設定檔名,

每個實例配置的要不同,redis會根據檔案名稱自動新建

叢集的運作

redis安裝目錄的src執行./redis-trib.rb create --replicas 1 

127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 

127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385

#ookPet;
#更多相關知識,請造訪 

PHP中文網

! !

以上是Redis集群的三種模式是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn