歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> centos7安裝redis3.2.5集群

centos7安裝redis3.2.5集群

日期:2017/3/3 17:34:26   编辑:學習Linux

centos7安裝redis3.2.5集群


熱度5 評論 135 www.BkJia.Com 網友分享於: 2017-02-10 07:02:44 浏覽數7322次

centos7安裝redis3.2.5集群


centos7安裝redis3.2.5集群

本文是在虛擬機centos7系統上安裝redis3.2.5集群

redis集群簡介

redis集群在啟動的時候就自動在多個節點間分好片。同時提供了分片之間的可用性:當一部分redis節點故障或網絡中斷,集群也能繼續工作。但是,當大面積的節點故障或網絡中斷(比如大部分的主節點都不可用了),集群就不能使用。所以,從實用性的角度,Redis集群提供以下功能:  ● 自動把數據切分到多個redis節點中  ● 當一部分節點掛了或不可達,集群依然能繼續工作

Redis集群數據的分片

Redis集群不是使用一致性哈希,而是使用哈希槽。整個redis集群有16384個哈希槽,決定一個key應該分配到那個槽的算法是:計算該key的CRC16結果再模16834。集群中的每個節點負責一部分哈希槽,比如集群中有3個節點,則:  ● 節點A存儲的哈希槽范圍是:0 – 5500  ● 節點B存儲的哈希槽范圍是:5501 – 11000  ● 節點C存儲的哈希槽范圍是:11001 – 16384這樣的分布方式方便節點的添加和刪除。比如,需要新增一個節點D,只需要把A、B、C中的部分哈希槽數據移到D節點。同樣,如果希望在集群中刪除A節點,只需要把A節點的哈希槽的數據移到B和C節點,當A節點的數據全部被移走後,A節點就可以完全從集群中刪除。因為把哈希槽從一個節點移到另一個節點是不需要停機的,所以,增加或刪除節點,或更改節點上的哈希槽,也是不需要停機的。如果多個key都屬於一個哈希槽,集群支持通過一個命令(或事務, 或lua腳本)同時操作這些key。通過“哈希標簽”的概念,用戶可以讓多個key分配到同一個哈希槽。哈希標簽在集群詳細文檔中有描述,這裡做個簡單介紹:如果key含有大括號”{}”,則只有大括號中的字符串會參與哈希,比如”this{foo}”和”another{foo}”這2個key會分配到同一個哈希槽,所以可以在一個命令中同時操作他們。

Redis集群的主從模式

為了保證在部分節點故障或網絡不通時集群依然能正常工作,集群使用了主從模型,每個哈希槽有一(主節點)到N個副本(N-1個從節點)。在我們剛才的集群例子中,有A,B,C三個節點,如果B節點故障集群就不能正常工作了,因為B節點中的哈希槽數據沒法操作。但是,如果我們給每一個節點都增加一個從節點,就變成了:A,B,C三個節點是主節點,A1, B1, C1 分別是他們的從節點,當B節點宕機時,我們的集群也能正常運作。B1節點是B節點的副本,如果B節點故障,集群會提升B1為主節點,從而讓集群繼續正常工作。但是,如果B和B1同時故障,集群就不能繼續工作了。Redis集群的一致性保證Redis集群不能保證強一致性。一些已經向客戶端確認寫成功的操作,會在某些不確定的情況下丟失。產生寫操作丟失的第一個原因,是因為主從節點之間使用了異步的方式來同步數據。一個寫操作是這樣一個流程:1)客戶端向主節點B發起寫的操作2)主節點B回應客戶端寫操作成功3)主節點B向它的從節點B1,B2,B3同步該寫操作從上面的流程可以看出來,主節點B並沒有等從節點B1,B2,B3寫完之後再回復客戶端這次操作的結果。所以,如果主節點B在通知客戶端寫操作成功之後,但同步給從節點之前,主節點B故障了,其中一個沒有收到該寫操作的從節點會晉升成主節點,該寫操作就這樣永遠丟失了。就像傳統的數據庫,在不涉及到分布式的情況下,它每秒寫回磁盤。為了提高一致性,可以在寫盤完成之後再回復客戶端,但這樣就要損失性能。這種方式就等於Redis集群使用同步復制的方式。基本上,在性能和一致性之間,需要一個權衡。

創建和使用Redis集群

第一步: 下載redis3.2.5 source文件

我把下載的軟件放在/usr/soft下[root@localhost /soft] wget http://download.redis.io/releases/redis-3.2.5.tar.gz結果如下圖:

[root@localhost /soft] tar xvf redis-3.2.5.tar.gz[root@localhost /soft] cd redis-3.2.5[root@localhost /redis-3.2.5] make && make install這時候可能會報錯,原因是需要gcc gcc安裝[root@localhost /soft] yum install gcc成功之後,回到redis-3.2.5/src目錄,運行make命令[root@localhost /redis-3.2.5] make && make install不出意外是成功了。

