linux下redis的安裝和集羣搭建

1、redis概述node

  1.一、目前redis支持的cluster特性:
  1):節點自動發現。
  2):slave->master 選舉,集羣容錯。
  3):Hot resharding:在線分片。
  4):進羣管理:cluster xxx。
  5):基於配置(nodes-port.conf)的集羣管理。
  6):ASK 轉向/MOVED 轉向機制。
  1.二、redis cluster 架構
    1)redis-cluster架構圖
架構細節:
  (1)全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬。
  (2)節點的fail是經過集羣中超過半數的節點檢測失效時才生效。
  (3)客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可。
  (4)redis-cluster把全部的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value。
 
   2) redis-cluster選舉:容錯
     
  (1)領着選舉過程是集羣中全部master參與,若是半數以上master節點與master節點通訊超過(cluster-node-timeout),認爲當前master節點掛掉。
  (2):何時整個集羣不可用(cluster_state:fail),當集羣不可用時,全部對集羣的操做作都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤
      a:若是集羣任意master掛掉,且當前master沒有slave.集羣進入fail狀態,也能夠理解成進羣的slot映射[0-16383]不完成時進入fail狀態。
      b:若是進羣超過半數以上master掛掉,不管是否有slave集羣進入fail狀態。
2、redis集羣搭建

2.一、下載和解壓redis,這裏安裝redis-3.2.1版本的,3.0如下版本不支持集羣。linux

[root@localhost ~]# cd /usr/local
[root@localhost local]# mkdir redis-cluster
[root@localhost local]# cd redis-cluster/
[root@localhost redis-cluster]# wget http://download.redis.io/releases/redis-3.2.1.tar.gz
[root@localhost redis-cluster]# tar -zxvf redis-3.2.1.tar.gz

2.二、編譯安裝git

[root@localhost redis-cluster]# cd redis-3.2.1
[root@localhost redis-3.2.1]# make && make install

2.三、建立6個節點文件夾,每一個文件夾咱們就以每一個端口號命名,方便管理github

[root@localhost redis-3.2.1]# cd ..
[root@localhost redis-cluster]# mkdir 6379 6380 6381 6382 6383 6384

2.四、這裏不須要複製整個redis,只複製redis.conf到對應文件夾redis

[root@localhost redis-cluster]# cp redis-3.2.1/redis.conf  6379/
[root@localhost redis-cluster]# cp redis-3.2.1/redis.conf  6380/
[root@localhost redis-cluster]# cp redis-3.2.1/redis.conf  6381/
[root@localhost redis-cluster]# cp redis-3.2.1/redis.conf  6382/
[root@localhost redis-cluster]# cp redis-3.2.1/redis.conf  6383/
[root@localhost redis-cluster]# cp redis-3.2.1/redis.conf  6384/

2.五、修改每一個redis.conf,這裏我就拿6379的來作演示,其餘的同樣操做就行了安全

[root@localhost redis-cluster]# vi 6379/redis.conf

修改的內容和下面同樣(注意:先不要設置密碼,不然集羣搭建會出錯,須要設置密碼的,待集羣搭建完成再進行設置):ruby

# 0.0.0.0 表明外網能訪問
bind 0.0.0.0   
# 改成no,能夠外界遠程訪問,redis 3.2 才追加的一個功能                                      
protected-mode no  
# 開啓端口                                  
port 6379                                            
tcp-backlog 511
timeout 0
tcp-keepalive 300
# 設置yes,redis能夠後臺運行
daemonize yes                                        
supervised no
# pid路徑
pidfile /var/run/redis_6379.pid                      
loglevel notice
# 日誌文件
logfile "./6379/redis.log"                           
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
# 方便管理
dir ./6379/                                          
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
# 開啓集羣,把註釋#去掉
cluster-enabled yes                   
# 集羣的配置,配置文件首次啓動自動生成               
cluster-config-file nodes-6379.conf        
# 請求超時,設置5秒夠了          
cluster-node-timeout 5000                            
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

 

2.六、開啓6個redis節點
[root@localhost redis-cluster]# redis-server 6379/redis.conf && redis-server 6380/redis.conf && redis-server 6381/redis.conf && redis-server 6382/redis.conf && redis-server 6383/redis.conf && redis-server 6384/redis.conf

能夠查看是否開啓成功bash

[root@localhost redis-cluster]# ps -ef | grep redis

和下圖所示同樣就成功開啓服務器

3、開啓集羣模式架構

 3.一、安裝redis集羣工具和環境

[root@localhost redis-cluster]# yum install ruby && yum install -y rubygems

還有一個,用gem這個命令來安裝redis接口,gem是ruby的一個工具包

[root@localhost redis-cluster]# gem install redis
執行gem install redis後可能報錯以下:

ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.

