【Redis】ubuntu14搭建redis4.0集羣

環境


ubuntu14.04 LTS
redis4.0.9

安裝redis


下載

下載redis4.0.9,網址
http://download.redis.io/releases/

安裝GCC

sudo apt-get build-dep gcc
#or
sudo apt-get install build-essential

安裝與配置redis

1、編譯

將redis-4.0.9.tar.gz放在usr/server中,然後

#解壓
tar zxvf redis-4.0.9.tar.gz

#編譯
cd /usr/server/redis-4.0.9
make

2、修改配置文件

sudo vim redis.conf

#修改如下幾項

1、註釋掉bind,去掉本地迴環網絡,保證別的機器訪問
#bind 127.0.0.1

2、修改daemonize,使其可以守護進程運行
daemonize yes

3、持久化,如需關閉,則註釋掉save配置
#save 900 1
#save 300 10
#save 60 10000

4、protected-mode 改爲no,即可允許別的機器訪問這個redis

5、配置密碼
requirepass 818

3、 啓動、測試與關閉redis

cd redis-4.0.9/src

# 啓動redis
./redis-server

# 進入客戶端,測試redis
./redis-cli -h 127.0.0.1 -p 6379

#如果有密碼需在進入客戶端後輸入
auth 818

#測試
set a like
get a 
#like

#關閉redis
./redis-cli shutdown

安裝與配置redis4.0集羣


環境

三臺ubuntu14.04 LTS,ip爲:

xxx.133.17.168
xxx.133.17.169
xxx.133.17.170

安裝與配置redis集羣

1、根據“單機安裝與配置redis4.0”的步驟,在三臺機器分別安裝redis並編譯。

2、在xxx.133.17.168機器,進入編譯後的redis目錄下,創建兩個文件夾,作爲兩個redis節點存放配置文件的路徑(其他機器也如此,節點從7000分配到7005共6個節點)。

mkdir -p redis-cluster/7000
mkdir -p redis-cluster/7001

3、把默認配置文件複製到節點文件夾(其他機器也如此)。

cp redis.conf redis-cluster/7000
cp redis.conf redis-cluster/7001

4、修改6個節點的redis.conf(以7000爲例)。

sudo vim redis-cluster/7000/redis.conf

bind 127.0.0.1 xxx.133.17.168

port 7000

daemonize yes

pidfile /var/run/redis_7000.pid

cluster-enabled yes

cluster-config-file nodes_7000.conf

cluster-node-timeout 15000

requirepass 818

5、進入三臺機器redis的src文件夾,分別啓動每臺機器的2個節點。

./redis-server ../redis-cluster/7000/redis.conf 

#查看是否啓動成功
ps aux | grep redis

6、安裝ruby環境,這裏特比強調,由於之前是直接安裝ruby,總是報缺少oepnssl的錯誤,也踩過很多其他的坑,所以要用rvm安裝ruby。

curl -L get.rvm.io | bash -s stable
echo "source ~/.bashrc" >> ~/.bash_profile
echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc
source ~/.bashrc
rvm -v
rvm install 2.3.3
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
gem install redis

./redis-trib.rb create --replicas 1 xxx.xxx.xxx.168:7000 xxx.xxx.xxx.168:7001 xxx.xxx.xxx.169:7002 xxx.xxx.xxx.169:7003 xxx.xxx.xxx.170:7004 xxx.xxx.xxx170:7005

輸入yes

出現
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
120.133.17.168:7000
120.133.17.169:7002
120.133.17.170:7004
Adding replica 120.133.17.169:7003 to 120.133.17.168:7000
Adding replica 120.133.17.170:7005 to 120.133.17.169:7002
Adding replica 120.133.17.168:7001 to 120.133.17.170:7004
.
.
.
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

大功告成!

7、啓動集羣並測試。

進入兩個節點的客戶端,一個set,另一個get,看是否可以get到。

./redis-cli -c -h xxx.133.17.168 -p 7001
auth 818
set a like

./redis-cli -c -h xxx.133.17.170 -p 7003
get a
出現like,搞定。

在某節點的redis-cli下,執行cluster info,出現

cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:3
cluster_stats_messages_ping_sent:304
cluster_stats_messages_pong_sent:277
cluster_stats_messages_meet_sent:3
cluster_stats_messages_sent:584
cluster_stats_messages_ping_received:274
cluster_stats_messages_pong_received:307
cluster_stats_messages_meet_received:3
cluster_stats_messages_received:584

8、單機未設定密碼,爲集羣添加密碼。

進入6個節點的客戶端(以7000爲例)

redis-cli -h xxx.133.17.168 -p 7000
config set masterauth 818
config set requirepass 818
auth  818
config rewrite
exit

修改集羣啓動文件

find / -name client.rb
找到帶GEM的
sudo vim /home/rdadmin/.rvm/gems/ruby-2.3.3/gems/redis-4.0.1/lib/redis/client.rb

修改這一項:
:password => "818",

