1.1 集羣介紹
爲了保證在部分節點故障時集羣依然能正常工作,集羣使用主從模型,爲每一個主節點創建一個或多個從節點,來提高redis集羣的高可用性。
本次配置的redis集羣由6個節點(3個主節點,3個從節點)組成,準備三臺服務器,假設ip地址分別爲192.168.1.200、192.168.1.201、192.168.1.202,在每臺服務器上分別部署兩個節點,其中一個master和一個slave。節點及其客戶端端口分配如下:
192.168.1.200 7000 192.168.1.200 7001
192.168.1.201 7000 192.168.1.201 7001
192.168.1.202 7000 192.168.1.202 7001
1.2 集羣安裝
1.2.1安裝Redis
將redis.tar.gz安裝包上傳至3臺服務器的任一目錄,例如上傳至/home/redis/目錄(可自選)下,執行tar -zxvf redis.tar.gz進行解壓。
解壓完成後進入redis目錄,執行make命令編譯源碼,編譯完成後在src目錄下會增加redis-server、redis-benchmark、redis-cli等文件。
1.2.2安裝Ruby環境
下載ruby安裝包,利用tar命令解壓之後,進入ruby目錄,執行如下命令配置並編譯源代碼:
./configure
make&&make install
除了源碼安裝方式外,根據操作系統的不同,可以直接用軟件包管理工具進行安裝,以Centos系統爲例,執行sudo yum install ruby命令安裝ruby。
安裝完成之後執行如下命令安裝redis gem以及redis接口:
yum install rubygems
gem install redis
1.2.3創建集羣所需目錄及文件
- 在200、201、202服務器的/home/redis/目錄下執行如下命令創建集羣文件夾:
mkdir redis-cluster
cd redis-cluster
mkdir 7000
mkdir 7001
- 用cp命令將1.1節/home/redis/src目錄下的redis-server、redis-trib.rb、redis-benchmark、redis-cli拷貝至集羣目錄redis-cluster下。
cp /home/redis/redis/src/redis-server/home/redis/redis-cluster/
cp/home/redis/redis/src/redis-trib.rb /home/redis/redis-cluster/
cp /home/redis/redis/src/redis-benchmark /home/redis/redis-cluster/
cp /home/redis/redis/src/redis-cli/home/redis/redis-cluster/
- 將/home/redis目錄下的redis.conf配置文件分別在 /home/redis/redis-cluster/7000和/home/redis/redis-cluster/7001兩個目錄下各拷貝一份,並修改如下幾個參數:
bind 192.168.1.200
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
其中,7000目錄下配置文件的port設爲7000,7001目錄下配置文件的port設爲7001;bind值修改爲服務器的ip地址。
最終得到的集羣目錄結構如下圖所示:
1.2.4創建並啓動實例
分別在200、201、202三臺服務器上進入redis-cluster目錄,執行如下命令啓動redis實例:
./redis-server ./7000/redis.conf
./redis-server ./7001/redis.conf
1.2.5啓動集羣
選擇任一節點執行如下命令啓動redis集羣:
./redis-trib.rb create --replicas 1 192.168.1.200:7000192.168.1.201:7000 192.168.1.202:7000 192.168.1.200:7001 192.168.1.201:7001 192.168.1.202:7001
其中,--replicas 1表示爲每一個主節點創建一個從節點。
看到[OK] All 16384 slots covered字樣則表示集羣啓動成功。需要注意的是,redis集羣中的每個節點都需要建立2個tcp連接,監聽2個端口,分別是客戶端端口和集羣總線端口,且必須確保防火牆允許打開這兩個端口。
客戶端端口用於接受客戶端指令,與客戶端交互,比如這裏的7000和7001端口;集羣總線端口,是在客戶端的端口號上加10000,即17000和17001端口,用於集羣中各節點之間的通信。