下载Redis 3.x:前往下面地址选择合适的版本下载

Redis下载

wget http://download.redis.io/releases/redis-3.2.0.tar.gz

安装Redis 3.x

tar -xvzf redis-3.2.0.tar.gz
cd redis-3.2.0
yum -y install gcc gcc-c++
make
make PREFIX=/usr/local/redis install

启动6个Redis节点(实际生产环境中最好使用不同机器)

创建目录

mkdir /usr/local/{redis_7001,redis_7002,redis_7003,redis_7004,redis_7005,redis_7006}
cp redis.conf /usr/local/redis_7001

修改配置文件:/usr/local/redis_7001/redis.conf

# 打开后台运行
daemonize yes
# 指定PID文件
pidfile /var/run/redis_7001.pid
# 指定监听端口
port 7000
# 修改监听地址
bind 0.0.0.0
# 开启集群
cluster-enabled yes
# 指定集群配置文件
cluster-config-file nodes.conf
# 指定集群节点超时时间
cluster-node-timeout 5000

将修改好的redis.conf复制到其它创建的目录,只需要修改PID文件名和监听端口即可

分别启动6个节点

# 必须切换到配置文件所有目录执行
cd /usr/local/redis_7001/
/usr/local/redis/bin/redis-server redis.conf
export PATH=$PATH:/usr/local/redis/bin

将6个Redis节点组成集群

在其中一个节点安装ruby,默认rpm包安装版本过低,需要>=2.2.2的版本

ruby下载

# 安装ruby
tar -xvzf ruby-2.3.7.tar.gz
cd ruby-2.3.7
./configure --prefix=/usr/local/ruby
make
make install
export PATH=$PATH:/usr/local/ruby/bin
# 安装zlib扩展,在ruby源码包目录下执行以下命令
cd ext/zlib/
ruby extconf.rb
make
make install
# 安装openssl扩展,在ruby源码包目录下执行以下命令
cd ext/openssl/
yum -y install openssl-devel
ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib
ln -s /usr/local/src/ruby-2.3.7/include /
make
make install

在安装了ruby的节点上面执行以下命令,注意IP:PORT一定不要使用127.0.0.1:PORT,一定得使用客户端可以访问的IP地址

# 需要输入yes确认
/usr/local/src/redis-3.2.0/src/redis-trib.rb create --replicas 1 172.16.10.10:7001 172.16.10.10:7002 172.16.10.10:7003 172.16.10.10:7004 172.16.10.10:7005 172.16.10.10:7006

连接集群

# 在任意节点执行,可连接至任何一个节点
redis-cli -c -h 172.16.10.10 -p 7001

集群管理

查看集群状态

redis-cli -h 172.16.10.10 -p 7001 cluster nodes
# 或者
/usr/local/src/redis-3.2.0/src/redis-trib.rb check 172.16.10.10:7001

删除节点

删除一个节点,最后面跟节点的ID,可以通过查看集群状态获取某个节点的ID,但是在移除主节点的时候需要确保主节点为空,如果不是空的需要将这个节点的数据重新分片到其它主节点,被移除的主节点将作为一个从节点存在

/usr/local/src/redis-3.2.0/src/redis-trib.rb del-node 172.16.10.10:7001 1110cc10ec93ba7bfd409af0a5ade884ac361551

新增主节点

新增加主节点,172.16.10.10:7007代表新的节点,172.16.10.10:7001代表集群中任何一节点,新增加的节点默认为master节点,但没有分配哈希槽 ,这时候还无法正常工作,只需要使用redis-trib.rb程序移动一些哈希槽到新节点,这时候就可以正常工作了

/usr/local/src/redis-3.2.0/src/redis-trib.rb add-node 172.16.10.10:7007 172.16.10.10:7001

新增加从节点

方法1:新增一个从节点,172.16.10.10:7007代表新的节点,172.16.10.10:7001代表集群中任何一节点,这时候新增加的从节点为任意一个主节点的从

/usr/local/src/redis-3.2.0/src/redis-trib.rb add-node --slave 172.16.10.10:7007 172.16.10.10:7001

方法2:新增一个从节点并指定主节点为1110cc10ec93ba7bfd409af0a5ade884ac361551,172.16.10.10:7007代表新的节点

/usr/local/src/redis-3.2.0/src/redis-trib.rb add-node --slave --master-id 1110cc10ec93ba7bfd409af0a5ade884ac361551 172.16.10.10:7007 172.16.10.10:7001

方法3:

通过Redis命令行添加,首先需要按新增加一个主节点的命令执行,但不要分配哈希槽,直接进入到新节点的Redis命令行里面执行以下命令

# 以下命令表示将当前节点作为1110cc10ec93ba7bfd409af0a5ade884ac361551的从节点,这种方法也可以改变一个从节点为另外一个主节点的从节点
172.16.10.10:7007> cluster replicate 1110cc10ec93ba7bfd409af0a5ade884ac361551

集群测试

正常情况下集群中只要有一半的节点存活那么集群都可以正常提供工作,测试可以尝试宕掉集群中任意三台机器再对数据进行读写操作看下是否正常,并使用命令观察集群状态变化

扩展知识

集群环境中配置Redis访问需要密码认证

在集群所有节点的配置文件中增加以下内容

# 访问Redis的密码,需要将pssword改为自己的密码
requirepass password
# 集群之间通讯的密码,因为配置了的访问密码,所以这里的密码和requirepass的密码一样
masterauth password

修改好后重启所有节点,这时候再使用前面的查看集群状态时无法查看,因为需要认证

redis-cli查看方法如下:

# -a后面跟密码
redis-cli -h 172.16.10.10 -p 7001 -a password cluster nodes

redis-trib.rb查看方法如下:

修改 /usr/local/ruby/lib/ruby/gems/2.3.0/gems/redis-4.0.1/lib/redis/client.rb,修改完成后再执行原来的命令查看

# 将password后面的值改为配置的密码,注意加双引号
    DEFAULTS = {
      :url => lambda { ENV["REDIS_URL"] },
      :scheme => "redis",
      :host => "127.0.0.1",
      :port => 6379,
      :path => nil,
      :timeout => 5.0,
      :password => nil,
      :db => 0,
      :driver => nil,
      :id => nil,
      :tcp_keepalive => 0,
      :reconnect_attempts => 1,
      :inherit_socket => false
    }

如何进入redis命令行

# 指定-a选项并跟上密码
redis-cli -c -h 172.16.10.10 -p 7001 -a password

Redis集群教程

Redis集群规范