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
一下剛才存入的資料:
這就是叢集的基本功能。