Redis集羣快速啓動腳本程序

這段時間在深入學習redis,從單機版到與sentinel模式再到集羣模式,sentinel模式倒是不難,兩三天時間足夠掌握,但是集羣模式可不是兩三天可以掌握的,光看文檔就得整整一天專心致志不分心的看一整天,在這裏附上我學習redis的網站redis中文官方網站,學習過程中,每天學習時間本來就不多,每次還要花十幾分鍾時間一個個啓動服務,簡直就是煩的不能再煩了,不懶的程序員不是好程序員,所以就想如何才能一鍵啓動和關閉,剛開始是想通過java控制終端,直接用Process來執行命令並且啓動,但是很遺憾的是隻能啓動一個,也是通過這件事情又複習了一遍面試官最愛問的"進程和線程的區別".沒辦法,只能通過腳本編程來實現這個功能了,所以專門花了三天時間學習腳本,這是我學習linux腳本的網站Linux Shell腳本教程,又花了兩天時間寫"懶人腳本",中間碰到的問題就是awk的使用,具體的教程在剛纔那個網站也有介紹.
已經搭建好了的或者會搭建的看官們可以直接看第三步.

1:搭建(建議參考redis中文官方網站)

搭建集羣的第一件事情我們需要一些運行在 集羣模式的Redis實例. 這意味這集羣並不是由一些普通的Redis實例組成的,集羣模式需要通過配置啓用,開啓集羣模式後的Redis實例便可以使用集羣特有的命令和特性了.

下面是一個最少選項的集羣的配置文件:

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

文件中的 cluster-enabled 選項用於開實例的集羣模式, 而 cluster-conf-file 選項則設定了保存節點配置文件的路徑, 默認值爲 nodes.conf.節點配置文件無須人爲修改, 它由 Redis 集羣在啓動時創建, 並在有需要時自動進行更新。

要讓集羣正常運作至少需要三個主節點,不過在剛開始試用集羣功能時, 強烈建議使用六個節點: 其中三個爲主節點, 而其餘三個則是各個主節點的從節點。

首先, 讓我們進入一個新目錄, 並創建六個以端口號爲名字的子目錄, 稍後我們在將每個目錄中運行一個 Redis 實例: 命令如下:

mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005

在文件夾 7000 至 7005 中, 各創建一個 redis.conf 文件, 文件的內容可以使用上面的示例配置文件, 但記得將配置中的端口號從 7000 改爲與文件夾名字相同的號碼。

從 Redis Github 頁面 的 unstable 分支中取出最新的 Redis 源碼, 編譯出可執行文件 redis-server , 並將文件複製到 cluster-test 文件夾, 然後使用類似以下命令, 在每個標籤頁中打開一個實例:

cd 7000
../redis-server ./redis.conf

2:使用redis-trib.rb創建集羣

現在我們已經有了六個正在運行中的 Redis 實例, 接下來我們需要使用這些實例來創建集羣, 併爲每個節點編寫配置文件。

通過使用 Redis 集羣命令行工具 redis-trib , 編寫節點配置文件的工作可以非常容易地完成: redis-trib 位於 Redis 源碼的 src 文件夾中, 它是一個 Ruby 程序, 這個程序通過向實例發送特殊命令來完成創建新集羣, 檢查集羣, 或者對集羣進行重新分片(reshared)等工作。

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

這個命令在這裏用於創建一個新的集羣, 選項–replicas 1 表示我們希望爲集羣中的每個主節點創建一個從節點。

之後跟着的其他參數則是這個集羣實例的地址列表,3個master3個slave redis-trib 會打印出一份預想中的配置給你看, 如果你覺得沒問題的話, 就可以輸入 yes , redis-trib 就會將這份配置應用到集羣當中,讓各個節點開始互相通訊,最後可以得到如下信息:

[OK] All 16384 slots covered

3:shell腳本

#!/bin/bash
#redis集羣快速啓動與關閉腳本
#條件一:當前文件夾下包括包含node開頭的各個節點文件夾,節點文件夾下包含redis.conf配置文件,不可以配置成守護線程,不然啓動時無法輸出info到infoFile
#條件二:當前文件夾下包括redis-server,redis-cli
#條件三:請保持node文件夾後的數字與內部配置文件的端口號一致,例如node_7000文件夾的端口號爲7000

#當前位置
cluster_dir=`ls`
#node節點的個數
node_size=0
#node節點數組
nodes=()
#信息文件
infoFile="infoFile"
#pid文件
pidFile="pidFile"
#創建infoFile和pidFile文件
touch infoFile
touch pidFile

#啓動以node開頭的文件夾下的redis節點,條件一:node開頭,條件二:必須是文件夾
function starCluster(){
echo "" > $infoFile
echo "========================端口號:======================="
for node in $cluster_dir
 do
  if [ ${node:0:4} = "node" ]
   then
    if [ -d ${node} ]
     then
      node_size=`expr ${node_size} + 1`
      echo -e "${node:5:8},\c"
      ./redis-server ${node}/redis.conf >> $infoFile& 
    fi
  fi
done
echo ""
echo "======================================================"
echo "===================有${node_size}個redis節點====================="
echo "======================================================"
}

#關閉所有節點
function stopCluster(){
cat $infoFile | grep "PID" |  awk '{ infoSize=length($0);infoIndex=index($0,"PID");print substr($0,infoIndex+4,infoSize) }' > $pidFile
echo "===================redis集羣的pid:===================="
for node in `cat $pidFile`
 do
  echo -e "${node}, \c}" 
  kill -9 ${node}&
done  
echo ""
echo "======================================================"
}

case $1 in
start) starCluster
;;
stop) stopCluster
;;
esac

4:使用腳本


上圖是我的文件夾視圖,re.sh就是我們的一鍵啓動腳本文件,redis-cli和redis-server是redis自己的腳本,dump.rdb是持久化存儲文件

使用方法:
1:先在當前目錄下創建一個re.sh文件,最好是通過linux命令創建"touch re.sh"
2:將上面的腳本數據複製到re.sh文件裏面,通過vim命令進入文件然後複製就可以了
3:在當前目錄下執行命令"chmod +x re.sh",這個命令是把這個腳本變成可執行文件
4:終於可以用了,啓動命令:"./re.sh start",效果如下圖

這裏注意啓動完成後,當前目錄下會生成infoFile和pidFile這兩個文件,用於記錄信息和啓動後的pid,啓動後不要刪掉,不然就無法一鍵關閉所有集羣服務了.
5:停止服務命令:"./re.sh stop"


注意:由於我並沒有配置dump.rdb的生成目錄,所以默認生成在了這裏,但是一堆服務用着一個rdb文件,持久化肯定是不對的,所以該環境只適合在自己電腦上學習集羣和練習管理集羣,如果需要學習集羣數據遷移,請自行配置一下rdb的生成目錄.

最後注意:各位看官如果看了這篇文章還有什麼想往腳本里加的功能,可以加我QQ告訴我490726075

發佈了32 篇原創文章 · 獲贊 21 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章