哈嘍大家好,我是鹹魚 今天這篇文章介紹如何在一臺伺服器(以 CentOS 7.9 為例)上通過 `redis-trib.rb` 工具搭建 Redis cluster (三主三從) `redis-trib.rb` 是一個基於 Ruby 編寫的腳本,其功能涵蓋了創建、管理以及維護 Redis 集群的各個 ...
哈嘍大家好,我是鹹魚
今天這篇文章介紹如何在一臺伺服器(以 CentOS 7.9 為例)上通過 redis-trib.rb
工具搭建 Redis cluster (三主三從)
redis-trib.rb
是一個基於 Ruby 編寫的腳本,其功能涵蓋了創建、管理以及維護 Redis 集群的各個方面
值得註意的是,隨著時間的推移,一些較新版本的 Redis 已經將 redis-trib.rb
標記為不推薦使用的工具
鑒於此,文章所採用的 Redis 版本為較老的 4.0.9 版本
對於較新版本的 Redis,鹹魚建議採用 redis-cli
工具來進行集群的操作與管理,以確保與 Redis 的最新特性保持一致
我們先把架構畫出來,這樣後面部署的時候就很方便了
# 三個 Master
192.168.149.131:6379
192.168.149.131:6380
192.168.149.131:6381
# 三個 Slave
192.168.149.131:26379
192.168.149.131:26380
192.168.149.131:26381
需要註意的是,Redis Cluster 中,節點之間通過建立 TCP 連接,使用 gossip 協議來傳播集群的信息,節點內部通信埠是服務埠 + 10000
舉個例子,啟動 Redis 服務之後會有一個 6379 埠(對外埠)和一個 16379 埠(對內通信埠)
開始部署
部署前準備
首先創建 Redis 存儲目錄,用來存放 rdb 文件等,接著創建 pid 文件和日誌文件存放目錄
mkdir -pv /var/data/{6379,6380,6381,26379,26380,26381}
mkdir /usr/local/redis-4.0.9/{pid,log} -pv
安裝 Redis 以及相關依賴工具
我們先來安裝 redis 以及相關依賴(需要能夠訪問到互聯網)
# 安裝相關依賴
yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake
# 安裝到 /usr/local 下
cd /usr/local/ && wget https://download.redis.io/releases/redis-4.0.9.tar.gz
# 解壓縮
tar -xvf redis-4.0.9.tar.gz
解壓縮完畢之後我們進入目錄開始編譯安裝
cd redis-4.0.9/ && make && make install
配置並開啟 Redis 服務
首先我們先來配置六個 Redis 服務的配置文件
ll /usr/local/redis-4.0.9/
-rwxr-xr-x 1 root root 1524 Aug 24 17:21 redis-26379.conf
-rwxr-xr-x 1 root root 1524 Aug 24 17:18 redis-26380.conf
-rwxr-xr-x 1 root root 1524 Aug 24 17:18 redis-26381.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:21 redis-6379.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:17 redis-6380.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:17 redis-6381.conf
配置文件中需要改動的配置項是下麵幾個,其他的不變
# 需要改動的地方
...
port 6379
...
pidfile /usr/local/redis-4.0.9/pid/redis-6379.pid
...
logfile /usr/local/redis-4.0.9/log/redis-6379.log
...
dir /var/data/6379
...
cluster-config-file nodes-6379.conf
...
配置好之後,六個 Redis 服務依次啟動
/usr/local/redis-4.0.9/src/redis-server redis-6379.conf && /usr/local/redis-4.0.9/src/redis-server redis-26379.conf
/usr/local/redis-4.0.9/src/redis-server redis-6380.conf && /usr/local/redis-4.0.9/src/redis-server redis-26380.conf
/usr/local/redis-4.0.9/src/redis-server redis-6381.conf && /usr/local/redis-4.0.9/src/redis-server redis-26381.conf
搭建 Ruby 環境
redis-trib.rb
是一個 Ruby 腳本,用於創建、管理和維護 Redis 集群
它提供了一種命令行界面來執行各種集群操作,如添加節點、刪除節點、平衡數據分佈等
如果要使用 redis-trib.rb
這個 Ruby 腳本來管理 Redis Cluster,就需要安裝 Ruby 解釋器
先下載 rvm 工具(網路問題多試幾次)
#1.下載密鑰
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
#2.下載安裝包(網路問題多試幾次)
curl -L get.rvm.io | bash -s stable
# 驗證是否安裝成功
[root@localhost]# find / -name rvm
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm
# 啟用 RVM 的環境變數
source /etc/profile.d/rvm.sh
#查看依賴
rvm requirements
#驗證 rvm 版本
rvm -v
# 安裝 ruby
/usr/local/rvm/bin/rvm install ruby-3.0.0
# 驗證 ruby 版本
ruby -v
PS:如果安裝 ruby 之後使用 redis-trib.rb
工具發現報錯
/usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- redis (LoadError)
from /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from ./redis-trib.rb:25:in `<main>'
根據提示可以知道 redis-trib.rb
腳本無法找到 redis
模塊,導致載入失敗,這通常是因為系統中缺少了所需的 Ruby Redis 模塊或模塊的版本問題
運行以下命令安裝 Redis Gem 模塊:
# 安裝 redis 模塊,是 redis-trib.rb 腳本所需的依賴
gem install redis
創建 Redis 集群
創建集群(--replicas 1
表示指定每個 master 有一個 slave)
cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb create --replicas 1 192.168.149.131:6379 192.168.149.131:26379 192.168.149.131:6380 192.168.149.131:26380 192.168.149.131:6381 192.168.149.131:26381
由上圖可以看到
master 1: 192.168.149.131:6379 ;slave 1:192.168.149.131:26380
master 2: 192.168.149.131:26381;slave 2:192.168.149.131:6380
master 3: 192.168.149.131:26379;slave 3:192.168.149.131:6381
# 查看集群信息
cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb info 192.168.149.131:6379
cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb check 127.0.0.1:6379
驗證
創建集群之後我們簡單驗證一下:寫入一個數據,可以看到數據重定向到了 master 3
[root@localhost /usr/local/redis-4.0.9]# redis-cli -c -p 6379
127.0.0.1:6379> set name Edison
-> Redirected to slot [5798] located at 192.168.149.131:26379
OK
然後我們在 slave 3 上查看有沒有這個數據,是否同步完畢
[root@localhost /usr/local/redis-4.0.9]# redis-cli -c -p 26379
127.0.0.1:26379> get name
"Edison"