真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

redis搭建偽集群的方法-創(chuàng)新互聯(lián)

再認識redis集群前,若想先知道redis單機版的可查看,springboot整合redis。好了,下面開始了。

藍山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),藍山網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為藍山數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的藍山做網(wǎng)站的公司定做!

每個redis實例可稱為一個節(jié)點,安裝redis并以默認端口啟動是節(jié)點,不關(guān)閉,以另一個端口啟動,是一個新節(jié)點。在另一臺機器安裝redis并啟動,也是一個新節(jié)點。

節(jié)點分為主節(jié)點 (master) ,從節(jié)點 (slave) ,數(shù)據(jù)從主節(jié)點向多個從節(jié)點上同步 。

redis3.0開始支持集群,redis集群是沒有統(tǒng)一的入口的,客戶端(client)連接集群的時候連接集群中的任意節(jié)點(node)即可,集群內(nèi)部的節(jié)點是相互通信的(PING-PONG機制)。

@[toc]

一,集群方式

1,主從模式

一個master可以擁有多個slave,但是一個slave只能對應(yīng)一個master。這樣,當某個slave掛了不影響其他slave的讀和master的讀和寫,重新啟動后會,數(shù)據(jù)會從master上同步過來。

在主從模式下,因為只有一個主節(jié)點可以寫,而主,從節(jié)點都可以讀,所以通常主節(jié)點負責(zé)寫,從節(jié)點負責(zé)讀。

redis搭建偽集群的方法
但是,當唯一的master掛了以后,雖然這樣并不影響slave的讀,但redis也不再提供寫服務(wù),需要將master重啟后,redis才重新對外提供寫服務(wù)。

2,Sentinel模式

sentinel模式是建立在主從模式的基礎(chǔ)上,避免單個master掛了以后,redis不能提供寫服務(wù)。因為從節(jié)點上備份了主節(jié)點的所有數(shù)據(jù),那么當master掛了以后,sentinel會在slave中選擇一個做為master,并修改它們的配置文件,其他slave的配置文件也會被修改,比如slaveof屬性會指向新的master,比如之前配置的密碼。此時,客戶端就不是直接連接Redis,而是連接sentinel的ip和port,由sentinel來提供具體Redis服務(wù)。
redis搭建偽集群的方法
把之前掛了的master重新啟動后,它將不再是master而是做為slave接收新的master的同步數(shù)據(jù)。

3,Cluster模式

Cluster模式是建立在Sentinel模式的基礎(chǔ)上的,當數(shù)據(jù)多到需要動態(tài)擴容的時候,前面兩種就不行了,需要對數(shù)據(jù)進行分片,根據(jù)一定的規(guī)則把redis數(shù)據(jù)分配到多臺機器。
redis搭建偽集群的方法
該模式就支持動態(tài)擴容,可以在線增加或刪除節(jié)點,而且客戶端可以連接任何一個主節(jié)點進行讀寫,不過此時的從節(jié)點僅僅只是備份的作用。至于為何能做到動態(tài)擴容,主要是因為Redis 集群沒有使用一致性hash, 而是使用的哈希槽。Redis 集群會有16384個哈希槽,每個key通過CRC16校驗后對16384取模來決定放置哪個槽,而集群的每個節(jié)點負責(zé)一部分hash槽。

那么這樣就很容易添加或者刪除節(jié)點, 比如如果我想新添加個新節(jié)點, 我只需要從已有的節(jié)點中得部分槽到過來;如果我想移除某個節(jié)點,就只需要將該節(jié)點的槽移到其它節(jié)點上,然后將沒有任何槽的A節(jié)點從集群中移除即可。由于從一個節(jié)點將哈希槽移動到另一個節(jié)點并不會停止服務(wù),所以無論添加刪除或者改變某個節(jié)點的哈希槽的數(shù)量都不會造成集群不可用的狀態(tài)。

需要注意的是,該模式下不支持同時處理多個key(如MSET/MGET),因為redis需要把key均勻分布在各個節(jié)點上,并發(fā)量很高的情況下同時創(chuàng)建key-value會降低性能并導(dǎo)致不可預(yù)測的行為。

二,搭建集群

這里就直接搭建較為復(fù)雜的Cluster模式集群,也是企業(yè)級開發(fā)過程中使用最多的。

1,準備工作

Linux可以連接外網(wǎng),有wget(用于在線下載redis),系統(tǒng)安裝好gcc環(huán)境,(不然編譯redis會報錯)。

