HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    redis集群是什么(redis集群有啥用)

    發(fā)布時(shí)間:2023-04-03 16:13:31     稿源: 創(chuàng)意嶺    閱讀: 113        當(dāng)前文章關(guān)鍵詞排名出租

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于redis集群是什么的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關(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ù)請撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    redis集群是什么(redis集群有啥用)

    一、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)然不能對性能產(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í),所有請求都能被響應(yīng)(可用性,某個(gè)Master結(jié)點(diǎn)掛了的話,那么它上面分片的數(shù)據(jù)就無法訪問了)。

    有了Cluster功能后,Redis從一個(gè)單純的NoSQL內(nèi)存數(shù)據(jù)庫變成了分布式NoSQL數(shù)據(jù)庫,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理論的通俗講解,請參考我的譯文《可能是CAP理論的最好解釋 》。簡單分析了Redis在架構(gòu)上的變化后,咱們就一起來體驗(yàn)一下Redis Cluster功能吧!

    2.Redis集群初探

    Redis的安裝很簡單,以前已經(jīng)介紹過,就不詳細(xì)說了。關(guān)于Redis Cluster的基礎(chǔ)知識(shí)之前也有過整理,請參考《Redis集群功能預(yù)覽》。如果需要全面的了解,那一定要看官方文檔Cluster Tutorial,只看這一個(gè)就夠了!

    2.1 集群配置

    要想開啟Redis Cluster模式,有幾項(xiàng)配置是必須的。此外為了方便使用和后續(xù)的測試,我還額外做了一些配置:

    綁定地址: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)ヅ涞模荝edis運(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ò)展。可以先用which命令查看是否已安裝ruby和rubygems,用gem list –local查看本地是否已安裝redis擴(kuò)展。

    最簡便的方法就是用apt或yum包管理器安裝RubyGems后執(zhí)行g(shù)em install redis。如果網(wǎng)絡(luò)或環(huán)境受限的話,可以手動(dòng)安裝RubyGems和redis擴(kuò)展(國外鏈接可能無法下載,可以從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的配置文件,注意修改端口號。

    如何安裝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)建新集群,檢查集群,或者對集群進(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對集群的支持是非常基本的, 所以它總是依靠 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)容。


    推薦閱讀:

    錄屏大師視頻不在rec

    reality中文諧音歌詞(reality中文諧音首歌)

    智能機(jī)器人ChatGPT官網(wǎng)(howαreyou智能機(jī)器人)

    庭院景觀設(shè)計(jì)經(jīng)典案例(庭院景觀設(shè)計(jì)經(jīng)典案例分享)

    零基礎(chǔ)英語app排行榜(零基礎(chǔ)英語app排行榜免費(fèi))