1. 程式人生 > >記一次redis叢集搭建的問題處理

記一次redis叢集搭建的問題處理

1.複製3份conf檔案,用來起不同埠的3個redis應用

修改conf:
port 6399
bind 10.61.70.136 183.61.70.136
dir /data/redis/data/
2.分別將3個redis啟動起來
./redis-server ../conf/redis.conf
3.叢集啟動
./redis-trib.rb create --replicas 0 192.168.10.5:6379 192.168.10.5:6389 192.168.10.5:6399
--replicas 後面跟的引數0表示每個叢集節點複製主從的個數
4.報錯解決
這裡會報很多錯,首先是提示要安裝ruby
因為redis-trib.rb是一個ruby指令碼
注意了,ruby需要用原始碼安裝,yum安裝的ruby會提示版本過低,原始碼安裝2.2以上版本
./configure
make && make install
原始碼安裝的時候可能提示prelude.c相關的錯誤
這裡可以不用擔心,這裡是因為c的函式裡面不能包含#註釋,將prelude.c提示的那幾行註釋刪掉重新執行即可


然後這個指令碼建立redis叢集,會先用一個redis客戶端去訪問,這個客戶端是rubygems提供的
安裝rubygems:
下載原始碼解壓,然後進入資料夾
執行:ruby setup.rb
可能報錯
ERROR: While executing gem ... (Gem::DocumentError)
RDoc is not installed: no such file to load -- rdoc/rdoc
執行yum install rdoc
然後安裝ruby對redis的客戶端
gem install redis
若提示no such file to load -- zlib,則是需要zlib模組,使用yum install zlib zlib-devel ;在這裡我執行yum沒能解決
進入ruby的安裝目錄,在ext/zlib可以編譯安裝此動態模組
cd ruby-2.5.0/ext/zlib/
ruby extconf.rb
make
提示No rule to make target `/include/ruby.h'
使用find發現此檔案存在,但是Makefile裡使用的變數去尋找出錯,所以更改Makefile:
找到這一行    zlib.o: $(top_srcdir)/include/ruby.h
將其更改為    zlib.o:../../include/ruby.h
然後make && make install
再執行gem install redis
此時,再進行啟動叢集
./redis-trib.rb create --replicas 0 192.168.10.5:6379 192.168.10.5:6389 192.168.10.5:6399
一般到這裡就成功了,若這裡不報其他錯,直接提示:
[ERR] Sorry, can't connect to node 192.168.10.5:6379
1.檢測防火牆埠是否通
2.服務啟動時是否這個ip,然後親自用redis-cli -h 192.168.10.5 -p 6379 嘗試
3.發現redis-cli正常,但是依然不能啟動叢集,檢測配置檔案是否啟用了密碼
requirepass 123456
這時需要將密碼寫入ruby連線redis的ruby指令碼
find / -name client.rb  找到這個ruby指令碼
可以使用gem list 來檢視自己安裝的redis客戶端版本,我這裡是4.0.1,所以直接找和4.0.1相關路徑的指令碼
vim  /usr/local/lib/ruby/gems/2.5.0/gems/redis-4.0.1/lib/redis/client.rb
找到這行 :password => nil, 
將後面的nil改為你的密碼 :password => "123456",
再次啟動
 ./redis-trib.rb create --replicas 0 192.168.10.5:6379 192.168.10.5:6389 192.168.10.5:6399