redis集群的搭建详细教程
1 Redis-cluster架構(gòu)圖
? ? ? ? ? ?
redis-cluster投票:容錯??(至少要三個才可以,才能超過半數(shù))
?
架構(gòu)細(xì)節(jié):
(1)所有的redis節(jié)點(diǎn)彼此互聯(lián)(PING-PONG機(jī)制),內(nèi)部使用二進(jìn)制協(xié)議優(yōu)化傳輸速度和帶寬.
(2)節(jié)點(diǎn)的fail是通過集群中超過半數(shù)的節(jié)點(diǎn)檢測失效時才生效.
(3)客戶端與redis節(jié)點(diǎn)直連,不需要中間proxy層.客戶端不需要連接集群所有節(jié)點(diǎn),連接集群中任何一個可用節(jié)點(diǎn)即可。
(4)redis-cluster把所有的物理節(jié)點(diǎn)映射到[0-16383]slot上,cluster?負(fù)責(zé)維護(hù)node<->slot<->value
?
Redis?集群中內(nèi)置了?16384?個哈希槽,當(dāng)需要在?Redis?集群中放置一個?key-value?時,
redis?先對?key?使用?crc16?算法算出一個結(jié)果,然后把結(jié)果對?16384?求余數(shù),
這樣每個?key?都會對應(yīng)一個編號在?0-16383?之間的哈希槽,redis?會根據(jù)節(jié)點(diǎn)數(shù)量大致
均等的將哈希槽映射到不同的節(jié)點(diǎn)
?
搭建集群,極限情況也就最多16384個節(jié)點(diǎn)。
?
2 Redis集群的搭建
Redis集群中至少應(yīng)該有3個節(jié)點(diǎn)。要保證集群得高可用,需要每個節(jié)點(diǎn)有1個備份機(jī)。
Redis集群需要6臺服務(wù)器。
搭建偽分布式??梢允褂靡慌_虛擬機(jī)允許6個redis實(shí)例。需要修改redis得端口號7001-7006
?
3? 集群搭建過程
1 實(shí)例準(zhǔn)備
?第一步:準(zhǔn)備好1臺redis服務(wù)器
【這里我使用的之前搭建好的一臺服務(wù)器】
虛擬機(jī)上面安裝Redis的方法,參照的是redis在Linux上的安裝教程:
?第二步:在/usr/local下面創(chuàng)建一個集群目錄
# mkdir /usr/local/redis-cluster第三步:拷貝已經(jīng)安裝好的redis實(shí)例到redis-cluster目錄下
?
[root@admin local]# cp -r redis/bin redis-cluster/redis01第四步:刪除拷貝的實(shí)例里面的dump.rdb 和 appendonly.aof文件。
因?yàn)楸緦?shí)例沒有啟動AOF持久化的,所以就沒有appendonly.aof文件。
只用刪除dump.rdb文件。
我們搭建集群的時候,每個節(jié)點(diǎn)應(yīng)該是一個空節(jié)點(diǎn),這里面不應(yīng)該有數(shù)據(jù),這個實(shí)例之前使用過,里面有數(shù)據(jù)。
搭建集群的時候防止出現(xiàn)問題,所以先給刪除掉,保證是一個干凈的節(jié)點(diǎn)。
[root@admin redis01]# rm -rf dump.rdb第五步:修改配置文件中的端口號
[root@admin redis01]# vim redis.conf將默認(rèn)的6379端口修改為7001
輸入wq保存并退出
第六步:修改配置文件中的啟動集群
[root@admin redis01]# vim redis.conf修改前:
修改后:
輸入wq保存并退出
?
第七步:復(fù)制第六步修改完成配置文件的redis實(shí)例5份
[root@admin redis-cluster]# cp -r redis01/ redis02 [root@admin redis-cluster]# cp -r redis01/ redis03 [root@admin redis-cluster]# cp -r redis01/ redis04 [root@admin redis-cluster]# cp -r redis01/ redis05 [root@admin redis-cluster]# cp -r redis01/ redis06?
第八步:修改redis02~redis06實(shí)例的端口號分別為7002~7006
[root@admin redis-cluster]# vim redis02/redis.conf [root@admin redis-cluster]# vim redis03/redis.conf [root@admin redis-cluster]# vim redis04/redis.conf [root@admin redis-cluster]# vim redis05/redis.conf [root@admin redis-cluster]# vim redis06/redis.conf第九步:使用批處理啟動上面的6個實(shí)例
這里也可以一個一個的啟動,只是麻煩一些。
1、首先執(zhí)行命令vim start-all.sh創(chuàng)建一個批處理文件,并編輯
[root@admin redis-cluster]# vim start-all.sh文件的內(nèi)如如下:
cd redis01 ./redis-server redis.conf cd .. cd redis02 ./redis-server redis.conf cd .. cd redis03 ./redis-server redis.conf cd .. cd redis04 ./redis-server redis.conf cd .. cd redis05 ./redis-server redis.conf cd .. cd redis06 ./redis-server redis.conf cd ..2、修改start-all.sh文件的權(quán)限,給當(dāng)前用戶所有權(quán)限
?
[root@admin redis-cluster]# chmod u+x start-all.sh3、執(zhí)行start-all.sh啟動所有的6個redis實(shí)例
[root@admin redis-cluster]# ./start-all.sh4、查看一下是否真的啟動起來了
[root@admin redis-cluster]# ps -aux | grep -i redis --color?
到這里6個節(jié)點(diǎn)全部配置好,并且啟動起來了。
?
下面就需要把集群搭建起來,也就是把這六個節(jié)點(diǎn)連到一起來。
這里我們需要使用一個工具,這個工具就在我們的redis源代碼的src目錄下面。
執(zhí)行命令切換到src目錄下:
[root@admin redis-cluster]# cd /usr/local/redis-3.0.0/src查看里面的rb文件
[root@admin src]# ll *.rb復(fù)制Ruby腳本文件redis-trib.rb到redis-cluster目錄下去
[root@admin src]# cp -r redis-trib.rb /usr/local/redis-cluster/下面簡單了解一下Ruby是什么?
?
2 集群環(huán)境的搭建
第一步:我們使用ruby腳本搭建集群,所以需要安裝ruby的運(yùn)行環(huán)境。
依次執(zhí)行下面兩條命令
# yum install ruby中間如果出現(xiàn)詢問輸入y確認(rèn)即可。
# yum install rubygems?中間如果出現(xiàn)詢問輸入y確認(rèn)即可。
第二步:安裝ruby腳本運(yùn)行使用的包
1.上傳包到Linux服務(wù)器上
?2、將其復(fù)制到/usr/local目錄下
[root@admin soft]# cp redis-3.0.0.gem /usr/local3、安裝redis-3.0.0.gem
[root@admin local]# gem install redis-3.0.0.gem這樣這個庫就安裝好了。
現(xiàn)在redis-trib.rb這個腳本就可以執(zhí)行了。
?
3 使用ruby腳本搭建集群
[root@admin redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.128:7001 192.168.25.128:7002 192.168.25.128:7003 192.168.25.128:7004 192.168.25.128:7005 192.168.25.128:70061 表示每個節(jié)點(diǎn)有一個備份機(jī)。
?因?yàn)槲覀兪窃谝慌_服務(wù)器上面演示,ip一樣只是端口不一樣。執(zhí)行的過程中有一個計算過程,算出來是6個節(jié)點(diǎn),所以集群里面有三個節(jié)點(diǎn)。
如果里面只有5個ip地址列表的話,就不是整數(shù)了,會報錯。所以這里一定要是偶數(shù)個節(jié)點(diǎn)。
?
再補(bǔ)充一下:如果我們真的是在六臺服務(wù)器上搭建集群的話,不中和這個也是一樣的。
只需要在任意一臺服務(wù)器上面執(zhí)行上面的搭建環(huán)境過程,
使用Ruby腳本搭建集群,但是特別需要注意的是:每臺
服務(wù)器上的防火墻一定要關(guān)閉。如果沒有關(guān)閉防火墻的話
在詢問是否可以的時候,輸入yes之后,會卡住Waiting
for the cluster to join......這里不動。
?
4 使用redis-cli連接集群
?連接集群我們使用redis提供的客戶端redis-cli,連接集群中的任意節(jié)點(diǎn)就可以了。
[root@admin redis-cluster]# redis01/redis-cli -p 7006 -c-c 代表連接的是redis集群。
連接從節(jié)點(diǎn)也是一樣的。
下面測試一下:
可以看到通過計算,username定位到了14315這個哈希槽,存入的是端口7003的這臺服務(wù)器。
可以看到通過計算,age定位到了741這個哈希槽,存入的是端口7001的這臺服務(wù)器。
可以看到,這樣數(shù)據(jù)就可以均勻的分布到每一臺服務(wù)器,可以實(shí)現(xiàn)每個節(jié)點(diǎn)都有一定數(shù)量的數(shù)據(jù)。
如果主節(jié)點(diǎn)掛了,從節(jié)點(diǎn)就可以頂替工作,這也就實(shí)現(xiàn)了高可用。
?
特別需要注意的是:連接集群的時候需要加上?-c?參數(shù)
轉(zhuǎn)載于:https://www.cnblogs.com/lywJ/p/10710878.html
總結(jié)
以上是生活随笔為你收集整理的redis集群的搭建详细教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: day24 反射\元类
- 下一篇: H5常用拖放事件解析