-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
redis集群是什么(redis集群有啥用)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于redis集群是什么的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、redis主從、哨兵、集群的區(qū)別
通過持久化功能,Redis保證了即使在服務(wù)器重啟的情況下也不會(huì)損失(或少量損失)數(shù)據(jù),因?yàn)槌志没瘯?huì)把內(nèi)存中數(shù)據(jù)保存到硬盤上,重啟會(huì)從硬盤上加載數(shù)據(jù)。
哨兵的作用是監(jiān)控主從,主從切換的??梢允且恢鞫鄰?,不過數(shù)據(jù)都是冗余存儲(chǔ)的,每個(gè)主從節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)都是一樣的。
是將數(shù)據(jù)分片存儲(chǔ),每個(gè)節(jié)點(diǎn)存儲(chǔ)一部分?jǐn)?shù)據(jù),從而達(dá)到分布式集群的目的。
二、redis-cluster和redis是一個(gè)東西么
1.Redis Cluster總覽
1.1 設(shè)計(jì)原則和初衷
在官方文檔Cluster Spec中,作者詳細(xì)介紹了Redis集群為什么要設(shè)計(jì)成現(xiàn)在的樣子。最核心的目標(biāo)有三個(gè):
性能:這是Redis賴以生存的看家本領(lǐng),增加集群功能后當(dāng)然不能對(duì)性能產(chǎn)生太大影響,所以Redis采取了P2P而非Proxy方式、異步復(fù)制、客戶端重定向等設(shè)計(jì),而犧牲了部分的一致性、使用性。
水平擴(kuò)展:集群的最重要能力當(dāng)然是擴(kuò)展,文檔中稱可以線性擴(kuò)展到1000結(jié)點(diǎn)。
可用性:在Cluster推出之前,可用性要靠Sentinel保證。有了集群之后也自動(dòng)具有了Sentinel的監(jiān)控和自動(dòng)Failover能力。
1.2 架構(gòu)變化與CAP理論
Redis Cluster集群功能推出已經(jīng)有一段時(shí)間了。在單機(jī)版的Redis中,每個(gè)Master之間是沒有任何通信的,所以我們一般在Jedis客戶端或者Codis這樣的代理中做Pre-sharding。按照CAP理論來說,單機(jī)版的Redis屬于保證CP(Consistency & Partition-Tolerancy)而犧牲A(Availability),也就說Redis能夠保證所有用戶看到相同的數(shù)據(jù)(一致性,因?yàn)镽edis不自動(dòng)冗余數(shù)據(jù))和網(wǎng)絡(luò)通信出問題時(shí),暫時(shí)隔離開的子系統(tǒng)能繼續(xù)運(yùn)行(分區(qū)容忍性,因?yàn)镸aster之間沒有直接關(guān)系,不需要通信),但是不保證某些結(jié)點(diǎn)故障時(shí),所有請(qǐng)求都能被響應(yīng)(可用性,某個(gè)Master結(jié)點(diǎn)掛了的話,那么它上面分片的數(shù)據(jù)就無法訪問了)。
有了Cluster功能后,Redis從一個(gè)單純的NoSQL內(nèi)存數(shù)據(jù)庫(kù)變成了分布式NoSQL數(shù)據(jù)庫(kù),CAP模型也從CP變成了AP。也就是說,通過自動(dòng)分片和冗余數(shù)據(jù),Redis具有了真正的分布式能力,某個(gè)結(jié)點(diǎn)掛了的話,因?yàn)閿?shù)據(jù)在其他結(jié)點(diǎn)上有備份,所以其他結(jié)點(diǎn)頂上來就可以繼續(xù)提供服務(wù),保證了Availability。然而,也正因?yàn)檫@一點(diǎn),Redis無法保證曾經(jīng)的強(qiáng)一致性了。這也是CAP理論要求的,三者只能取其二。
關(guān)于CAP理論的通俗講解,請(qǐng)參考我的譯文《可能是CAP理論的最好解釋 》。簡(jiǎn)單分析了Redis在架構(gòu)上的變化后,咱們就一起來體驗(yàn)一下Redis Cluster功能吧!
2.Redis集群初探
Redis的安裝很簡(jiǎn)單,以前已經(jīng)介紹過,就不詳細(xì)說了。關(guān)于Redis Cluster的基礎(chǔ)知識(shí)之前也有過整理,請(qǐng)參考《Redis集群功能預(yù)覽》。如果需要全面的了解,那一定要看官方文檔Cluster Tutorial,只看這一個(gè)就夠了!
2.1 集群配置
要想開啟Redis Cluster模式,有幾項(xiàng)配置是必須的。此外為了方便使用和后續(xù)的測(cè)試,我還額外做了一些配置:
綁定地址:bind 192.168.XXX.XXX。不能綁定到127.0.0.1或localhost,否則指導(dǎo)客戶端重定向時(shí)會(huì)報(bào)”Connection refused”的錯(cuò)誤。
開啟Cluster:cluster-enabled yes
集群配置文件:cluster-config-file nodes-7000.conf。這個(gè)配置文件不是要我們?nèi)ヅ涞?,而是Redis運(yùn)行時(shí)保存配置的文件,所以我們也不可以修改這個(gè)文件。
集群超時(shí)時(shí)間:cluster-node-timeout 15000。結(jié)點(diǎn)超時(shí)多久則認(rèn)為它宕機(jī)了。
槽是否全覆蓋:cluster-require-full-coverage no。默認(rèn)是yes,只要有結(jié)點(diǎn)宕機(jī)導(dǎo)致16384個(gè)槽沒全被覆蓋,整個(gè)集群就全部停止服務(wù),所以一定要改為no
后臺(tái)運(yùn)行:daemonize yes
輸出日志:logfile “./redis.log”
監(jiān)聽端口:port 7000
配置好后,根據(jù)我們的集群規(guī)模,拷貝出來幾份同樣的配置文件,唯一不同的就是監(jiān)聽端口,可以依次改為7001、7002… 因?yàn)镽edis Cluster如果數(shù)據(jù)冗余是1的話,至少要3個(gè)Master和3個(gè)Slave,所以我們拷貝出6個(gè)實(shí)例的配置文件。為了避免相互影響,為6個(gè)實(shí)例的配置文件建立獨(dú)立的文件夾。
[root@8gVm redis-3.0.4]# pwd
/root/Software/redis-3.0.4
[root@8gVm redis-3.0.4]# tree -I "*log|nodes*" cfg-cluster/
cfg-cluster/
├── 7000
│ └── redis.conf.7000
├── 7001
│ └── redis.conf.7001
├── 7002
│ └── redis.conf.7002
├── 7003
│ └── redis.conf.7003
├── 7004
│ └── redis.conf.7004
└── 7005
└── redis.conf.7005
6 directories, 6 files
2.2 redis-trib管理器
Redis作者應(yīng)該是個(gè)Ruby愛好者,Ruby客戶端就是他開發(fā)的。這次集群的管理功能沒有嵌入到Redis代碼中,于是作者又順手寫了個(gè)叫做redis-trib的管理腳本。redis-trib依賴Ruby和RubyGems,以及redis擴(kuò)展??梢韵扔脀hich命令查看是否已安裝ruby和rubygems,用gem list –local查看本地是否已安裝redis擴(kuò)展。
最簡(jiǎn)便的方法就是用apt或yum包管理器安裝RubyGems后執(zhí)行g(shù)em install redis。如果網(wǎng)絡(luò)或環(huán)境受限的話,可以手動(dòng)安裝RubyGems和redis擴(kuò)展(國(guó)外鏈接可能無法下載,可以從CSDN下載):
[root@8gVm Software]# wget https://github.com/rubygems/rubygems/releases/download/v2.2.3/rubygems-2.2.3.tgz
[root@8gVm Software]# tar xzvf rubygems-2.2.3.tgz
[root@8gVm Software]# cd rubygems-2.2.3
[root@8gVm rubygems-2.2.3]# ruby setup.rb --no-rdoc --no-ri
[root@8gVm Software]# wget https://rubygems.org/downloads/redis-3.2.1.gem
[root@8gVm Software]# gem install redis-3.2.1.gem --local --no-rdoc --no-ri
Successfully installed redis-3.2.1
1 gem installed
2.3 集群建立
首先,啟動(dòng)我們配置好的6個(gè)Redis實(shí)例。
[root@8gVm redis-3.0.4]# for ((i=0; i<6; ++i))
> do
> cd cfg-cluster/700$i && ../../src/redis-server redis.conf.700$i && cd -
> done
此時(shí)6個(gè)實(shí)例還沒有形成集群,現(xiàn)在用redis-trb.rb管理腳本建立起集群??梢钥吹剑瑀edis-trib默認(rèn)用前3個(gè)實(shí)例作為Master,后3個(gè)作為Slave。因?yàn)镽edis基于Master-Slave做數(shù)據(jù)備份,而非像Cassandra或Hazelcast一樣不區(qū)分結(jié)點(diǎn)角色,自動(dòng)復(fù)制并分配Slot的位置到各個(gè)結(jié)點(diǎn)。
[root@8gVm redis-3.0.4]# src/redis-trib.rb create --replicas 1 192.168.1.100:7000 192.168.1.100:7001 192.168.1.100:7002 192.168.1.100:7003 192.168.1.100:7004 192.168.1.100:7005
>>> Creating cluster
Connecting to node 192.168.1.100:7000: OK
Connecting to node 192.168.1.100:7001: OK
Connecting to node 192.168.1.100:7002: OK
Connecting to node 192.168.1.100:7003: OK
Connecting to node 192.168.1.100:7004: OK
Connecting to node 192.168.1.100:7005: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.1.100:7000
192.168.1.100:7001
192.168.1.100:7002
Adding replica 192.168.1.100:7003 to 192.168.1.100:7000
Adding replica 192.168.1.100:7004 to 192.168.1.100:7001
Adding replica 192.168.1.100:7005 to 192.168.1.100:7002
...
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 192.168.1.100:7000)
...
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
至此,集群就已經(jīng)建立成功了!“貼心”的Redis還在utils/create-cluster下提供了一個(gè)create-cluster腳本,能夠創(chuàng)建出一個(gè)集群,類似我們上面建立起的3主3從的集群。
三、如何安裝Redis集群
創(chuàng)建目錄,copy配置文件
如何安裝Redis集群
修改配置文件
按照此方式修改7001~7005的配置文件,注意修改端口號(hào)。
如何安裝Redis集群
啟動(dòng)各個(gè)實(shí)例
如何安裝Redis集群
創(chuàng)建集群
現(xiàn)在我們已經(jīng)有了六個(gè)正在運(yùn)行中的 Redis 實(shí)例, 接下來我們需要使用這些實(shí)例來創(chuàng)建集群, 并為每個(gè)節(jié)點(diǎn)編寫配置文件。
通過使用 Redis 集群命令行工具redis-trib,編寫節(jié)點(diǎn)配置文件的工作可以非常容易地完成redis-trib位于Redis 源碼的src文件夾中,它是一個(gè) Ruby 程序,這個(gè)程序通過向?qū)嵗l(fā)送特殊命令來完成創(chuàng)建新集群,檢查集群,或者對(duì)集群進(jìn)行重新分片(reshared)等工作。
我們需要執(zhí)行以下命令來創(chuàng)建集群:
[root@localhost src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
/usr/bin/env: ruby: No such file or directory
如何安裝Redis集群
系統(tǒng)中沒有安裝ruby,所以報(bào)上面的錯(cuò)誤。
先安裝ruby
[root@localhost yum.repos.d]# yum install ruby
[root@localhost yum.repos.d]# yum install rubygems
[root@localhost yum.repos.d]# gem install redis
Successfully installed redis-3.2.2
1 gem installed
Installing ri documentation for redis-3.2.2...
Installing RDoc documentation for redis-3.2.2...
如何安裝Redis集群
再次創(chuàng)建集群
[root@localhost src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
Redis自動(dòng)選擇主從
如何安裝Redis集群
連接集群
redis-cli 也可以作為集群的客戶端工具,要想訪問集群,只需連接任意一個(gè)redis實(shí)例即可。使用-c參數(shù)
[root@localhost bin]# ./redis-cli -c -p 7000
總結(jié)
set 命令寫數(shù)據(jù),集群將數(shù)據(jù)寫到7001實(shí)例上,當(dāng)你使用get命令獲取數(shù)據(jù)時(shí),客戶端即自動(dòng)切換到7001端口。
redis-cli對(duì)集群的支持是非?;镜?, 所以它總是依靠 Redis 集群節(jié)點(diǎn)來將它轉(zhuǎn)向(redirect)至正確的節(jié)點(diǎn)。一個(gè)真正的(serious)集群客戶端應(yīng)該做得比這更好: 它應(yīng)該用緩存記錄起哈希槽與節(jié)點(diǎn)地址之間的映射(map), 從而直接將命令發(fā)送到正確的節(jié)點(diǎn)上面。
四、
以上就是關(guān)于redis集群是什么相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
智能機(jī)器人ChatGPT官網(wǎng)(howαreyou智能機(jī)器人)
庭院景觀設(shè)計(jì)經(jīng)典案例(庭院景觀設(shè)計(jì)經(jīng)典案例分享)
零基礎(chǔ)英語app排行榜(零基礎(chǔ)英語app排行榜免費(fèi))