linux下redis的安装和集群搭建

一、redis概述

  1.1、目前redis支持的cluster特性:
  1):节点自动发现。
  2):slave->master 选举,集群容错。
  3):Hot resharding:在线分片。
  4):进群管理:cluster xxx。
  5):基于配置(nodes-port.conf)的集群管理。
  6):ASK 转向/MOVED 转向机制。
  1.2、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状态。
二、redis集群搭建

2.1、下载和解压redis,这里安装redis-3.2.1版本的,3.0以下版本不支持集群。

[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.2、编译安装

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

2.3、创建6个节点文件夹,每个文件夹我们就以每个端口号命名,方便管理

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

2.4、这里不需要复制整个redis,只复制redis.conf到对应文件夹

[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.5、修改每个redis.conf,这里我就拿6379的来做演示,其他的一样操作就好了

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

修改的内容和下面一样(注意:先不要设置密码,否则集群搭建会出错,需要设置密码的,待集群搭建完成再进行设置):

# 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、开启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

可以查看是否开启成功

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

和下图所示一样就成功开启

三、开启集群模式

 3.1、安装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.2、启动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 放开,如果有安全组,也要放开这两个端口

 

 

四、设置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

 

四、关闭防火墙(如果防火墙关闭的请忽略)

我在这就忽略了, 具体自行百度linux对应你的系统版本关闭防火墙的方法。

 

五、测试是否搭建成功,使用RedisStudio图形界面工具分别连接6个节点,成功连接即可。

 

 

posted @ 2017-07-13 10:05  007少侠  阅读(544)  评论(0编辑  收藏  举报
友情链接:便宜vps(CN2GIA线路)
站长统计: