當前位置:
首頁 > 最新 > Redis集群配置詳解

Redis集群配置詳解

【原創聲明】

JAVA實戰技術是由AAA軟體教育資深講師陳建老師創建,任何單位或個人轉載及使用,須徵得AAA軟體教育或陳建老師本人同意,否則視為剽竊侵權,後果自負!


01.配置redis集群

1.1. 應用場景

當主備複製場景,無法滿足主機的單點故障時,需要引入集群配置。

1.2. 基本原理

哨兵選舉機制,如果有半數節點發現某個異常節點,共同決定改異常節點的狀態,如果該節點是主節點,對應的備節點自動頂替為主節點。Sentinel(哨兵)是Redis 的高可用性解決方案:由一個或多個Sentinel 實例 組成的Sentinel 系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器。

1.3. 詳細配置

1) 步驟一,規劃網路。

用一台虛擬機模擬6個節點,一台機器6個節點,創建出3 master、3 salve 環境。虛擬機是 CentOS6.9 ,ip地址192.168.153.164

2) 步驟二,下載redis的源碼包

wget http://download.redis.io/releases/redis-3.2.11.tar.gz將包中的 redis-trib.rb 複製到 /usr/local/bin 目錄下

3) 步驟三, 創建 Redis 節點

首先在 192.168.153.164 機器上 /usr/local 目錄下創建 redis_cluster 目錄;

mkdir redis_cluster

在 redis_cluster 目錄下,創建名為7001、7002,7003、7004、7005,7006的目錄,

mkdir 7001 7002 7003 7004 7005 7006

並將 redis.conf 拷貝到這三個目錄中,拷貝之前,先修改redis.conf

redis.conf文件按照下面8項修改內容,然後分別拷貝到6個不同的目錄7001,7002,7003,7004,7005,7006中。

port 7000 //埠7000,7002,7003

bind 本機ip //默認ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則創建集群時無法訪問對應的埠,無法創建集群

daemonize yes //redis後台運行

pidfile /var/run/redis_7000.pid //pidfile文件對應7000,7001,7002

cluster-enabled yes //開啟集群 把注釋#去掉

cluster-config-file nodes_7000.conf //集群的配置 配置文件首次啟動自動生成 7000,7001,7002

cluster-node-timeout 15000 //請求超時 默認15秒,可自行設置

appendonly yes //aof日誌開啟 有需要就開啟,它會每次寫操作都記錄一條日誌

4) 步驟四,啟動各個節點

redis-server /usr/local/redis_cluster/7001/redis.conf

redis-server /usr/local/redis_cluster/7002/redis.conf

redis-server /usr/local/redis_cluster/7003/redis.conf

redis-server /usr/local/redis_cluster/7004/redis.conf

redis-server /usr/local/redis_cluster/7005/redis.conf

redis-server /usr/local/redis_cluster/7006/redis.conf

檢查節點啟動狀態

5) 步驟五,創建集群

創建集群的命令:

/usr/local/bin/redis-trib.rb create --replicas 1 192.168.153.164:7001 192.168.153.164:7002 192.168.153.164:7003 192.168.153.164:7004 192.168.153.164:7005 192.168.153.164:7006

此錯誤是操作系統沒有安裝ruby

解決方法:安裝ruby

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis 報錯

##升級ruby

gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

curl -L get.rvm.io | bash -s stable

source /usr/local/rvm/scripts/rvm

rvm list known

rvm install 2.3.3

rvm use 2.3.3

rvm use 2.3.3 --default

ruby --version

再次執行,成功!

gem install redis

6) 驗證集群

redis-cli -c -h 192.168.153.164 -p 7001 其中-c表示以集群方式連接redis,-h指定ip地址,-p指定埠號

保存數據,chenjian保存到12007的槽位,12007所在的節點是7003埠對應的節點。

在其他節點,例如7006上獲取chenjian。

驗證主節點異常時,備節點自動頂替主節點

殺死7002對應的進程,即讓主節點7002異常,檢查7005是否頂替成為主節點。

1.4. 集群的特點

(1)所有的redis 節點彼此互聯(PING-PONG 機制),內部使用二進位協議優化傳輸速度和帶寬;

(2)節點的fail 是通過集群中超過半數的節點檢測失效時才生效;

(3)客戶端與redis 節點直連,不需要中間proxy 層。客戶端不需要連接集群所有節點,連接集群中任何一 個可用節點即可;

(4)redis-cluster把所有的物理節點映射到[0-16383]個slot(哈希槽)上,cluster 負責維護 nodeslotvalue 。

1.5. 集群選舉容錯

(1):什麼時候整個集群不可用(cluster_state:fail)?

A:如果集群任意master 掛掉,且當前master 沒有slave。集群進入fail 狀態,也可以理解成集群的

slot 映射[0-16383]不完整時進入fail 狀態。 ps : redis-3.0.0.rc1 加入 cluster-require-full-

coverage 參數,默認關閉,打開集群兼容部分失敗;

B:如果集群超過半數以上master 掛掉,無論是否有slave集群進入fail 狀態。ps:當集群不可用時,

所有對集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AAA軟體教育 的精彩文章:

TAG:AAA軟體教育 |