環境
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