1. 程式人生 > >centos 搭建redis叢集

centos 搭建redis叢集

前言

搭建叢集需要6個點,我是3臺虛擬機器每臺兩個例項(根據自己的資源而定)
本文redis採用當前官網最新版本 redis-4.0.9
虛擬機器系統 Centos7.4
  • 叢集功能限制
    1:key批量操作支援有限
    2:key事物操作支援有限
    3:不支援多資料庫空間,單機下redis可以支援16(0-15)個庫,叢集模式下只能使用一個數據庫空間,即 db0 .
    4:複製結構只支援一層,從節點只能複製主節點,不支援巢狀樹狀複製
    5:key作為資料分割槽的最小粒度,因此不能將一個大的鍵值物件如 hash 、list等對映到不同的節點。

1:各節點安裝redis

wget http://download.redis.io/releases/redis-4.0.9.tar.gz

2:解壓編譯安裝

tar -zxvf redis-4.0.9.tar.gz     //解壓
cd redis-4.0.9      //進入解壓後的目錄
make && make install  //編譯安裝

3:建立 Redis 節點

分別在每臺虛擬機器/opt/redis-4.0.9/ 下建立 redis_cluster
mkdir redis_cluster
cp /opt/redis-4.0.9/redis.cof /opt/redis_cluster/redis01.conf
cp /opt/redis-4.0.9/redis.cof /opt/redis_cluster/redis02.conf 每臺機器配置兩個redis例項檔案,修改埠等資訊

各節點配置檔案進行以下修改:

port  7001     //其餘5個點埠7002,7003,7004,7005,7006        
bind 本機ip     //預設ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則建立叢集時無法訪問對應的埠,無法建立叢集
daemonize    yes     //redis後臺執行
pidfile  /var/run/redis_7001.pid   //pidfile檔案
cluster-enabled
yes //開啟叢集 把註釋#去掉 cluster-config-file nodes_7001.conf //叢集的配置 配置檔案首次啟動自動生成 cluster-node-timeout 15000 //請求超時,預設15秒,可自行設定 appendonly yes //aof日誌開啟 有需要就開啟,它會每次寫操作都記錄一條日誌

4:啟動全部節點

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

可以看到3臺虛擬機器每個機器2個節點都啟動起來了。

5:建立叢集(方法一)

  • Redis 官方提供了 redis-trib.rb 這個工具,就在解壓目錄的 src 目錄中,第三步中已將它複製到 /usr/local/bin 目錄中,可以直接在命令列中使用了。使用下面這個命令即可完成安裝。
redis-trib.rb  create  --replicas 1  10.30.X.X:7001   10.30.X.X:7002   10.30.X.X:7003  10.30.X.X:7004  10.30.X.X:7005  10.30.X.X:7006
  • –replicas 1 表示指定每個master建立1個從節點。

執行時如果遇到 /usr/bin/env: ruby: No such file or directory 報錯
由於這個工具是用 ruby 實現的,所以需要安裝 ruby。
安裝ruby:
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
redis4.0之後需要 redis requires Ruby version >= 2.2.2
所以需要去官網拉取新的ruby包。
http://www.ruby-lang.org/en/downloads/
再次執行命令:

redis-trib.rb  create  --replicas 1  10.30.X.X:7001   10.30.X.X:7002   10.30.X.X:7003  10.30.X.X:7004  10.30.X.X:7005  10.30.X.X:7006

這裡寫圖片描述
輸入 yes 即可,然後出現如下內容,說明安裝成功。

這裡寫圖片描述

到這一步叢集就算搭建完成 ,現在就可以登入到叢集進行操作驗證。

6:建立叢集(方法二)

通過Gossip協議彼此通訊握手,達到感知對方的存在。
命令:cluster meet x.x.x.x 7002

這裡寫圖片描述

節點握手之後叢集還不能正常工作,這時叢集處於下線狀態,所有資料讀寫都被禁止。

這裡寫圖片描述

可以看到當前所有插槽沒有分配到節點,因此叢集無法完成槽到節點的對映。只有當16384個槽全部分配給節點後,叢集才進入線上狀態。

6.1:分配槽

命令(登入要分配曹位的節點):cluster addslots {0...5461} (分配0-5461槽位給當前機器)

6.2:新增從節點

命令:cluster replicate 主節點ID
例:127.0.0.1:7001> cluster replicate 2db18763b42040c76b1832e5b06c43bb5b78089f