2,下載、解壓、移到指定目錄,編譯Redis
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
tar xzf redis-5.0.4.tar.gz
mv redis-5.0.4  /usr/local/redis
cd /usr/local/redis/redis-5.0.4
make
make install

安裝完成,在/usr/local/bin/目錄下就會看見
redis搭建偽集群的方法

3,建redis各節(jié)點目錄
mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
mkdir bin

最終目錄結(jié)構(gòu)如下
redis搭建偽集群的方法

4,redis集群的運行腳本

把之前安裝好的redis的src目錄下運行腳本拷貝過來,每個redis版本的運行腳本有細微差異,請以你自己的版本為準,就是下圖綠色部分。

cd /usr/local/redis/redis-5.0.4/src
cp  mkreleasehdr.sh redis-benchmark redis-check-aof  redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis-cluster/bin

redis搭建偽集群的方法
最終效果如下圖所示
redis搭建偽集群的方法

5,批量復(fù)制redis實例
cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9001
cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9002
cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9003
cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9004
cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9005
cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9006

最終效果圖如下所示
redis搭建偽集群的方法

6,逐個修改redis配置

以 9001 的為例子,其余五個類似。

cd /usr/local/redis-cluster/9001
vi redis.conf

redis搭建偽集群的方法
打開配置文件,按 i 進入編輯模式,按照出現(xiàn)的順序,主要需要修改的地方是

  • bind 192.168.119.128(綁定當前電腦的 IP,這是我虛擬機的,你綁定成你虛擬機的ip)
  • port 9001(因為我這是一臺機器運行6個redis實例,所以要啟動6個實例,得為它配置6個不同的端口,若你是6臺機器,默認的端口就行,無需更改)
  • daemonize yes(這是設(shè)置是否后臺啟動 Redis,默認 no ,但是生產(chǎn)環(huán)境肯定要默認就開啟 Redis,所以這里設(shè)置為 yes 。)
  • pidfile /var/run/redis_9001.pid(_9001這個一定要和第一個配置的端口一樣)
  • dir /usr/local/redis-cluster/9001/data/(數(shù)據(jù)文件存放位置,我換成指定目錄下存放)
  • appendonly yes
  • cluster-enabled yes(啟動集群模式)
  • cluster-config-file nodes9001.conf(9001這個也要和之前的端口對應(yīng))
  • cluster-node-timeout 15000(超時時間)
    redis搭建偽集群的方法
    完成以上修改,Esc退出編輯模式,輸入:wq 保存并退出。 類似同樣的操作操作再來五次。

若是對redis的配置文件有興趣,我在學(xué)習(xí)的過程中找到個詳細的翻譯版,可點擊鏈接進去學(xué)習(xí)。

redis配置中文翻譯

7,逐個啟動redis節(jié)點
cd /usr/local/redis-cluster
/usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9002/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9003/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9004/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9005/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9006/redis.conf

運行效果如圖所示
redis搭建偽集群的方法
現(xiàn)在檢查一下是否成功開啟,如下圖所示,都開啟成功。

ps -el | grep redis

redis搭建偽集群的方法

8,搭建集群

此時的節(jié)點雖然都啟動成功了,但他們還不在一個集群里面,不能互相發(fā)現(xiàn),測試會報錯:(error) CLUSTERDOWN Hash slot not served。

/usr/local/redis-cluster/bin/redis-cli -h 192.168.119.128 -p 9001
keys *
set name mafly

如下圖所示
redis搭建偽集群的方法
解決報錯,如果你是redis5.0以前的,你需要安裝集群所需的ruby相關(guān)依賴

yum install ruby
yum install rubygems
cd /usr/local/redis-cluster/
gem install redis

這步若安裝報錯,請查看Could not find a valid gem 'redis'

如果你是redis5.0及之后的,無需安裝ruby依賴,redis安裝目錄里內(nèi)置了集群命令行工具 redis-trib ,它是一個 Ruby 程序, 這個程序通過向?qū)嵗l(fā)送特殊命令來完成創(chuàng)建新集群, 檢查集群, 或者對集群進行重新分片工作。

redis-cli --cluster create 192.168.119.128:9001 192.168.119.128:9002 192.168.119.128:9003 192.168.119.128:9004 192.168.119.128:9005 192.168.119.128:9006 --cluster-replicas 1

--cluster-replicas 1  這個指的是從機的數(shù)量,表示我們希望為集群中的每個主節(jié)點創(chuàng)建一個從節(jié)點。

紅色選框是給三個主節(jié)點分配的共16384個槽點。

黃色選框是主從節(jié)點的分配情況。

