Redis 集羣--------Redis-cluster

1集羣方案

1.官方方案redis-cluster搭建實戰node

2.客戶端分片技術(不推薦),擴容/縮容時,必須手動調整分片程序,出現故障不能自動轉移redis

3.可使用主從複製方式(不推薦)緩存

4.使用一些代理工具ruby

咱們知道主從複製方式實現集羣,性能不是很好,由於只有一個master,其餘都是slave,slave上只能符讀,並且都是master 的備份信息,因此比較冗餘app

 

因此咱們官方推薦的Redis-cluster來實現集羣。工具

 

2,Redis-cluster 實現原理性能

3,搭建集羣環境測試

安裝部署任何一個應用其實都很簡單,只要安裝步驟一步一步來就好了。下面說一下 Redis 集羣搭建規劃,因爲集羣至少須要6個節點(3主3從模式)。

建立文件夾 咱們計劃集羣中 Redis 節點的端口號爲 9001-9006 ,端口號即集羣下各實例文件夾。數據存放在 端口號/data 文件夾中。
mkdir /usr/local/redis-cluster
cd redis-cluster/
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data

   

複製腳本
在 /usr/local/redis-cluster 下建立 bin 文件夾,用來存放集羣運行腳本,並把安裝好的 Redis 的 src 路徑下的運行腳本拷貝過來。看命令:
cd /usr/local/redis-cluster
mkdir bin

cd /usr/local/redis-3.2.9/src

cp mkreleasehdr.sh redis-benchmark redis-check-aof  redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin

 

複製一個新 Redis 實例

咱們如今從已安裝好的 Redis 中複製一個新的實例到 9001 文件夾,並修改 redis.conf 配置。
cp -r /usr/local/redis    /usr/local/redis-cluster/9001

注意,修改 redis.conf 配置和單點惟一區別是下圖部分,其他仍是常規的這幾項:
port 9001(每一個節點的端口號)
daemonize yes
bind 192.168.119.131(綁定當前機器 IP)
dir /usr/local/redis-cluster/9001/data/(數據文件存放位置)
pidfile /var/run/redis_9001.pid(pid 9001和port要對應)
cluster-enabled yes(啓動集羣模式)
cluster-config-file nodes9001.conf(9001和port要對應)
cluster-node-timeout 15000
appendonly yes
再複製出五個新 Redis 實例
咱們已經完成了一個節點了,其實接下來就是機械化的再完成另外五個節點,其實能夠這麼作:把 9001 實例 複製到另外五個文件夾中,惟一要修改的就是 redis.conf 中的全部和端口的相關的信息便可,其實就那麼四個位置。開始操做,看圖:
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9002
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9003
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9004
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9005
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9006
\cp -rf 命令是不使用別名來複制,由於 cp 實際上是別名 cp -i,操做時會有交互式確認,比較煩人。

修改 9002-9006 的 redis.conf 文件

其實很是簡單了,你經過搜索會發現其實只有四個點須要修改,咱們全局替換下吧,進入相應的節點文件夾,作替換就行了。命令很是簡單,看圖:
vi /usr/local/redis-cluster/9002/redis/etc/redis.conf
vi /usr/local/redis-cluster/9003/redis/etc/redis.conf
vi /usr/local/redis-cluster/9004/redis/etc/redis.conf
vi /usr/local/redis-cluster/9005/redis/etc/redis.conf
vi /usr/local/redis-cluster/9006/redis/etc/redis.conf



%s/9001/9002
%s/9001/9003
%s/9001/9004
%s/9001/9005
%s/9001/9006


其實咱們也就是替換了下面這四行:


port 9002
dir /usr/local/redis-cluster/9002/data/
cluster-config-file nodes-9002.conf
pidfile /var/run/redis_9002.pid
啓動9001-9006六個節點
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9001/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9002/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9003/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9004/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9005/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9006/redis/etc/redis.conf
隨便找一個節點測試試
/usr/local/redis-cluster/9001/redis/bin/redis-cli -h 192.168.212.150 -c -p 9001
(error) CLUSTERDOWN Hash slot not served

這是由於雖然咱們配置並啓動了 Redis 集羣服務,可是他們暫時還並不在一個集羣中,互相直接發現不了,並且尚未可存儲的位置,就是所謂的slot(槽)。

安裝集羣所需軟件

因爲 Redis 集羣須要使用 ruby 命令,因此咱們須要安裝 ruby 和相關接口。


yum install ruby
yum install rubygems
gem install redis  使用本地上傳方式
把 redis-4.2.1.gem 下載下來,放到文件夾中,啓動命令 gem install -l redis-3.2.1.gem

 

 
 

/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.212.150:9001 192.168.212.150:9002 192.168.212.150:9003 192.168.212.150:9004 192.168.212.150:9005 192.168.212.150:9006

簡單解釋一下這個命令:調用 ruby 命令來進行建立集羣,--replicas 1 表示主從複製比例爲 1:1,即一個主節點對應一個從節點;而後,默認給咱們分配好了每一個主節點和對應從節點服務,以及 solt 的大小,由於在 Redis 集羣中有且僅有 16383 個 solt ,默認狀況會給咱們平均分配,固然你能夠指定,後續的增減節點也能夠從新分配。

M: 10222dee93f6a1700ede9f5424fccd6be0b2fb73 爲主節點Id

S: 9ce697e49f47fec47b3dc290042f3cc141ce5aeb 192.168.119.131:9004 replicates 10222dee93f6a1700ede9f5424fccd6be0b2fb73 從節點下對應主節點Id

目前來看,9001-9003 爲主節點,9004-9006 爲從節點,並向你確認是否贊成這麼配置。輸入 yes 後,會開始集羣建立。

記住輸入yes

驗證集羣環境

依然是經過客戶端命令鏈接上,經過集羣命令看一下狀態和節點信息等。

 



總結一下 這一篇 Redis 集羣部署搭建的文章真的是一步一步的走下來的,只要你安裝個人步驟來,就保證你能成功搭建一個 Redis 集羣玩玩,也能夠這麼說,除了步驟繁瑣外,幾乎不存在技術含量,估計能看完的人都感受累(說真的,寫這種文章真的很累人)。 接下來可能就是動態擴容、增長節點和減小節點,從新分配槽大小等,固然,還有最重要的就是怎麼和咱們程序結合起來,以及如何更好的把 Redis 緩存集羣發揮出應有的效果,這些纔是最重要的。

4,redis-cli -h 192.168.178.110 -c -p 9001  ,加參數 -c 可鏈接到集羣,由於上面 redis.conf 將 bind 改成了ip地址,因此 -h 參數不能夠省略spa

     沒寫-c,雖然也有集羣環境,可是,我操做的時候,它會提醒報錯,要去正確的節點進行操做3d

   192.168.178.110:9001> set name 'chris'
   (error) MOVED 5798 192.168.178.110:9002

      寫-c 以後,它會轉發到相應的節點進行操做  

192.168.178.110:9001> set name 22
-> Redirected to slot [5798] located at 192.168.178.110:9002

搭建的集羣環境是三主三從,主的環境掛了以後,能夠在從的節點找到數據

相關文章
相關標籤/搜索