一帆锋、Redis Cluster模式
redis集群并沒(méi)有使用一致性hash算法而引入了哈希槽概念,Redis 集群有16384個(gè)哈希槽,每個(gè)key通過(guò)CRC16校驗(yàn)后對(duì)16384取模來(lái)決定放置哪個(gè)槽.集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分hash槽.也就是說(shuō)如果key是不變的對(duì)應(yīng)的slot也是不變的。
Redis3.0版本之后支持Cluster.
- 目前redis支持的cluster特性:
1):節(jié)點(diǎn)自動(dòng)發(fā)現(xiàn)
2):slave->master 選舉,集群容錯(cuò)
3):Hot resharding:在線分片
4):進(jìn)群管理:cluster xxx
5):基于配置(nodes-port.conf)的集群管理
6):ASK 轉(zhuǎn)向/MOVED 轉(zhuǎn)向機(jī)制.
redis集群采用P2P模式禽额,是完全去中心化的锯厢,不存在中心節(jié)點(diǎn)或者代理節(jié)點(diǎn);
redis集群是沒(méi)有統(tǒng)一的入口的脯倒,客戶端(client)連接集群的時(shí)候連接集群中的任意節(jié)點(diǎn)(node)即可实辑,集群內(nèi)部的節(jié)點(diǎn)是相互通信的(PING-PONG機(jī)制),每個(gè)節(jié)點(diǎn)都是一個(gè)redis實(shí)例盔憨;
為了實(shí)現(xiàn)集群的高可用徙菠,即判斷節(jié)點(diǎn)是否健康(能否正常使用),redis-cluster有這么一個(gè)投票容錯(cuò)機(jī)制:如果集群中超過(guò)半數(shù)的節(jié)點(diǎn)投票認(rèn)為某個(gè)節(jié)點(diǎn)掛了郁岩,那么這個(gè)節(jié)點(diǎn)就掛了(fail)婿奔。這是判斷節(jié)點(diǎn)是否掛了的方法; - 集群搭建需要的環(huán)境
Redis集群至少需要3個(gè)節(jié)點(diǎn)问慎,因?yàn)橥镀比蒎e(cuò)機(jī)制要求超過(guò)半數(shù)節(jié)點(diǎn)認(rèn)為某個(gè)節(jié)點(diǎn)掛了該節(jié)點(diǎn)才是掛了萍摊,所以2個(gè)節(jié)點(diǎn)無(wú)法構(gòu)成集群。
要保證集群的高可用如叼,需要每個(gè)節(jié)點(diǎn)都有從節(jié)點(diǎn)冰木,也就是備份節(jié)點(diǎn),所以Redis集群至少需要6臺(tái)服務(wù)器笼恰。
二踊沸、集群安裝
搭建 Redis集群,三個(gè)主節(jié)點(diǎn)社证,三個(gè)從節(jié)點(diǎn)逼龟,多主節(jié)點(diǎn)為了分布集群,從節(jié)點(diǎn)是為了高可用性追葡。
安裝redis:
二腺律、集群配置(Windows環(huán)境)
修改每臺(tái)redis.windows.conf,修改里面的端口號(hào)奕短,以及集群的配置
redis.windows.conf
# 修改 79行
port 6380
# 添加 707行 啟用集群
cluster-enabled yes
# 添加 715行 配置每個(gè)節(jié)點(diǎn)的配置文件,可以以端口號(hào)為名稱
cluster-config-file nodes.conf
# 添加 722行
cluster-node-timeout 15000
# 修改 581行 啟動(dòng)AOF增量持久化策略
appendonly yes
所有文件除端口號(hào)不同外匀钧,其它配置相同翎碑。
在每個(gè)目錄下面新建一個(gè)bat腳本,用于啟動(dòng)每臺(tái)redis服務(wù):
start-server.bat 內(nèi)容:
redis-server redis.windows.conf
三之斯、安裝Ruby
- 安裝Ruby
Redis 的集群是用Ruby腳本編寫(xiě)日杈,所以系統(tǒng)需要有 Ruby 環(huán)境。
https://rubyinstaller.org/downloads/
下載
安裝吊圾,下面紅框標(biāo)記的地方必選达椰。
驗(yàn)證:打開(kāi)cmd窗口,輸入ruby –version出現(xiàn)版本號(hào) 表示安裝成功
- 安裝redis的ruby驅(qū)動(dòng)rubygems
地址:https://rubygems.org/pages/download
rubygems
解壓安裝:
解壓到6380文件夾下面项乒。
進(jìn)入rubygems-3.0.3目錄下面執(zhí)行cmd命令:ruby setup.rb
D:\6380\rubygems-3.0.3>ruby setup.rb
-
切換到6380目錄下面啰劲,執(zhí)行命令gem install redis
安裝
四、啟動(dòng)集群
-
進(jìn)入每個(gè)端口的文件夾檀何,執(zhí)行start-server.bat文件蝇裤,啟動(dòng)每個(gè)節(jié)點(diǎn)的服務(wù)
啟動(dòng)6380
其它如同。
安裝集群腳本redis-trib
下載:
https://github.com/MicrosoftArchive/redis/releases
- 在當(dāng)前目錄執(zhí)行以下命令
ruby 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
--replicas 1 表示 自動(dòng)為每一個(gè)master節(jié)點(diǎn)分配一個(gè)slave節(jié)點(diǎn) 上面有6個(gè)節(jié)點(diǎn)频鉴,程序會(huì)按照一定規(guī)則生成 3個(gè)master(主)3個(gè)slave(從)栓辜。
注:如果出現(xiàn)Node is not empty,先清空所有端口目錄下面的nodes.conf和dump.rdb文件垛孔,
重啟所有Redis藕甩,然后再執(zhí)行上面的命令。
- 驗(yàn)證集群是否啟動(dòng)成功
D:\6380>redis-cli -c -p 6380
127.0.0.1:6380> cluster info
五周荐、常見(jiàn)問(wèn)題:
-
一直等待 Waiting for the cluster to join 很久都沒(méi)有反應(yīng)
等待
解決方案:
1:進(jìn)入各個(gè)節(jié)點(diǎn)的redis的rdb文件保存位置
刪除rdb持久化文件和nodes.conf文件
2:關(guān)閉所有redis示例
3:?jiǎn)?dòng)redis
4:用redis-trib.rb創(chuàng)建集群查看是否成功