藍色選框是各個節(jié)點的詳情。
redis搭建偽集群的方法

9,測試

現(xiàn)在通過客戶端命令連接上,通過集群命令看一下狀態(tài)和節(jié)點信息等

/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.128 -p 9001
cluster info
cluster nodes

效果圖如下,集群搭建成功。
redis搭建偽集群的方法
現(xiàn)在往9001這個主節(jié)點寫入一條信息,我們可以在9002這個主節(jié)點取到信息,集群間各個節(jié)點可以通信。

現(xiàn)在往9001這個主節(jié)點寫入一條信息,我們可以在9002這個主節(jié)點取到信息,集群間各個節(jié)點可以通信。

 set name lgx
 get name

redis搭建偽集群的方法

三,故障轉(zhuǎn)移

1,故障轉(zhuǎn)移機制詳解
  1. 集群中的節(jié)點會向其它節(jié)點發(fā)送PING消息(該PING消息會帶著當前集群和節(jié)點的信息),如果在規(guī)定時間內(nèi),沒有收到對應(yīng)的PONG消息,就把此節(jié)點標記為疑似下線。

  2. 當被分配了slot槽位的主節(jié)點中有超過一半的節(jié)點都認為此節(jié)點疑似下線(就是其它節(jié)點以更高的頻次,更頻繁的與該節(jié)點PING-PONG),那么該節(jié)點就真的下線。

  3. 其它節(jié)點收到某節(jié)點已經(jīng)下線的廣播后,把自己內(nèi)部的集群維護信息也修改為該節(jié)點已事實下線。

  4. 節(jié)點資格審查:然后對從節(jié)點進行資格審查,每個從節(jié)點檢查最后與主節(jié)點的斷線時間,如果該值超過配置文件的設(shè)置,那么取消該從節(jié)點的資格。

  5. 準備選舉時間:這里使用了延遲觸發(fā)機制,主要是給那些延遲低的更高的優(yōu)先級,延遲低的讓它提前參與被選舉,延遲高的讓它靠后參與被選舉。(延遲的高低是依據(jù)之前與主節(jié)點的最后斷線時間確定的)

  6. 選舉投票:當從節(jié)點獲取選舉資格后,會向其他帶有slot槽位的主節(jié)點發(fā)起選舉請求,由它們進行投票,優(yōu)先級越高的從節(jié)點就越有可能成為主節(jié)點,當從節(jié)點獲取的票數(shù)到達一定數(shù)值時(如集群內(nèi)有N個主節(jié)點,那么只要有一個從節(jié)點獲得了N/2+1的選票即認為勝出),就會替換成為主節(jié)點。

  7. 替換主節(jié)點:被選舉出來的從節(jié)點會執(zhí)行slaveof no one把自己的狀態(tài)從slave變成master,然后執(zhí)行clusterDelSlot操作撤銷故障主節(jié)點負責(zé)的槽,并執(zhí)行 clusterAddSlot把這些槽分配給自己,之后向集群廣播自己的pong消息,通知集群內(nèi)所有的節(jié)點,當前從節(jié)點已變?yōu)橹鞴?jié)點。

  8. 接管相關(guān)操作:新的主節(jié)點接管了之前故障的主節(jié)點的槽信息,接收和處理與自己槽位相關(guān)的命令請求。
2,故障轉(zhuǎn)移測試

這是之前集群中具體節(jié)點的情況,我簡化成如下,可以向上回看圖片中的集群信息。
redis搭建偽集群的方法
這里關(guān)閉該9001端口的進程,即模擬該主節(jié)點掛掉。

 netstat -tunlp | grep 9001
 kill 15705

redis搭建偽集群的方法
登錄掛掉的redis節(jié)點,會被拒絕服務(wù),通過還在正常運行的某個主節(jié)點進入,然后再次查看集群中的信息

/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.128 -p 9001

/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.128 -p 9002

cluster nodes

redis搭建偽集群的方法
簡而言之,就是之前的集群信息變成了如下所示
redis搭建偽集群的方法
現(xiàn)在,我重啟剛才掛掉的主節(jié)點,重新查看集群內(nèi)部的節(jié)點情況,具體情況如下圖所示。

cd /usr/local/redis-cluster/

/usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf

/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.128 -p 9002

cluster nodes

redis搭建偽集群的方法
簡而言之,現(xiàn)在集群內(nèi)的節(jié)點情況如下

redis搭建偽集群的方法

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享標題:redis搭建偽集群的方法-創(chuàng)新互聯(lián)
文章來源:http://weahome.cn/article/dssegd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部