redis在Windows下以後臺服務一鍵搭建集羣(多機器)
一、概述
此教程介紹如何在windows系統中多臺機器之間佈置redis集羣,同時要以後臺服務的模式運行。佈置以腳本的形式,一鍵完成。多臺機器之間佈置集羣比單臺機器佈置僞集羣複雜得多,關於單機僞集羣佈置,參見另博文《redis在Windows下以後臺服務一鍵搭建集羣(單機--僞集羣)》。
二、準備的工具與環境
此節準備環境部分,與《redis在Windows下以後臺服務一鍵搭建集羣(單機--僞集羣)》說明一樣,不同的是,環境可以只在其中一臺機器上配置即可,然後最後操作執行集羣的指令也只能在此臺機器完成。
2.1資源下載
以下準備的工具,想要了解詳細過程的,可以逐一按下面的分步說明,一一下載。當然,不想麻煩的,這裏有一個包含所有工具的完整的包,直接下載即可,csdn下載鏈接:http://download.csdn.net/download/mingojiang/10188229
1.下載Redis for windows的最新版本,解壓到c:\redis目錄下備用。github下載鏈接:https://github.com/MSOpenTech/redis/releases
2.下載ruby環境RubyInstaller,這是ruby的運行環境。官網下載:http://rubyinstaller.org/downloads/ 我選的是“Ruby 2.3.3 (x64)”。
3,安裝 GEM,Redis的ruby支持環境。由於GFW的問題,GEM的源在國內不可用,可以@翻##牆,提供一下免費&&翻@#牆工具,百度網盤下載鏈接:https://pan.baidu.com/s/1eSiLWo6密碼: enfm,下載後需要解壓碼:edsryu4yu9hgfr34kj098@#^%(*@#FHk43ee6y9p8743。
4,下載 redis-trib.rb ,放到c:\redis目錄下備用
github下載鏈接:https://github.com/antirez/redis/tree/3.2/src
這個是redis集羣工作要用到的小工具,ruby語言開發的小工具。
2.2安裝環境
1. 安裝RubyInstaller
安裝2.1章中第2節下載的RubyInstaller,勾選
Install Td/Tk Support
Add Ruby executables to your PATH
Associate .rb and .rbw files with this Ruby installation
2.安裝 GEM
番@#!牆:運行第2.1章3節中下載的工具
顯示已經連接成功了,這個時候,你可以直接安裝redis與ruby之間通信的一個組件了,直接在命令行輸入命令:
gem install redis
提示成功即可。
至此環境準備完閉
三、創建實例腳本
注意:由於中英文可能遇到兼容問題,所以運行腳本時,請把腳本文件放到英文目錄下。
關於腳本,嫌麻煩的,通過本人csdn下載鏈接可直接下載,裏面包含了所需的所有資料,下載鏈接爲:http://download.csdn.net/download/mingojiang/10188229
創建一文本“install.bat”,打開腳本編輯,以三臺機器,每臺機器三個節點爲例,分別爲每臺機器創建一份腳本。前三個參數IP、端口前綴與安裝路徑需要自行配置,請參看腳本註釋說明,如下:
rem 本機IP,請自行配置
set localIp=192.168.1.159
rem 本機要開放的端口,一般以本機IP的尾號,固定三尾數,
rem 不夠三位,後補0,如192.168.1.159,那設置成159,
rem 如果本機IP爲192.168.1.31,那設置爲310
set portPre=159
rem 你要安裝的盤符,可自行配置
set InstallPath=D:\
set sourcePath=%~dp0
cd /d %InstallPath%
mkdir redis-cluster
cd redis-cluster
mkdir %portPre%01 %portPre%02 %portPre%03
copy %sourcePath%redis-server.exe %portPre%01
copy %sourcePath%redis-server.exe %portPre%02
copy %sourcePath%redis-server.exe %portPre%03
copy %sourcePath%EventLog.dll %portPre%01
copy %sourcePath%EventLog.dll %portPre%02
copy %sourcePath%EventLog.dll %portPre%03
copy %sourcePath%redis.windows-service.conf %portPre%01
copy %sourcePath%redis.windows-service.conf %portPre%02
copy %sourcePath%redis.windows-service.conf %portPre%03
copy %sourcePath%redis-trib.rb
copy %sourcePath%redis.windows-service.conf
copy %sourcePath%redis-cli.exe
copy %sourcePath%startLocalRedisService.bat
copy %sourcePath%stopLocalRedisService.bat
copy %sourcePath%uninstall.bat
copy %sourcePath%CreateCluster.bat
copy %sourcePath%add-auth.bat
rename %portPre%01\redis.windows-service.conf redis.conf
rename %portPre%02\redis.windows-service.conf redis.conf
rename %portPre%03\redis.windows-service.conf redis.conf
rem 關閉回顯
@echo off
rem 定義變量延遲環境
setlocal enabledelayedexpansion
rem 讀取所有內容
for /f "eol=* tokens=*" %%i in (%portPre%01\redis.conf) do (
rem 設置變量a爲每行內容
set a=%%i
rem 如果該行有123,則將其改爲456
set "a=!a:# cluster-enabled yes=cluster-enabled yes!"
rem 修改綁定的IP
set "a=!a:bind 127.0.0.1=bind %localIp%!"
rem 把修改後的全部行存入$
set "a=!a:port 6379=port %portPre%01!"
set "a=!a:dir ./=dir %InstallPath%redis-cluster\%portPre%01\!"
set "a=!a:# cluster-config-file nodes-6379.conf=cluster-config-file nodes.conf!"
echo !a!>>$)
rem 用$的內容替換原來a.txt內容
move $ %portPre%01\redis.conf
for /f "eol=* tokens=*" %%i in (%portPre%02\redis.conf) do (
set a=%%i
set "a=!a:# cluster-enabled yes=cluster-enabled yes!"
rem 修改綁定的IP
set "a=!a:bind 127.0.0.1=bind %localIp%!"
set "a=!a:port 6379=port %portPre%02!"
set "a=!a:dir ./=dir %InstallPath%redis-cluster\%portPre%02\!"
set "a=!a:# cluster-config-file nodes-6379.conf=cluster-config-file nodes.conf!"
echo !a!>>$)
move $ %portPre%02\redis.conf
for /f "eol=* tokens=*" %%i in (%portPre%03\redis.conf) do (
set a=%%i
set "a=!a:# cluster-enabled yes=cluster-enabled yes!"
rem 修改綁定的IP
set "a=!a:bind 127.0.0.1=bind %localIp%!"
set "a=!a:port 6379=port %portPre%03!"
set "a=!a:dir ./=dir %InstallPath%redis-cluster\%portPre%03\!"
set "a=!a:# cluster-config-file nodes-6379.conf=cluster-config-file nodes.conf!"
echo !a!>>$)
move $ %portPre%03\redis.conf
@echo on
echo modify redis.conf file finished....
echo begin install redis windows services.....
%InstallPath%redis-cluster\%portPre%01\redis-server.exe --service-install %InstallPath%redis-cluster\%portPre%01\redis.conf --service-name %portPre%01redisM
%InstallPath%redis-cluster\%portPre%02\redis-server.exe --service-install %InstallPath%redis-cluster\%portPre%02\redis.conf --service-name %portPre%02redisM
%InstallPath%redis-cluster\%portPre%03\redis-server.exe --service-install %InstallPath%redis-cluster\%portPre%03\redis.conf --service-name %portPre%03redisM
echo install redis windows services finished.....
echo begin start all the redis as windows service......
%InstallPath%redis-cluster\%portPre%01\redis-server.exe --service-start --service-name %portPre%01redisM
%InstallPath%redis-cluster\%portPre%02\redis-server.exe --service-start --service-name %portPre%02redisM
%InstallPath%redis-cluster\%portPre%03\redis-server.exe --service-start --service-name %portPre%03redisM
echo start all the redis as windows service finished....
rem 延時20秒,自動關閉窗口
ping -n 20 127.0>nul
四、創建集羣腳本
通過以上第三節中的說明,分別在每個機器上創建一個腳本,並執行成功,然後在部署了環境的服務器上執行集羣搭建工作。也是通過腳本完成,創建文本,命名“CreateCluster.bat”, 腳本需要配置每個機器的IP與端口號前綴,配置在腳本的前幾行,配置好後,執行腳本按提醒操作,成功後即可,腳本如下:
rem 必須自己指定各個結點的IP與對應的端口前綴,格式爲IP:portPre
rem 必須詳細配置,此爲三個服務器的IP,與對應redis結點的端口號前綴(端口號是連接的)
set localIp1=192.168.1.159:159
set localIp2=192.168.1.159:160
set localIp3=192.168.1.159:161
cd /d %~dp0
echo begin create redis cluster......
redis-trib.rb create --replicas 2 %localIp1%01 %localIp2%01 %localIp3%01 %localIp2%02 %localIp3%02 %localIp1%02 %localIp3%03 %localIp1%03 %localIp2%03
echo create redis cluster finished....
rem 延時20秒,自動關閉窗口
ping -n 20 127.0>nul
五、集羣加密腳本
如果你無要爲你的集羣加密,請路過此節。爲每臺機器創建文本,命名“add-auth.bat”,腳本需要配置端口前綴與密碼,密碼需要全部配置成一樣,配置好後,執行腳本按提醒操作,成功後即可,腳本如下:
rem 本機要開放的端口,一般以本機IP的尾號,固定三尾數,
rem 不夠三位,後補0,如192.168.1.159,那設置成159,
rem 如果本機IP爲192.168.1.31,那設置爲%portPre%
set portPre=159
rem 給你的集羣加上密碼,可自行配置
set auth_password=#disiswnin((ndw0rksinm0stP0SIXsyst#mslik#Linux@*BSD@0ux(nd0SX(r#th#tw00p#r(tingsyst#
cd /d %~dp0
echo begin stop all the redis as windows service......
%portPre%01\redis-server.exe --service-stop --service-name %portPre%01redisM
%portPre%02\redis-server.exe --service-stop --service-name %portPre%02redisM
%portPre%03\redis-server.exe --service-stop --service-name %portPre%03redisM
echo stop all the redis as windows service finished....
echo begin add password to the windows service redis......
@echo off
rem 定義變量延遲環境
setlocal enabledelayedexpansion
rem 讀取所有內容
for /f "eol=* tokens=*" %%i in (%portPre%01\redis.conf) do (
rem 設置變量a爲每行內容
set a=%%i
rem 如果該行有123,則將其改爲456
set "a=!a:# requirepass foobared=requirepass %auth_password%!"
set "a=!a:# masterauth <master-password>=masterauth %auth_password%!"
echo !a!>>$)
rem 用$的內容替換原來a.txt內容
move $ %portPre%01\redis.conf
for /f "eol=* tokens=*" %%i in (%portPre%02\redis.conf) do (
set a=%%i
set "a=!a:# cluster-config-file nodes-6379.conf=cluster-config-file nodes.conf!"
set "a=!a:# requirepass foobared=requirepass %auth_password%!"
set "a=!a:# masterauth <master-password>=masterauth %auth_password%!"
echo !a!>>$)
move $ %portPre%02\redis.conf
for /f "eol=* tokens=*" %%i in (%portPre%03\redis.conf) do (
set a=%%i
set "a=!a:# requirepass foobared=requirepass %auth_password%!"
set "a=!a:# masterauth <master-password>=masterauth %auth_password%!"
echo !a!>>$)
move $ %portPre%03\redis.conf
@echo on
echo end add password to the windows service redis......
echo begin start all the redis as windows service......
%portPre%01\redis-server.exe --service-start --service-name %portPre%01redisM
%portPre%02\redis-server.exe --service-start --service-name %portPre%02redisM
%portPre%03\redis-server.exe --service-start --service-name %portPre%03redisM
echo start all the redis as windows service finished....
echo off
rem 延時30秒,自動關閉窗口
ping -n 10 127.0>nul
六、卸載集羣腳本
對安裝後的集羣服務,如果想要卸載,流程是,先停止所有節點服務,然後再反註冊即可。爲每臺機器創建一個文本,每個機器腳本第一個參數需要配置端口前綴,腳本命名“uninstall.bat”,然後編輯腳本:
rem 本機要開放的端口,一般以本機IP的尾號,固定三尾數,
rem 不夠三位,後補0,如192.168.1.159,那設置成159,
rem 如果本機IP爲192.168.1.31,那設置爲310
set portPre=159
cd /d %~dp0
echo begin stop all the redis as windows service......
%portPre%01\redis-server.exe --service-stop --service-name %portPre%01redisM
%portPre%02\redis-server.exe --service-stop --service-name %portPre%02redisM
%portPre%03\redis-server.exe --service-stop --service-name %portPre%03redisM
echo stop all the redis as windows service finished....
echo "unistall redis service....."
%portPre%01\redis-server.exe --service-uninstall --service-name %portPre%01redisM
%portPre%02\redis-server.exe --service-uninstall --service-name %portPre%02redisM
%portPre%03\redis-server.exe --service-uninstall --service-name %portPre%03redisM
echo "uninstall redis service finished"
rem 延時10秒,自動關閉窗口
ping -n 10 127.0>nul
七、停止集羣節點腳本
有時想要停止所有節點服務,在服務管理器中,一個一個手動停止也是一種辦法,但是麻煩,一個一個操作,費事,可通過腳本一鍵停止,爲每臺機器創建一個文本,配置第一個參數,腳本命名“stopLocalRedisService.bat”,編輯腳本:
rem 本機要開放的端口,一般以本機IP的尾號,固定三尾數,
rem 不夠三位,後補0,如192.168.1.159,那設置成159,
rem 如果本機IP爲192.168.1.31,那設置爲310
set portPre=159
cd /d %~dp0
echo begin stop all the redis as windows service......
%portPre%01\redis-server.exe --service-stop --service-name %portPre%01redisM
%portPre%02\redis-server.exe --service-stop --service-name %portPre%02redisM
%portPre%03\redis-server.exe --service-stop --service-name %portPre%03redisM
echo stop all the redis as windows service finished....
rem 延時5秒,自動關閉窗口
ping -n 5 127.0>nul
八、啓動集羣腳本腳本
有時想要啓動所有節點服務,在服務管理器中,一個一個手動啓動也是一種辦法,但是麻煩,一個一個操作,費事,可通過腳本一鍵啓動,每臺機器創建一個文本,配置第一個參數,腳本命名“startLocalRedisService.bat”,編輯腳本:
rem 本機要開放的端口,一般以本機IP的尾號,固定三尾數,
rem 不夠三位,後補0,如192.168.1.159,那設置成159,
rem 如果本機IP爲192.168.1.31,那設置爲310
set portPre=159
cd /d %~dp0
echo begin start all the redis as windows service......
%portPre%01\redis-server.exe --service-start --service-name %portPre%01redisM
%portPre%02\redis-server.exe --service-start --service-name %portPre%02redisM
%portPre%03\redis-server.exe --service-start --service-name %portPre%03redisM
echo start all the redis as windows service finished....
rem 延時5秒,自動關閉窗口
ping -n 5 127.0>nul
九、集羣的測試、運維
集羣搭建後,需要測試,調試,運維等,涉及到很多的命令與方法,請參加另一博文:http://blog.csdn.net/mingojiang/article/details/78902370