具體如下:
DEFAULTS = {
      :url => lambda { ENV["REDIS_URL"] },
      :scheme => "redis",
      :host => "127.0.0.1",
      :port => 6379,
      :path => nil,
      :timeout => 5.0,
      :password => "818",
      :db => 0,
      :driver => nil,
      :id => nil,
      :tcp_keepalive => 0,
      :reconnect_attempts => 1,
      :inherit_socket => false
    }

修改後登錄客戶端時,需要兩步:
./redis-cli -c -h 192.168.1.104 -p 7001 
auth 818

重啓集羣

每臺機器,pkill -9 redis ,再挨個重啓6個節點,好像就OK了。。。

又有人說redis集羣重啓需要刪除各個節點下的文件,刪除命令如下:

rm -rf appendonly.aof | rm -rf dump.rdb | rm -rf nodes.conf | rm -rf redis.log

待驗證。。。

ubuntu安裝與配置redis4.0集羣踩坑歷程


在安裝配置ruby時,踩了N多坑,在此記錄下來。

1、未安裝ruby時,在src下執行

./redis-trib.rb create --replicas 1 120.133.17.168:7000 120.133.17.168:7001 
120.133.17.169:7002 120.133.17.169:7003 120.133.17.170:7004 120.133.17.170:7005

會出現redis-trib.rb: command not found,說明需要安裝ruby。

2、安裝ruby

sudo apt-get install ruby

sudo gem install redis

此時會提示ruby版本太低,然後按照一個教程安了最新的ruby2.4.4

參考鏈接:https://blog.csdn.net/fengbingchun/article/details/61614738

安裝最新的ruby後,再sudo gem install redis,又出現Could not find a valid gem ‘redis’ (>= 0) in any repository

通過gem source查看ruby是否在gem的source裏,但是出現新的錯誤,Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

網上又搜到一篇很複雜的ssl安裝配置教程,還是不行。

最後搜到正確的方案是通過rvm安裝ruby,會自動配置openssl,於是安裝rvm:

curl -L get.rvm.io | bash -s stable

echo "source ~/.bashrc" >> ~/.bash_profile

echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc

source ~/.bashrc

rvm -v

type rvm | head -1

rvm is a function

rvm install 2.3.3

再次運行命令gem install redis 發現卡死,換個源吧:

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/

再次gem install redis

然後在redis的src

./redis-trib.rb create --replicas 1 xxx.133.17.168:7000 xxx.133.17.168:7001 xxx.133.17.169:7002 xxx.133.17.169:7003 xxx.133.17.170:7004 xxx.133.17.170:7005

出現 [ERR] Sorry, can’t connect to node 120.133.17.168:7000

原來是忘啓動redis服務了

./redis-server …/redis-cluster/7000/redis.conf後再./redis-trib.rb

出現Node xxx.133.17.168:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

原來是之前的redis被使用過,裏面有內容,此時需要:

redis-cli -h xxx.133.17.168 -p 7000 -a 818

redis-cli -h xxx.xxx.xxx.168 -p 7000 flushdb

然後執行./redis-trib.rb,出現

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
xxx.133.17.168:7000
xxx.133.17.169:7002
xxx.133.17.170:7004
Adding replica xxx.133.17.169:7003 to xxx.133.17.168:7000
Adding replica xxx.133.17.170:7005 to xxx.133.17.169:7002
Adding replica xxx.133.17.168:7001 to xxx.133.17.170:7004
M: dcc389f4c868cc007440850d9c0c236a24df7063 xxx.133.17.168:7000
   slots:0-5460,5474,5798,14537 (5464 slots) master
S: d894018e978846a3c65b72eb1313a7b22f7499b5 xxx.133.17.168:7001
   replicates 5be3afcc4518d2ed7abe3c9459d60700c07c92e0
M: 198e9fb972c5605030ed6d1e5cc359ae5e956666 xxx.133.17.169:7002
   slots:5461-10922,15495 (5463 slots) master
xxx   replicates dcc389f4c868cc007440850d9c0c236a24df7063
M: 5be3afcc4518d2ed7abe3c9459d60700c07c92e0 xxx.133.17.170:7004
   slots:10923-16383 (5461 slots) master
S: fc813d3533157a59c5159525ad1612ca13513652 xxx.133.17.170:7005
   replicates 198e9fb972c5605030ed6d1e5cc359ae5e956666
Can I set the above configuration? (type 'yes' to accept): 

激動的輸入yes後,出現

/home/rdadmin/.rvm/gems/ruby-2.3.3/gems/redis-4.0.1/lib/redis/client.rb:119:in `call’: ERR Slot 5474 is already busy (Redis::CommandError)

繼續進入客戶端

redis-cli -h xxx.133.17.168 -p 7000
auth 818
flushall
cluster resetsoft 
exit

再次在src下執行 ./redis-trib.rb,大功告成!

參考鏈接


官方文檔:http://www.redis.cn/topics/cluster-tutorial.html
正確搭建流程:https://blog.csdn.net/u011726984/article/details/78819542
密碼問題:https://www.jianshu.com/p/40fbcadde1ac
redis不爲空:https://blog.csdn.net/vtopqx/article/details/50235737
rvm安裝ruby:https://www.cnblogs.com/custer/p/6267506.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章