Linux系統搭建Redis叢集(redis-cluster)
工具準備
Linux圖形化工具為Xftp,shell工具為Xshell
#Redis叢集相關概念
- redis-cluster架構圖
redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster 負責維護
redis 叢集中內建了 16384 個雜湊槽,當需要在 redis 叢集中放置一個 key-value 時,redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點
例如:
Key:a
計算a的Hash值,若為100,這個槽在server1上,所以a應存放於server1
Key:hello
hello的Hash值,若為10032,這個槽在server2上,則hello應存放於server2
#叢集搭建
##1. 叢集結構
叢集中有三個節點,每個節點有一主一備,需要6臺虛擬機器。
由於條件有限,所以搭建一個偽分散式的叢集,使用6個redis例項來模擬
2. 搭建叢集需要的環境
搭建叢集需要使用到官方提供的ruby指令碼。
需要安裝ruby的環境
2.1 安裝ruby
第一步:
yum -y install ruby 或 yum install ruby
- 1
- 2
- 3
若使用yum install xxxx
,找到安裝包之後,會詢問Is this ok [y/d/N]:
,需要手動進行選擇,如下圖:
如果加上引數-y
,則會自動選擇y,不需要再手動選擇,下載自動完成
第二步:
yum -y install rubygems
或
yum install rubygems
- 1
- 2
- 3
2.2 上傳安裝包
第一步:
官方網站下載Redis的Linux系統安裝包,字尾 .tar.gz
,使用XFtp上傳到Linux伺服器
第二步: 解壓:
tar -zxf redis-4.0.10.tar.gz 或 tar -zxvf redis-4.0.10.tar.gz
- 1
- 2
- 3
-zxvf
顯示解壓進度,-zxf
不顯示
2.3 下載指令碼依賴
Redis叢集需要使用官方提供的叢集管理指令碼工具redis-trib.rb
此工具位於redis安裝包下的src目錄
使用此指令碼需要安裝其所依賴的ruby包,執行命令:
gem install redis
- 1
問題來了!
Linux報錯:
Fetching: redis-4.0.2.gem (100%) ERROR: Error installing redis: redis requires Ruby version >= 2.2.2.
2.2.2的報錯,是CentOS預設支援ruby到2.0.0,可gem 安裝redis需要最低是2.2.2
解決辦法:提升ruby版本
-
安裝curl
sudo yum install curl
- 1
-
安裝rvm
curl -L get.rvm.io | bash -s stable
- 1
執行這一步可能會有特殊情況:
按提示執行所述的命令即可gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
- 1
- 2
重新執行第二步的命令
成功!繼續以下步驟 -
重新整理資源
source /usr/local/rvm/scripts/rvm
- 1
-
檢視rvm庫中已知的ruby版本
rvm list known
- 1
-
安裝一個ruby版本
rvm install 2.4.0
- 1
可自行選擇,最低版本2.2.2
-
使用一個ruby版本
rvm use 2.4.0
- 1
-
解除安裝一個已知版本
rvm remove 2.0.0
- 1
-
檢視版本
ruby --version
- 1
問題解決,重新執行下載指令碼依賴的命令:
gem install redis
- 1
依賴下載完成,準備工作結束
##3. 開始搭建叢集(下面的命令都給出了相對路徑,方便大家參考)
**第一步:**安裝redis
-
安裝的前提條件:需要安裝gcc
yum install gcc-c++
```
2. 進入解壓好的redis安裝包,由於redis使用C語言編寫,所以要先編譯再安裝
```
- 1
cd redis-4.0.10
[[email protected] redis-4.0.10]# make //編譯
[[email protected] redis-4.0.10]# make install PREFIX=/usr/local/redis //安裝,PREFIX指定安裝路徑,沒有的路徑自動建立
```
3. 將redis安裝包中的 redis.conf 檔案拷貝到redis的 bin 目錄下:
```
- 1
[[email protected] redis-4.0.10]# cp redis.conf /usr/local/redis/bin/
```
4. 拷貝六份redis/bin到新目錄下
```
- 1
[[email protected] redis]# cp -r bin /usr/local/redis-cluster/redis01
[[email protected] redis-cluster]# cp -r redis01 redis02
[[email protected] redis-cluster]# cp -r redis01 redis03
[[email protected] redis-cluster]# cp -r redis01 redis04
[[email protected] redis-cluster]# cp -r redis01 redis05
[[email protected] redis-cluster]# cp -r redis01 redis06
```
第二步: 修改配置檔案(每個redis例項都需要修改)
[[email protected] redis-cluster]# vim redis01/bin/redis.conf
- 1
- 開啟後端啟動
- 修改埠號,預設6379,叢集埠號從7001~7006
若是同一臺主機,埠必須不同,不同主機可以相同
- 開啟cluster-enable前面的註釋
- 修改繫結ip
**注意:**這裡的ip需要通過ifconfig
命令檢視,是伺服器的內網ip,不是公網ip,如果是虛擬 機的話,就是自己所設定的ip,否則的話,會出現即使啟動redis服務,通過ps -ef|grep redis
命令找不到相關程序的情況 - 關閉保護模式
**第三步:**把建立叢集的ruby指令碼複製到redis-cluster目錄下
[[email protected] src]# cp redis-trib.rb /usr/local/redis-cluster/
- 1
**第四步:**啟動6個redis例項
-
通過編寫指令碼啟動,redis-cluster目錄下:
[[email protected] redis-cluster]# vim startall.sh
```
```
- 1
cd redis01
./redis-server redis.conf
cd …
cd redis02
./redis-server redis.conf
cd …
cd redis03
./redis-server redis.conf
cd …
cd redis04
./redis-server redis.conf
cd …
cd redis05
./redis-server redis.conf
cd …
cd redis06
./redis-server redis.conf
cd …
```
2. 賦予指令碼執行許可權
```
- 1
[[email protected] redis-cluster]# chmod +x startall.sh
```
**第五步:**啟動6個redis例項
[[email protected] redis-cluster]# ./startall.sh
- 1
檢視redis程序
[[email protected]_175_68_centos redis-cluster]# ps -ef|grep redis
- 1
若出現找不到程序的情況,檢查第二步、第三步配置操作是否正確。若無誤還不能啟動,關閉防火牆(不建議)或者防火牆開放埠(7001~7006)
CentOS7開放埠:
firewall-cmd --zone=public --add-port=80/tcp --permanent //單獨開放
firewall-cmd --permanent --zone=public --add-port=7001-7006/tcp //批量開發
firewall-cmd --reload //更改完成,重新載入
- 1
- 2
- 3
**第六步:**建立叢集
[[email protected]_175_68_centos redis-cluster]# ./redis-trib.rb create --replicas 1 10.135.175.68:7001 10.135.175.68:7002 10.135.175.68:7003 10.135.175.68:7004 10.135.175.68:7005 10.135.175.68:7006
- 1
M:b4fb23576acc8eef0eec83bf3b76df3955081a1d 為主節點Id
S: 112d377b8d70b6dedf2355ca4e6c325ccc818003 10.135.175.68:7005
replicates b4fb23576acc8eef0eec83bf3b76df3955081a1d 為從節點下所對應主節點Id
目前來看,7001-7003 為主節點,7004-7006 為從節點,並詢問你是否同意這麼配置,輸入 yes 後,會開始叢集建立
建立成功!
#叢集測試
[[email protected]_175_68_centos redis-cluster]# redis01/redis-cli -c -h 10.135.175.68 -p 7002
- 1
這裡要注意命令中的-c
引數,必須要有,否則能夠連線叢集,但卻不能進行叢集中redis的跳轉
連線成功!
存入一個鍵值
可以看到,redis對a進行了計算得出a應該存放於埠為7003的redis伺服器中,自動進行了跳轉並儲存a
取出a的值
可以看出a確實是存入7003這個redis中了,叢集搭建成功!
#總結
到此,Redis叢集的搭建就完成了,希望我的文章對你有所幫助
</div>