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

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

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

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

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

    只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網頁版、PC客戶端

    官網:https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

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

    一、redis主從、哨兵、集群的區(qū)別

    通過持久化功能,Redis保證了即使在服務器重啟的情況下也不會損失(或少量損失)數(shù)據,因為持久化會把內存中數(shù)據保存到硬盤上,重啟會從硬盤上加載數(shù)據。

    哨兵的作用是監(jiān)控主從,主從切換的??梢允且恢鞫鄰?,不過數(shù)據都是冗余存儲的,每個主從節(jié)點存儲的數(shù)據都是一樣的。

    是將數(shù)據分片存儲,每個節(jié)點存儲一部分數(shù)據,從而達到分布式集群的目的。

    二、redis-cluster和redis是一個東西么

    1.Redis Cluster總覽

    1.1 設計原則和初衷

    在官方文檔Cluster Spec中,作者詳細介紹了Redis集群為什么要設計成現(xiàn)在的樣子。最核心的目標有三個:

    性能:這是Redis賴以生存的看家本領,增加集群功能后當然不能對性能產生太大影響,所以Redis采取了P2P而非Proxy方式、異步復制、客戶端重定向等設計,而犧牲了部分的一致性、使用性。

    水平擴展:集群的最重要能力當然是擴展,文檔中稱可以線性擴展到1000結點。

    可用性:在Cluster推出之前,可用性要靠Sentinel保證。有了集群之后也自動具有了Sentinel的監(jiān)控和自動Failover能力。

    1.2 架構變化與CAP理論

    Redis Cluster集群功能推出已經有一段時間了。在單機版的Redis中,每個Master之間是沒有任何通信的,所以我們一般在Jedis客戶端或者Codis這樣的代理中做Pre-sharding。按照CAP理論來說,單機版的Redis屬于保證CP(Consistency & Partition-Tolerancy)而犧牲A(Availability),也就說Redis能夠保證所有用戶看到相同的數(shù)據(一致性,因為Redis不自動冗余數(shù)據)和網絡通信出問題時,暫時隔離開的子系統(tǒng)能繼續(xù)運行(分區(qū)容忍性,因為Master之間沒有直接關系,不需要通信),但是不保證某些結點故障時,所有請求都能被響應(可用性,某個Master結點掛了的話,那么它上面分片的數(shù)據就無法訪問了)。

    有了Cluster功能后,Redis從一個單純的NoSQL內存數(shù)據庫變成了分布式NoSQL數(shù)據庫,CAP模型也從CP變成了AP。也就是說,通過自動分片和冗余數(shù)據,Redis具有了真正的分布式能力,某個結點掛了的話,因為數(shù)據在其他結點上有備份,所以其他結點頂上來就可以繼續(xù)提供服務,保證了Availability。然而,也正因為這一點,Redis無法保證曾經的強一致性了。這也是CAP理論要求的,三者只能取其二。

    關于CAP理論的通俗講解,請參考我的譯文《可能是CAP理論的最好解釋 》。簡單分析了Redis在架構上的變化后,咱們就一起來體驗一下Redis Cluster功能吧!

    2.Redis集群初探

    Redis的安裝很簡單,以前已經介紹過,就不詳細說了。關于Redis Cluster的基礎知識之前也有過整理,請參考《Redis集群功能預覽》。如果需要全面的了解,那一定要看官方文檔Cluster Tutorial,只看這一個就夠了!

    2.1 集群配置

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

    綁定地址:bind 192.168.XXX.XXX。不能綁定到127.0.0.1或localhost,否則指導客戶端重定向時會報”Connection refused”的錯誤。

    開啟Cluster:cluster-enabled yes

    集群配置文件:cluster-config-file nodes-7000.conf。這個配置文件不是要我們去配的,而是Redis運行時保存配置的文件,所以我們也不可以修改這個文件。

    集群超時時間:cluster-node-timeout 15000。結點超時多久則認為它宕機了。

    槽是否全覆蓋:cluster-require-full-coverage no。默認是yes,只要有結點宕機導致16384個槽沒全被覆蓋,整個集群就全部停止服務,所以一定要改為no

    后臺運行:daemonize yes

    輸出日志:logfile “./redis.log”

    監(jiān)聽端口:port 7000

    配置好后,根據我們的集群規(guī)模,拷貝出來幾份同樣的配置文件,唯一不同的就是監(jiān)聽端口,可以依次改為7001、7002… 因為Redis Cluster如果數(shù)據冗余是1的話,至少要3個Master和3個Slave,所以我們拷貝出6個實例的配置文件。為了避免相互影響,為6個實例的配置文件建立獨立的文件夾。

    [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作者應該是個Ruby愛好者,Ruby客戶端就是他開發(fā)的。這次集群的管理功能沒有嵌入到Redis代碼中,于是作者又順手寫了個叫做redis-trib的管理腳本。redis-trib依賴Ruby和RubyGems,以及redis擴展。可以先用which命令查看是否已安裝ruby和rubygems,用gem list –local查看本地是否已安裝redis擴展。

    最簡便的方法就是用apt或yum包管理器安裝RubyGems后執(zhí)行gem install redis。如果網絡或環(huán)境受限的話,可以手動安裝RubyGems和redis擴展(國外鏈接可能無法下載,可以從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 集群建立

    首先,啟動我們配置好的6個Redis實例。

    [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

    此時6個實例還沒有形成集群,現(xiàn)在用redis-trb.rb管理腳本建立起集群??梢钥吹剑瑀edis-trib默認用前3個實例作為Master,后3個作為Slave。因為Redis基于Master-Slave做數(shù)據備份,而非像Cassandra或Hazelcast一樣不區(qū)分結點角色,自動復制并分配Slot的位置到各個結點。

    [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.

    至此,集群就已經建立成功了!“貼心”的Redis還在utils/create-cluster下提供了一個create-cluster腳本,能夠創(chuàng)建出一個集群,類似我們上面建立起的3主3從的集群。

    三、如何安裝Redis集群

    創(chuàng)建目錄,copy配置文件

    如何安裝Redis集群

    修改配置文件

    按照此方式修改7001~7005的配置文件,注意修改端口號。

    如何安裝Redis集群

    啟動各個實例

    如何安裝Redis集群

    創(chuàng)建集群

    現(xiàn)在我們已經有了六個正在運行中的 Redis 實例, 接下來我們需要使用這些實例來創(chuàng)建集群, 并為每個節(jié)點編寫配置文件。

    通過使用 Redis 集群命令行工具redis-trib,編寫節(jié)點配置文件的工作可以非常容易地完成redis-trib位于Redis 源碼的src文件夾中,它是一個 Ruby 程序,這個程序通過向實例發(fā)送特殊命令來完成創(chuàng)建新集群,檢查集群,或者對集群進行重新分片(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,所以報上面的錯誤。

    先安裝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自動選擇主從

    如何安裝Redis集群

    連接集群

    redis-cli 也可以作為集群的客戶端工具,要想訪問集群,只需連接任意一個redis實例即可。使用-c參數(shù)

    [root@localhost bin]# ./redis-cli -c -p 7000

    總結

    set 命令寫數(shù)據,集群將數(shù)據寫到7001實例上,當你使用get命令獲取數(shù)據時,客戶端即自動切換到7001端口。

    redis-cli對集群的支持是非?;镜?, 所以它總是依靠 Redis 集群節(jié)點來將它轉向(redirect)至正確的節(jié)點。一個真正的(serious)集群客戶端應該做得比這更好: 它應該用緩存記錄起哈希槽與節(jié)點地址之間的映射(map), 從而直接將命令發(fā)送到正確的節(jié)點上面。

    四、

    以上就是關于redis集群是什么相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。


    推薦閱讀:

    錄屏大師視頻不在rec

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

    智能機器人ChatGPT官網(howαreyou智能機器人)

    庭院景觀設計經典案例(庭院景觀設計經典案例分享)

    零基礎英語app排行榜(零基礎英語app排行榜免費)