由于公司項目使用的架構(gòu)不得不使用redis 集群慢味,但公司的網(wǎng)絡(luò)又差的讓人崩潰场梆,所以決定搭建一套本地環(huán)境,共開發(fā)使用纯路;
本文側(cè)重點主要在于如何搭建redis集群(cluster模式) 或油,看完之后,即可隨意搭建N主N從的Cluster模式(最低3主)驰唬。如果不是非必須顶岸,還是建議在Linux上搭建redis 集群,windows 上某些操作還是挺受限制的定嗓,倒是不影響使用。
一萍桌、簡單介紹
1宵溅,Redis集群分為三種模式,下列順序由簡單到復(fù)雜
1上炎,主從模式 `redis實例架構(gòu):一主多從`
2恃逻,哨兵模式(sentinel模式) `建立在主從模式基礎(chǔ)上,redis實例架構(gòu):一主多從多哨兵,哨兵的作用是監(jiān)聽主庫掛掉之后藕施,會選舉一個從庫提升為主庫寇损,從而做到高可用,所以哨兵redis實例建議不要與 主庫實例與從庫實例在一臺服務(wù)器上`
3裳食,cluster模式矛市,`也就是本文主要介紹的,redis實例架構(gòu):N主N從,(最低三主)比如:3主0從(3臺redis 實例)诲祸,3主3從(6臺redis實例)浊吏,本文介紹3主0從而昨,雖然意義不大,但是夠用就好找田,當然你可以搭建30主60從(90個redis 實例而已)`
2歌憨,redis集群的三種模式最初目標都是一致的,無論哪種模式墩衙,首先確定需要幾個redis 實例务嫡,就先啟動幾個redis 實例,啟動過程無非就是每個實例與每個實例的配置(redis.conf)不同罷了漆改,比如:端口肯定不能相同心铃;當然啟動時必須要指定當前實例對應(yīng)的配置;由于cluster模式solt槽默認總共為16383籽懦,如果選擇3主的話于个,在創(chuàng)建集群的時候?qū)?6383 平均分配給這三個redis 實例,在每次添加key是暮顺,會將key進行hash 算法之后的值對16383取余厅篓,再確定存儲在哪個redis 實例之上。
本文不做過多的闡述捶码,redis詳解請點擊這里:https://blog.csdn.net/miss1181248983/article/details/90056960
二羽氮、實戰(zhàn)
1, 安裝包準備
ps: ruby的版本與rubygems 的版本應(yīng)大致保持一致惫恼,不要相差太大档押,本文采用ruby 2.7 ,rubygems 2.6,是沒有問題的祈纯,相差過大可能會引起下面安裝 ruby連接redis驅(qū)動失敗 等問題令宿,自行下載安裝包的同學(xué)請注意!
1腕窥,下載windows版本的Redis(本文使用的 redis3.2.100粒没,截至20210804最新版)
若您選擇在github上下載,也需要將redis源碼下載一份簇爆,由于創(chuàng)建集群使用的一個ruby腳本在redis源碼中(腳本的名字叫做redis-trib.rb)癞松,在redis安裝包中沒有。不過在百度網(wǎng)盤與藍奏云的安裝包里已經(jīng)已經(jīng)放了redis-trib.rb 腳本入蛆;
github下載地址:https://github.com/MSOpenTech/redis/tags
百度網(wǎng)盤:https://pan.baidu.com/s/1ewi_yAZ3xVYDafmoZnBP3A 提取碼: tafn
藍奏云:https://wwe.lanzoui.com/iwjqIsa4gle 密碼:0707
2响蓉,下載 Ruby
由于創(chuàng)建集群需要使用一個ruby腳本(指的就是上面所說的redis源碼中存放的ruby腳本),所以需要下載ruby來執(zhí)行這個腳本哨毁,這也就是windows目前 創(chuàng)建集群的一個弊端枫甲,在linux的redis 5.0之后的版本已經(jīng)支持 使用redis-cli的方式創(chuàng)建集群了,目前windows還不支持
官網(wǎng)下載:https://rubyinstaller.org/downloads/archives/
百度網(wǎng)盤:https://pan.baidu.com/s/1-q0tJee7QGLXBFT_UvtYTQ 提取碼: 4ibz
藍奏云:https://wwe.lanzoui.com/izWMzsa4bfi 密碼:0707
3,下載 rubygems (這個工具是用來安裝 《ruby連接redis 的一個驅(qū)動》)
官網(wǎng)下載:https://rubygems.org/pages/download
百度網(wǎng)盤:https://pan.baidu.com/s/1XMbTPf3Dmw-zmdu3ZCc8WA 提取碼: wpzs
藍奏云:https://wwe.lanzoui.com/iIHUjsa4b3g 密碼:0707
2, 安裝并啟動
1言秸,redis 安裝
將下載的redis安裝包 解壓到你需要安裝的目錄即可软能,便可以啟動redis實例了,我的是F盤redis_cluster/bin目錄举畸,如下圖:
2查排,ruby 安裝
將下載的ruby 安裝包解壓到你想安裝的目錄即可;我的F盤根目錄抄沮,如下圖:
3跋核,rubygems 安裝
1,將下載的rubygems 安裝包解壓到你想安裝的目錄叛买;我的F盤根目錄砂代,如下圖
2,打開dos窗口(不知道如何打開率挣,百度搜一下)刻伊,進入到rubygems的安裝目錄下,執(zhí)行 ruby setup.rb,如下圖
4椒功,安裝ruby 連接的redis 驅(qū)動
打開dos窗口捶箱,進入到ruby安裝目錄的bin 目錄下,執(zhí)行 gem install redis动漾,出現(xiàn)windows 安全中心警報丁屎,允許訪問即可,如下圖:
5旱眯,啟動全部redis 實例
本文演示創(chuàng)建3主架構(gòu)的集群晨川,我就只啟動3個redis 實例即可,啟動幾個redis實例删豺,就需要幾個配置文件共虑,你們想多創(chuàng)建幾個也可以,大同小異呀页;
1, 創(chuàng)建3個redis.conf配置文件
ps 配置中#號開頭的為注釋
1妈拌、redis_6301.conf
#綁定的ip,在連接是redis 實例只能使用 該ip,連接,若不是只有自己使用赔桌,建議不配置此選項 比如:redis-cli -h 127.0.0.1
#bind 127.0.0.1
#端口號
port 6301
# 日志目錄供炎,注意自己日志放在什么目錄下渴逻,本文采取的是相對路徑(相對于在哪層目錄下執(zhí)行啟動redis實例 的命令)
logfile "logs\\redis_6301.log"
# 數(shù)據(jù)目錄 注意自己數(shù)據(jù)放在什么目錄下疾党,找不到該目錄會啟動失敗
dir "data\\redis_6301\\"
# 保護模式關(guān)閉,如果在未設(shè)置密碼的情況下惨奕,必須關(guān)閉保護模式雪位,集群才可以正常使用
protected-mode no
# 訪問主庫時的密碼
#masterauth 123456
# redis 實例連接密碼
#requirepass
#開啟進群
cluster-enabled yes
# 集群節(jié)點配置
cluster-config-file nodes_6301.conf
# redis 節(jié)點超時 15s
cluster-node-timeout 15000
# 開啟aof 持久化
appendonly yes
2、redis_6302.conf
#bind 127.0.0.1
port 6302
logfile "logs\\redis_6302.log"
dir "data\\redis_6302\\"
protected-mode no
#masterauth 123456
#requirepass
appendonly yes
cluster-enabled yes
cluster-config-file nodes_6302.conf
cluster-node-timeout 15000
3梨撞、redis_6303.conf
#bind 127.0.0.1
port 6303
logfile "logs\\redis_6303.log"
dir "data\\redis_6303\\"
protected-mode no
#masterauth 123456
#requirepass
appendonly yes
cluster-enabled yes
cluster-config-file nodes_6303.conf
cluster-node-timeout 15000
2雹洗、啟動三個redis 實例
ps 啟動之前香罐,展示一下我當前的redis_cluster 安裝目錄結(jié)構(gòu),logs目錄下為空时肿,bin目錄下為 上圖 redis 安裝目錄.png ,注意觀察下圖中的路徑:
打開dos 窗口庇茫,進入redis 根目錄下 ,依次執(zhí)行以下命令:
bin\redis-server.exe conf\redis_6301.conf
bin\redis-server.exe conf\redis_6302.conf
bin\redis-server.exe conf\redis_6303.conf
需要打開三個 dos窗口螃成,由于window 版本的不支持直接后臺啟動旦签,啟動之后且不能關(guān)閉dos 窗口,若想實現(xiàn)后臺啟動寸宏,需安裝服務(wù)宁炫;本文暫不介紹安裝redis 服務(wù)的啟動方式。
ps 在創(chuàng)建集群的時候氮凝,需要所有的redis 實例必須全部啟動羔巢,并且全部可連接成功;創(chuàng)建集群之前每個實例與每個實例之間并沒有互通罩阵;創(chuàng)建集群之后竿秆,才可以在存緩存的時候,經(jīng)過hash 算法取模永脓,確定存儲在哪個redis實例上袍辞,在取緩存的時候,還會經(jīng)過同樣的算法去對應(yīng)的實例上取數(shù)據(jù);;; 別著急,下一小節(jié)貼圖
6常摧,為redis 實例創(chuàng)建集群
使用 redis-trib.rb 來創(chuàng)建集群搅吁,若你的redis 里沒有redis-trib.rb這個腳本,請在源碼的src目錄復(fù)制一份到redis安裝目錄
無從庫的情況:
執(zhí)行命令: ruby redis-trib.rb create 127.0.0.1:6301 127.0.0.1:6302 127.0.0.1:6303
有從庫的情況(下面命令6臺redis 實例:3主3從落午,每一個主庫有一個從庫):
執(zhí)行命令: ruby redis-trib.rb create --replicas 1 127.0.0.1:6301 127.0.0.1:6302 127.0.0.1:6303 127.0.0.1:6304 127.0.0.1:6305 127.0.0.1:6306
ps --replicas n 的意思是 為每個主庫建立n個從庫谎懦,所以說若想保證主庫能夠平均分配同樣的從庫實例,應(yīng)滿足:實例總數(shù)%(n+1) = 0
創(chuàng)建集群成功圖.png
3溃斋,結(jié)束語
簡單介紹安裝redis 服務(wù)界拦,后臺啟動教程
為每一個redis 實例安裝服務(wù),即可使用 net start redis6301(服務(wù)名) 來啟動
安裝服務(wù)的命令:
F:/reids_cluster/bin/redis-server.exe --service-install D:/redis_cluster/conf/redis.6380.conf --service-name redis6301(服務(wù)名)
卸載服務(wù)的命令():
F:/reids_cluster/bin/redis-server.exe --service-uninstall --service-name redis6301
ps 這里有一個非常需要注意的地方梗劫,就是上面安裝服務(wù)的命令 指定的配置建議使用絕對路徑享甸,以及配置里的日志路徑(logfile)和數(shù)據(jù)路徑(dir)都建議使用絕對路徑而非相對路徑,不是相對路徑不可以梳侨,而是需要改變原有的目錄結(jié)構(gòu)蛉威,而且很容易出錯,不是相對路徑配置對就可以了走哺,我嘗試過蚯嫌,覺得有bug,最終以redis-server.exe與配置文件在同層目錄下安裝服務(wù)成功的,反正相對路徑的方式安裝服務(wù)挺坑的择示,若配置中不配置logfile 和data的話 就不說了束凑,隨便安裝服務(wù);還有要注意的就是栅盲,若添加了logfile汪诉,那在使用redis-server.exe 期間執(zhí)行的所有命令的日志,都會在logfile 配置的日志文件中谈秫,包括上面安裝啟動redis 服務(wù)的日志摩瞎,建議 先去掉logfile,嘗試安裝成功之后孝常,在卸載掉服務(wù)旗们,配置好日志,再去安裝服務(wù)构灸。
如有不符之處上渴,歡迎評論。