第二步:檢測make命令執行的結果的正確性

輸出提示會強烈建議我們運行make test命令,目的是檢查make命令的結果有無錯誤(也可以不運行make tet命令,從而可以進行越過這個繼續redis集群搭建了)

[root@localhost /redis-3.2.5] make test這時可能會報錯,如下圖

原因是:缺少tcl

第三步:安裝tcl8.6.6

安裝tcl:[root@localhost /soft] wget http://prdownloads.sourceforge.net/tcl/tcl8.6.6-src.tar.gz[root@localhost /soft]tar xvf tcl8.6.6-src.tar.gz[root@localhost /tcl8.6.6] cd tcl8.6.6/unix/[root@localhost /unix]./configure make && make install等待一會,查看打出的信息,沒有錯誤就ok。現在回到redis-3.2.5/src目錄[root@localhost soft]# cd redis-3.2.5/src[root@localhost /src]# make test稍等,去喝一杯再回來

ok。到此,redis編譯都ok了

第四步:創建集群配置文件

[root@localhost soft]# mkdir redis_cluster[root@localhost soft]# cd redis_cluster[root@localhost redis_cluster]# mkdir conf在此目錄下,創建redis_7000.conf到redis_7005.conf六個配置文件現創建redis_7000.conf,其余5個cp就可以了,再把內容中的端口號改為對應的700*[root@localhost conf]#touch redis_7000.conf[root@localhost conf]#vim redis_7000.conf把daemonize    yes    pidfile  /var/run/redis_7000.pid         port  7000                              cluster-enabled  yes                     cluster-config-file  nodes_7000.conf      cluster-node-timeout  5000               appendonly  yes                          粘貼到文件中Esc :wq, 保存退出

[root@localhost conf]# cp redis_7000.conf  redis_7001.conf[root@localhost conf]# cp redis_7000.conf  redis_7002.conf[root@localhost conf]# cp redis_7000.conf  redis_7003.conf[root@localhost conf]# cp redis_7000.conf  redis_7004.conf[root@localhost conf]# cp redis_7000.conf  redis_7005.conf記得把cp後的文件內容的端口相應的修改字段說明:daemonize    yes                        //redis後台運行pidfile  /var/run/redis_7000.pid        //pidfile文件對應port  7000                              //端口cluster-enabled  yes                    //開啟集群  把注釋#去掉cluster-config-file  nodes_7000.conf    //集群的配置  配置文件首次啟動自動生成cluster-node-timeout  5000              //請求超時  設置5秒夠了appendonly  yes                         //aof日志開啟  有需要就開啟,它會每次寫操作都記錄一條日志使用tree命令可以清楚的查看目錄的結構:[root@localhost redis_cluster]#yum install tree[root@localhost redis_cluster]# tree -I conf配置好的6個文件如下圖

啟動這6個redis實例

查看啟動後的redis進程

查看redis6個進程的監聽端口

第五步:搭建集群

現在我們已經有了六個正在運行中的 Redis 實例, 接下來我們需要使用這些實例來創建集群, 並為每個節點編寫配置文件。通過使用 Redis 集群命令行工具 redis-trib , 編寫節點配置文件的工作可以非常容易地完成: redis-trib 位於 Redis 源碼的 src 文件夾中, 它是一個 Ruby 程序, 這個程序通過向實例發送特殊命令來完成創建新集群, 檢查集群, 或者對集群進行重新分片(reshared)等工作。所以我們需要安裝ruby的東西[root@localhost redis_cluster]# yum install ruby

[root@localhost redis_cluster]# yum install rubygems

[root@localhost redis_cluster]# gem install redis

[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這個命令在這裡用於創建一個新的集群, 選項–replicas 1 表示我們希望為集群中的每個主節點創建一個從節點。之後跟著的其他參數則是這個集群實例的地址列表,3個master3個slave redis-trib 會打印出一份預想中的配置給你看, 如果你覺得沒問題的話, 就可以輸入 yes , redis-trib 就會將這份配置應用到集群當中,讓各個節點開始互相通訊,最後可以得到如下信息:

輸入"yes",回車

左邊的“M:”表示該節點是master節點,相應的“S:”表示該節點為slave節點

測試集群:

Redis 分支中的 redis-cli 程序實現了非常基本的集群支持, 可以使用命令 redis-cli -c 來啟動。

在7000上set yy yao,集群自動存到7001上。在7000上set yy2 go2,集群自動存到7001上。在7000上get yy2,集群自動到7001上取值。

http://www.bkjia.com/Linuxjc/1191993.html TechArticle

Copyright © Linux教程網 All Rights Reserved