天天看點

redis叢集部署(redis-cluster)

什麼是redis叢集?

    Redis 叢集是一個分布式(distributed)、容錯(fault-tolerant)的 Redis 實作, 叢集可以使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset)。

Redis 叢集中不存在中心(central)節點或者代理(proxy)節點, 叢集的其中一個主要設計目标是達到線性可擴充性(linear scalability)。

Redis 叢集為了保證一緻性(consistency)而犧牲了一部分容錯性: 系統會在保證對網絡斷線(net split)和節點失效(node failure)具有有限(limited)抵抗力的前提下, 盡可能地保持資料的一緻性。

     叢集将節點失效視為網絡斷線的其中一種特殊情況。

     叢集的容錯功能是通過使用主節點(master)和從節點(slave)兩種角色(role)的節點(node)來實作的:

主節點和從節點使用完全相同的伺服器實作, 它們的功能(functionally)也完全一樣, 但從節點通常僅用于替換失效的主節點。

不過, 如果不需要保證“先寫入,後讀取”操作的一緻性(read-after-write consistency), 那麼可以使用從節點來執行隻讀查詢。

      redis叢集架構圖:

redis叢集部署(redis-cluster)
Redis 提供了多種不同級别的持久化方式:

  • RDB 持久化可以在指定的時間間隔内生成資料集的時間點快照(point-in-time snapshot)。
  • AOF 持久化記錄伺服器執行的所有寫操作指令,并在伺服器啟動時,通過重新執行這些指令來還原資料集。 AOF 檔案中的指令全部以 Redis 協定的格式來儲存,新指令會被追加到檔案的末尾。 Redis 還可以在背景對 AOF 檔案進行重寫(rewrite),使得 AOF 檔案的體積不會超出儲存資料集狀态所需的實際大小。
  • Redis 還可以同時使用 AOF 持久化和 RDB 持久化。 在這種情況下, 當 Redis 重新開機時, 它會優先使用 AOF 檔案來還原資料集, 因為 AOF 檔案儲存的資料集通常比 RDB 檔案所儲存的資料集更完整。
  • 你甚至可以關閉持久化功能,讓資料隻在伺服器運作時存在。

了解 RDB 持久化和 AOF 持久化之間的異同是非常重要的, 以下幾個小節将詳細地介紹這這兩種持久化功能, 并對它們的相同和不同之處進行說明。

redis 分為兩種檔案格式:
    1.全量資料(RDB):是把記憶體中的資料寫入磁盤,便于下次讀取檔案進行加載。
    2.增量請求(AOF):是把記憶體中的資料序列化為操作請求,用于讀取檔案進行replay得到資料。
redis 存儲分為記憶體儲存、磁盤存儲和log檔案三部分。      
伺服器配置:
數量:3台
IP:10.200.134.6  10.200.134.8 10.200.134.34
端口:每台伺服器起3個端口:6379 6380 6381
cluster:每台伺服器建立3個目錄:cluster/6379  cluster/6380  cluster/6381

yum install  ruby rubygems -y

tar zxvf redis-3.0.5.tar.gz
mv redis-3.0.5 /usr/local/redis 
cd /usr/local/redis
make MALLOC=libc && make install

#redis-3.2.1.zip 安裝包在附件,自行下載下傳
unzip redis-3.2.1.zip 
gem install redis-3.2.1.gem 


ln -s /usr/local/redis/src/redis-server /usr/bin/
ln -s /usr/local/redis/src/redis-cli /usr/bin/

mkdir -pv /usr/local/redis/cluster/{6379,6380,6381}

cp redis.conf cluster/6379/
cp redis.conf cluster/6380/
cp redis.conf cluster/6381/



#3台伺服器修改6379 6380 6381下的redis.conf配置檔案:

daemonize yes
#其餘兩個redis.conf就改下端口為6380 和 6381就可以了,其他是一樣的
port 6379
cluster-enabled yes
cluster-config-file nodes-6379.conf

#3台伺服器啟動redis
redis-server /usr/local/redis/cluster/6379/redis.conf 
redis-server /usr/local/redis/cluster/6380/redis.conf 
redis-server /usr/local/redis/cluster/6381/redis.conf 

#任意1台伺服器建立叢集
redis-trib.rb create --replicas 1 10.200.134.6:6379 10.200.134.6:6380 10.200.134.6:6381 10.200.134.34:6379 10.200.134.34:6380 10.200.134.34:6381 10.200.134.8:6379 10.200.134.8:6380 10.200.134.8:6381

指令的意義如下:
給定 redis-trib.rb 程式的指令是 create , 這表示我們希望建立一個新的叢集。
選項 --replicas 1 表示我們希望為叢集中的每個主節點建立一個從節點。
之後跟着的其他參數則是執行個體的位址清單, 我們希望程式使用這些位址所訓示的執行個體來建立新叢集。

簡單來說, 以上指令的意思就是讓 redis-trib 程式建立一個包含三個主節點和三個從節點的叢集。
接着, redis-trib 會列印出一份預想中的配置給你看, 如果你覺得沒問題的話, 就可以輸入 yes , redis-trib 就會将這份配置應用到叢集當中:



>>> Creating cluster
Connecting to node 10.200.134.6:6379: OK
Connecting to node 10.200.134.6:6380: OK
Connecting to node 10.200.134.6:6381: OK
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
10.200.134.6:6379
10.200.134.6:6380
10.200.134.6:6381
......more
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.


#檢查叢集節點:
/usr/local/redis/src/redis-trib.rb check 10.200.134.6:6379
#使用redis-cli指令測試redis叢集
[root@69_server ~]# redis-cli -c -p 6379
10.200.134.6:6379> set foo bar
-> Redirected to slot [12182] located at 10.200.134.6:6380
OK
10.200.134.6:6380> set hello world
-> Redirected to slot [866] located at 10.200.134.6:6379
OK
10.200.134.6:6379> get foo
-> Redirected to slot [12182] located at 10.200.134.6:6380
"bar"
10.200.134.6:6380> get hello
-> Redirected to slot [866] located at 10.200.134.6:6379
"world"

redis-cli是叢集最基本的支援,依靠 Redis 叢集節點來将它轉向(redirect)至正确的節點      

繼續閱讀