redis叢集的實現及使用php進行調用

來源:互聯網
上載者:User

本次的文章介紹的是關於redis叢集的實現及使用php進行調用,給大家分享一下,有需要的朋友可以參考一下

一、搭建redis叢集
1.概念解釋
redis 3.0之後版本支援redis-cluster叢集,Redis-Cluster採用無中心結構,每個節點儲存資料和整個叢集狀態,每個節點都和其他所有節點串連。其redis-cluster架構圖如下:

其結構特點:

 1、所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位協議最佳化傳輸速度和頻寬。 2、節點的fail是通過叢集中超過半數的節點檢測失效時才生效。 3、用戶端與redis節點直連,不需要中間proxy層.用戶端不需要串連叢集所有節點,串連叢集中任何一個可用節點即可。 4、redis-cluster把所有的物理節點映射到[0-16383]slot上(不一定是平均分配),cluster 負責維護node<->slot<->value。 5、Redis叢集預分好16384個桶,當需要在 Redis 叢集中放置一個 key-value 時,根據 CRC16(key) mod 16384的值,決定將一個key放到哪個桶中。
  現在我們是三個主節點分別是:A, B, C 三個節點,它們可以是一台機器上的三個連接埠,也可以是三台不同的伺服器。那麼,採用雜湊槽 (hash slot)的方式來分配16384個slot 的話,它們三個節點分別承擔的slot 區間是:      節點A覆蓋0-5460;      節點B覆蓋5461-10922;      節點C覆蓋10923-16383.

看不懂,,,,

     擷取資料:      如果存入一個值,按照redis cluster雜湊槽的演算法: CRC16('key')384 = 6782。 那麼就會把這個key 的儲存分配到 B 上了。同樣,當我串連(A,B,C)任何一個節點想擷取'key'這個key時,也會這樣的演算法,然後內部跳轉到B節點上擷取資料

2、Redis Cluster主從模式

redis cluster 為了保證資料的高可用性,加入了主從模式,一個主節點對應一個或多個從節點,主節點提供資料存取,從節點則是從主節點拉取資料備份,當這個主節點掛掉後,就會有這個從節點選取一個來充當主節點,從而保證叢集不會掛掉。並且如果之前的舊主節點恢複正常時。
  上面那個例子裡, 叢集有ABC三個主節點, 如果這3個節點都沒有加入從節點,如果B掛掉了,我們就無法訪問整個叢集了。A和C的slot也無法訪問。     所以我們在叢集建立的時候,一定要為每個主節點都添加了從節點, 比如像這樣, 叢集包含主節點A、B、C, 以及從節點A1、B1、C1, 那麼即使B掛掉系統也可以繼續正確工作。     B1節點替代了B節點,所以Redis叢集將會選擇B1節點作為新的主節點,叢集將會繼續正確地提供服務。 當B重新開啟後,它就會變成B1的從節點。    不過需要注意,如果節點B和B1同時掛了,Redis叢集就無法繼續正確地提供服務了。

3.redis叢集的搭建

叢集中至少應該有奇數個節點,所以至少有三個節點,每個節點至少有一個備份節點,所以下面使用6節點(主節點、備份節點由redis-cluster叢集確定)。

嗯,所有最少要6個redis服務。
然後啟動這6個redis服務,在本機上,但要記得啟動前要進行修改配置。

port  7000                                        //連接埠7000,7002,7003        bind 10.93.84.53                                     //預設ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則建立叢集時無法訪問對應的連接埠,無法建立叢集daemonize    yes                               //redis後台運行pidfile  ./redis_7000.pid          //pidfile檔案對應7000,7001,7002cluster-enabled  yes                           //開啟叢集  把注釋#去掉cluster-config-file  nodes.conf   //叢集的配置  設定檔初次開機自動產生 7000,7001,7002cluster-node-timeout  15000                //請求逾時  預設15秒,可自行設定appendonly  yes                           //aof日誌開啟  有需要就開啟,它會每次寫操作都記錄一條日誌 

然後把redis源碼中的src目錄中的redis-trib.rb拷到當前路徑中來。
安裝ruby環境

yum install ruby  yum install rubygems  gem install redis-3.2.2.gem

查的一下本機6個redis的啟動情況

ps -ef | grep redis

最後我們使用redis-trib.rb來建立redis叢集。使用create命令 –replicas 1 參數表示為每個主節點建立一個從節點,一對兩個,第一個為主第二個為從。

./redis-trib.rb create --replicas 1 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 127.0.0.1:7006

使用redis-cli進行測試,要加得加-c參數,以叢集方式進行串連。

redis-cli -c

要進得加-c參數,代表串連的是叢集方式。
至此,redis叢集搭建成功。
但是我這裡只是要本機測試的6個連接埠,真實的話最少都是要兩台機器的。我們怎麼做安全性呢?
1.修改redis.conf把bind選項改成當前的區域網路ip
2.配置防火牆只允許另一台的redis伺服器進行訪問,當然也要允許應用伺服器的ip進行訪問吧。。。不然程式都連不上redis服務,玩毛啊。。。。

//先關掉6379(redis服務使用的連接埠)iptables -I INPUT -p tcp --dport 6379  -j DROP //允許192.168.1.0這個機器進行訪問原生6379連接埠iptables -I INPUT -s 192.168.1.0 -p tcp --dport 6379 -j ACCEPT

二、php中串連到redis叢集
首先使用php –ri redis來查看redis擴充版本。要在3.0版本之上。
參考
第二個參數只要叢集中的一個節點就行了,並不需要全填上

$obj_cluster = new RedisCluster(NULL, ['127.0.0.1:6380']);echo $obj_cluster->get('name1');

搞定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.