1. 程式人生 > >cluster叢集、資料分片

cluster叢集、資料分片

在前面配置了一個簡單的redis主從架構:
這裡寫圖片描述

我們現在進入真正的叢集配置:
這裡寫圖片描述

如果我們的資料特別大,併發壓力特別高,我們的redis主伺服器也會有很大壓力,所以我們需要多個主從,也就是叢集的架構。
在mysql裡,多個主從的架構下,我們藉助了中間價mycat。比如,我們插入一條新聞資料,這個中間價mycat就是通過一定演算法來決定這條新聞是插入哪一個伺服器中。

redis其實在叢集裡面也能做到這一點,我們配置好叢集之後,比如set name jack,可以通過某種演算法來決定這個資料是進入我們哪一個redis伺服器的主節點。這就是我們所謂的redis叢集裡的一個功能——資料分片。

其實在我們實戰當中,很多時候一臺伺服器不可能承擔所有資料,我們做分散式開發,資料也要分散式儲存。

去掉主從配置

1、我們讓各個redis例項獨立執行

#註釋掉配置檔案中的
slaveof xxxxx

2、另外還需要停止哨兵(sentinel)。
3、你的redis版本必須是3.x以上。配置叢集需要至少3個主節點(每個主節點對應一個從節點,這樣一共6個節點)

叢集的關鍵配置

建立6個節點,埠分別是6379、6380、6381、6479、6480、6481。
配置檔案中:
port必須不一樣;pidfile必須不一樣
dbfilename前面加#註釋掉
cluster-enabled yes 表示開啟叢集
cluster-config-file nodes_6379.conf 叢集模式下,每個redis節點生產一個配置檔案,由redis自己維護,檔名區分即可。
appendonly yes 開啟AOF儲存模式
appendfilename 也要區分檔名
cluster-node-timeout 10000

6379.conf:

port 6379
pidfile "/usr/local/redis/redis_6379.pid"
#dbfilename "dump6379.rdb"
appendonly yes
appendfilename "appendonly6379.aof"
 cluster-enabled yes
  cluster-config-file nodes-6379.conf
   cluster-node-timeout 15000

其他幾個配置檔案也要分別做修改(注意區分不一樣的地方)

關閉rdb儲存

   save ""

#save 900 1
#save 300 10
#save 60 10000

這裡寫圖片描述
其他修改配置檔案也要分別做修改。

管理叢集

需要安裝ruby工具包

#切換到root使用者
su - root
yum -y install ruby ruby-devel rubygems rpm-build
#安裝管理redis的工具
gem install redis

安裝好後,在我們redis目錄/usr/local/redis/bin/下多了一個檔案:

redis-trib.rb

啟動這6個例項

/usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6380.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6381.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6479.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6480.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6481.conf

為了簡化,我們可以把這些寫入一個shell指令碼,比如start,然後執行這個檔案./start 就啟動6個節點了。

啟動之後,我們檢視程序:
這裡寫圖片描述
cluster代表各個節點已經做好準備進入叢集。如果沒有這個可能前面的配置是有錯誤的。

清空所有節點的redis資料

(在前面學習的時候增加過資料。)
資料存放在我們配置的路徑/usr/local/redis/datadir/
這個目錄下可能有.rdb檔案,因為在我們前面學習中是用rdb模式儲存資料的。
我們現在把這些檔案都刪掉(因為我們是學習演示,所以直接刪除更方便)
這裡寫圖片描述

啟動叢集

./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6479 127.0.0.1:6480 127.0.0.1:6481

執行上面命令之後可以看到:
這裡寫圖片描述

可以看出有3個master和3個slave。
然後我們輸入:yes
這裡寫圖片描述
ok,我們叢集最簡單的配置已經成功啦(注意這個工具緊緊是幫我們把各個節點配置成叢集)。

可能出現的錯誤:ERR Slot xxxxxx is already busy( Redis::CommandError)
如果上一次執行出錯,則必須去datadir對應的目錄手工刪除 自動生產的cluster配置檔案

測試叢集

連結叢集的方式,需要多加一個引數

./redis-cli -h 127.0.0.1 -c -p 6379
#-c代表連結到叢集

檢視叢集資訊:
這裡寫圖片描述

我們來新增資料,發現是存入到6380那個節點的:
這裡寫圖片描述

我們連結上6381這個節點get一下剛才存入的資料:
這裡寫圖片描述

這就是叢集的基本功能。