緣由:

yum庫中ruby的版本支持到 2.0.0,可gem 安裝redis須要最低是2.2.2,本身編譯的ruby源碼,再執行仍是報錯…最後google結合幾篇文章解決了: 
採用rvm來更新ruby: 

解決方案(轉http://blog.csdn.net/fengye_yulu/article/details/77628094):

(1).安裝RVM:

[root@zhiwen redis-cluster]# gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
[root@zhiwen redis-cluster]# curl -L get.rvm.io | bash -s stable
[root@zhiwen redis-cluster]# find / -name rvm -print
/usr/local/rvm
/usr/local/rvm/scripts/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
[root@zhiwen redis-cluster]# source /usr/local/rvm/scripts/rvm

(2).查看rvm庫中已知的ruby版本:

[root@zhiwen redis-cluster]# rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.7]
[ruby-]2.3[.4]
[ruby-]2.4[.1]
ruby-head

# for forks use: rvm install ruby-head-<name> --url https://github.com/github/ruby.git --branch 2.2

# JRuby
jruby-1.6[.8]
jruby-1.7[.27]
jruby[-9.1.13.0]
jruby-head

# Rubinius
rbx-1[.4.3]
rbx-2.3[.0]
rbx-2.4[.1]
rbx-2[.5.8]
rbx-3[.84]
rbx-head

# Opal
opal

# Minimalistic ruby implementation - ISO 30170:2012
mruby-1.0.0
mruby-1.1.0
mruby-1.2.0
mruby-1[.3.0]
mruby[-head]

# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2012.02]

# Topaz
topaz

# MagLev
maglev[-head]
maglev-1.0.0

# Mac OS X Snow Leopard Or Newer
macruby-0.10
macruby-0.11
macruby[-0.12]
macruby-nightly
macruby-head

# IronRuby
ironruby[-1.1.3]
ironruby-head

(3).安裝一個ruby版本:

[root@zhiwen redis-cluster]# rvm install 2.4.1

(4).使用一個ruby版本

[root@zhiwen redis-cluster]# rvm use 2.4.1
Using /usr/local/rvm/gems/ruby-2.4.1

(5).設置默認版本

[root@zhiwen redis-cluster]# rvm use 2.4.1 --default
Using /usr/local/rvm/gems/ruby-2.4.1

(6).卸載一個已知版本

[root@zhiwen redis-cluster]# rvm remove 2.0.0
ruby-2.0.0-p648 - #already gone
Using /usr/local/rvm/gems/ruby-2.4.1

(7).查看ruby版本:

[root@zhiwen redis-cluster]# ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

最後在運行命令(gem install redis)便可。

 

3.二、啓動redis集羣,服務器IP填本身的服務器地址

[root@localhost redis-cluster]# redis-3.2.1/src/redis-trib.rb  create --replicas 1 服務器IP:6379 服務器IP:6380 服務器IP:6381 服務器IP:6382 服務器IP:6383 服務器IP:6384

安裝過程當中,會出現紅色框內提示,不用管,直接yes就行了,而後安裝ok。

 

若是:

一直等待 Waiting for the cluster to join 好久都沒有反應
緣由:
redis集羣不只須要開通redis客戶端鏈接的端口,並且須要開通集羣總線端口
集羣總線端口爲redis客戶端鏈接的端口 + 10000
如redis端口爲6379
則集羣總線端口爲16379
故,全部服務器的點須要開通redis的客戶端鏈接端口和集羣總線端口

注意:iptables 放開,若是有安全組,也要放開這兩個端口

 

 

4、設置redis密碼,注意由於要集羣,因此各節點的密碼要相同

這裏以6379舉例,別的節點如出一轍,

[root@localhost redis-cluster]# vi 6379/redis.conf

在配置文件最後添加:

masterauth 你的密碼
requirepass 你的密碼

而後重啓redis:

[root@localhost redis-cluster]# ps -ef|grep redis
[root@localhost redis-cluster]# kill -9 進程號1 && kill -9 進程號2 && kill -9 進程號3 && kill -9 進程號4 && kill -9 進程號5 && kill -9 進程號6
[root@localhost redis-cluster]# redis-server 6379/redis.conf && redis-server 6380/redis.conf && redis-server 6381/redis.conf && redis-server 6382/redis.conf && redis-server 6383/redis.conf && redis-server 6384/redis.conf

 

4、關閉防火牆(若是防火牆關閉的請忽略)

我在這就忽略了, 具體自行百度linux對應你的系統版本關閉防火牆的方法。

 

5、測試是否搭建成功,使用RedisStudio圖形界面工具分別鏈接6個節點,成功鏈接便可。

相關文章
相關標籤/搜索