共計 6598 個字符,預計需要花費 17 分鐘才能閱讀完成。
這篇文章主要介紹了如何離線安裝 Redis 集群,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
一、通過原生命令安裝 Redis 集群(僅做理解 Redis 集群原理使用)
1. 配置開啟所需要的 Redis 節點
因為這里只是做一個簡單的 Redis 集群原理演示,所以假設此時 Redis 服務已經安裝完畢,在 config 文件夾下創建六個 redis.conf 配置文件,分別為 redis-7000.conf、redis-7001.conf、redis-7002.conf、redis-7003.conf、redis-7004.conf、redis-7005.conf。其內容如下:
port ${port}
daemonize yes
dir /opt/redis/redis/data/
dbfilename dump-${port}.rdb
logfile ${port}.log
cluster-enabled yes // 開啟節點的集群功能
cluster-config-file nodes-${port}.conf
cluster-require-full-coverage no
cluster-node-timeout 15000
依次啟動六個 redis 后臺服務
redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf
ps -ef | grep redis 查看啟動情況:
2. 通過集群命令 meet 完成節點之間的相互通信
meet:cluster meet ip port
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7002
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7003
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7004
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7005
通過端口為 7000 的節點,其他的節點也可以相互感知到對方的存在,然后每兩個節點之間都會通信。
驗證:登錄端口號為 7000 節點以后,分別輸入 cluster nodes 和 cluster info 命令。
3. 指派槽
完成了節點之間的通信以后,就需要給每個主節點分配虛擬槽,一共存在 16384 個 slot,redis 節點之間互相知道哪個槽在哪個節點上,如果數據訪問到了不屬于自己的槽的 redis,redis 會告訴數據應該去訪問哪個 redis
指派槽的命令:cluster addslots slot[slot…]
redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0…5641}
redis-cli -h 127.0.0.1 -p 7001 cluster addslots {5642…10922}
redis-cli -h 127.0.0.1 -p 7002 cluster addslots {10923…16383}
在這里發現使用 addslots 只能一個一個輸入,感覺非常扯,使用數組的方式 redis 會報錯,用網上的解決辦法是將大括號里的 三個點改為兩個點,我試了試不行的,如果有什么好的解決辦法可以提供一下。
4. 配置節點的主從關系
cluster replicate node-id
redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}
redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}
redis-cli -h 127.0.0.1 -p 7005 cluster replicate ${node-id-7002}
到此通過原生命令安裝 Redis 集群就已經完成了,中間的步驟存在問題,無法分配 slots, 但是可以幫助簡單的理解一下由 Redis 的單節點到 Redis 的集群都需要做什么工作。
二、通過 Ruby 離線安裝 Redis 集群
1. 安裝環境以及安裝包說明
系統:Centos7(安裝的時候選擇安裝了 gcc)
安裝包:redis-4.0.6.tar.gz //redis 的安裝包
ruby-2.5.6.tar.gz // 集群搭建需要 Ruby 環境
rubygems-3.0.6.zip //redis 集群需要的 ruby 插件,rubygems 是 ruby 的一個包管理工具,通過 rubygems 安裝 redis-3.2.2.gem
zlib-1.2.11.tar.gz // 可能缺少的基礎環境 zlib
openssl-1.0.2t.tar.gz // 可能缺少的基礎環境 openssl
2. 安裝步驟
(1) 解壓編譯 redis
mkdir /usr/local/redis // 創建 redis 工作目錄
cp redis-4.0.6.tar.gz /usr/local/redis // 將 redis 的安裝包拷貝到 redis 目錄下
cd /usr/local/redis // 進去 redis 文件下
tar -vxf redis-4.0.6.tar.gz // 解壓縮
ln -s redis-4.0.6 redis // 建立軟連接
cd redis // 進入 redis 目錄下
make make install
// 編譯安裝 redis
(2) 創建集群目錄
cd /usr/local/redis
mkdir redis_cluster // 在 redis 安裝目錄下創建 redis_cluster 目錄
mkdir redis700{0,1,2,3,4,5}// 批量創建六個 redis 節點工作目錄,三主三從。
(3) 配置 redis.conf
cd /usr/local/redis/redis_cluster // 進去集群工作目錄
vim redis.conf // 創建 redis.conf 文件并添加一下內容
port 7000 // 配置集群的端口
bind 本機的 IP // 這里的默認配置是 127.0.0.1 改為內網 ip。daemonize yes // 允許 redis 在后臺運行
pidfile /var/run/redis-7000.pid // 改成和端口一致
cluster-enabled yes // 開啟集群 把注釋去掉
cluster-config-file node-7000.conf // 集群的配置,和端口一致
cluster-node-timeout 15000 // 請求超時,默認為 15 秒
appendonly yes // aof 日志開啟,有需要就開啟,每一次寫操作都會記錄一條日志。
將 redis.conf 分別 copy 到六個節點的文件下
cp redis.conf redis7000/ // 將配置文件拷貝到 redis7000 節點的工作目錄下
cp redis.conf redis7001/
cp redis.conf redis7002/
cp redis.conf redis7003/
cp redis.conf redis7004/
cp redis.conf redis7005/
因為配置文件是根據 7000 端口模本的配置寫的,所以除了 redis7000 目錄下的 redis.conf, 其他工作目錄下的配置文件都需要將文件內容中的端口號修改為對應的工作目錄的端口號。
(4) 啟動服務
cd /usr/local/redis/redis_cluster
依次啟動所有節點
redis-server redis7000/redis.conf
redis-server redis7001/redis.conf
redis-server redis7002/redis.conf
redis-server redis7003/redis.conf
redis-server redis7004/redis.conf
redis-server redis7005/redis.conf
查看啟動情況:ps -ef | grep redis
(5) 安裝 ruby
mkdir /usr/local/ruby // 創建 ruby 工作目錄
cp ruby-2.5.6.tar.gz /usr/local/ruby // 將安裝包拷貝到該目錄下
cd /usr/local/ruby // 進入 ruby 工作目錄
tar -vxf ruby-2.5.6.tar.gz // 解壓縮
cd ruby-2.5.6/
./configure
make make install
查看安裝情況:ruby -v
(6) 安裝 rubygems
mkdir /usr/local/rubygems // 創建 rubygems 工作目錄
cp rubygems-3.0.6.zip /usr/local/rubygems // 將安裝包拷貝到該目錄下
cd /usr/local/rubygems // 進入 ruby 工作目錄
unzip rubygems-3.0.6.zip // 解壓縮
cd rubygems-3.0.6/
ruby setup.rb
執行 ruby setup.rb 的時候出現以下錯誤:
解決辦法:缺少了 zlib 包,需要安裝 zlib。
(7) 安裝 zlib
mkdir /usr/local/zlib // 創建 zlib 工作目錄
cp zlib-1.2.11.tar.gz /usr/local/zlib // 將安裝包拷貝到該目錄下
cd /usr/local/zlib // 進入 zlib 工作目錄
tar -vxf zlib-1.2.11.tar.gz // 解壓縮
cd zlib-1.2.11/
./configure --prefix=/usr/local/zlib
make
make install
(8) 編譯 ruby 中的 zlib
cd /usr/local/ruby/ruby-2.5.6/ext/zlib/
ruby extconf.rb
出現以下錯誤信息:
發現原來是要將文件安裝到本地運行庫的里面才行,所有安裝的時候需要額外配置信息。重新執行一下命令:
ruby extconf.rb --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib // 會生成一個 Makefile 文件
繼續下一步:make make install
又出現報錯信息:
這個時候打開 ext/zlib/Makefile 文件,找到下面一行把路徑進行修改一下。
zlib.o: $(top_srcdir)/include/ruby.h 改成:zlib.o: ../../include/ruby.h
如下圖:
修改完成,然后保存, 然后重新:make make install
zlib 的錯誤都解決以后再繼續重新安裝 rubygems。
cd /usr/local/rubygems/rubygems-3.0.6
ruby setup.rb
這次就安裝成功了,如下圖:
(9) 安裝 redis-3.0.0.gem
cp redis-3.0.0.gem /usr/local/redis/redis
cd /usr/local/redis/redis
gem install redis-3.3.0.gem
出現以下錯誤信息:
因為 Redis 集群交互是需要 OpenSSL,所系我們還需要安裝 OpenSSL。
(10) 安裝 openssl
mkdir /usr/local/openssl // 創建 openssl 工作目錄
cp openssl-1.0.2t.tar.gz /usr/local/openssl // 將安裝包拷貝到該目錄下
cd /usr/local/openssl // 進入 openssl 工作目錄
tar -vxf openssl-1.0.2t.tar.gz // 解壓縮
cd openssl-1.0.2t/
./config -fPIC --prefix=/usr/local/openssl enable-shared
./config -t
make make install
安裝成功:
(11) 編譯 ruby 中的 openssl
cd /usr/local/ruby/ruby-2.5.6/ext/openssl/
ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib 此時會生成 Makefile 文件,下面出現的錯誤需要修改本文件
make make install
出現以下錯誤信息:
解決辦法:vim Makefile 把 Makefile 文件中所有的 $(top_srcdir) 換成 ../.. 注意替換所有
替換完成后,重新進行
make make install
安裝成功:
安裝成功以后繼續進行第九步的安裝 redis-3.0.0.gem
cd /usr/local/redis/redis/
gem install redis-3.0.0.gem
安裝成功:
到這里 ruby 環境總算是安裝成功了,真是不容易啊,其實 redis cluster 的安裝的主要內容還是上面的 Ruby 環境的安裝配置過程。
(12) 啟動 redis 集群
cd /usr/local/redis/redis/src/
在該目錄下執行命令:
./redis-trib.rb create --replicas 1 192.168.182.132:7000 192.168.182.132:7001 192.168.182.132:7002 192.168.182.132:7003 192.168.182.132:7004 192.168.182.132:7005
輸入 yes
安裝成功:
(13) 驗證集群狀態
以普通方式連接到 7002 端口的節點 redis-cli -p 7002 -h 192.168.182.132
參數說明:-p port 端口 -h host 主機 -c cluster 集群
連接進集群之后 輸入 ping , 如果響應了 pong 表示連接集群成功;
CLUSTER INFO 列出當前節點的信息,CLUSTER NODES 列出當前集群中的節點信息;
執行命令:set hello word
7002 節點報錯,客戶端該數據應該使用 7000 端口的客戶端才能添加 (是因為登錄的時候沒有加 -c)
登錄 7000 端口的客戶端重新 set hello world,添加數據成功 (上次在 7002 中添加 hello world 沒有成功,所以在 7000 中獲取 hello 是沒有內容的)
使用集群方式連接集群 redis-cli -p 7003 -h 192.168.182.132 -c(7003 是 7000 的備機)
查詢 hello:
get hello
重新設置 hello 的值:
set hello java
設置成功:
通過對比發現如果登錄的時候不加 -c(非集群模式登錄,登錄的是單節點), 添加數據時,如果數據的 key 的虛擬槽位沒有在該 redis 上則不能添加成功,即單節點登錄,對 redis 的操作不會進行重定向。
(14) 驗證集群的主從配置
關閉 7002 端口的節點
kill -9 7002redis 節點的 pid
登錄到 7000 端口的節點:
redis-cli -p 7000 -h 192.168.182.132 -c
cluster nodes
CLUSTER NODES 前面的字符串是節點的 id。從這個命令還可以知道哪些節點還活著,哪些節點已經掛了。帶著 fail 的都是已經掛掉的節點。
集群信息顯示 7002 節點已經 down 掉,7005 取代 7002 成為主節點
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“如何離線安裝 Redis 集群”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!