1、Redis集群的简介
在redis3.0 以前,提供了Sentinel工具来监控个Master的状态,如果Master异常,则会做主从切换,将slave切换为master。当以前的master再次加入的时候,则会当成slave。其配置也是有点复杂,性能也是一般。现在redis 3.0 已经支持集群功能了,并且简单高效。
对于Redis集群与基于哨兵的主从复制的区别的理解:
Redis2.x版本,基于哨兵的主从复制,主节点的数据和从节点的数据是一样的。体现不了分布式集群的概念。
在Redis3.0版本,提供了集群的实现。至少需要3个master节点。这个集群的实现体现了分布式,数据分布在多个个master的Redis服务器上。在集群的每个master节点,有对应的槽数,用于存储整个集群数据的一部分数据。
2、Redis集群的安装
2.1 Redis集群的搭建,至少需要3个Master节点
2.2 创建一个文件夹 redis-cluster ,然后在其下面分别创建6个文件夹,如下操作:
2.2.1 创建redis-cluster文件夹
#创建文件夹redis-cluster,用于存放Redis集群节点
(1) cd /usr/local/
(2) mkdir -p /usr/local/redis-cluster
2.2.2 在redis-cluster文件夹下,创建6个文件夹
#创建代表Redis集群节点的文件夹
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
mkdir 7006
2.3 把安装Redis的配置文件 redis.conf 分配拷贝到 700* 文件夹目录下,进行修改各个redis.conf 文件的内容。也就是对 700* 下的每一个 redis.conf 文件进行修改:
# 对700* 目录下的 redis.conf 配置文件,做下面的修改
# 主要注意700*的修改
# 在修改的过程中,可以使用 linux 的字符替换 ( %s/str1/str2/g 替换 )
1、 daemonize yes
2、 port 700*
3、 bind 192.168.2.105 (必须绑定本机的ip地址,深坑勿入)
4、 dir /usr/local/redis-cluster/700* (指定数据的存放文件,必须是不同的目录,深坑勿入)
5、 cluster-enabled yes (启动集群模式)
6、 cluster-config-file nodes-700*.conf (这里700X最好和port对应。这个配置文件主要是,每一个节点都有一个配置文件,用于去获取其他节点的信息)
7、 cluster-node-timeout 5000
8、 appendonly yes (数据持久化的aof方式)
2.4 把修改后的配置文件,分别考到各个文件夹下。注意每个文件夹要修改端口号,并且dir 和nodes文件,也要不一样。
2.5 由于Redis的安装需要 ruby命令,所以需要安装ruby
# 安装ruby 和 redis 的ruby接口2.5.1 gem install redis 遇到的问题
yum install ruby
yum install rubygems
gem install redis
这里可能无法安装,因为无法连接gem服务器:
[@zw_22_90 src]# gem install redis --version 3.0.0需要手工下载并安装:
ERROR: Could not find a valid gem 'redis' (= 3.0.0) in any repository
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem2.6 首先到redis的安装目录下,执行 redis-trib.rb 的命令,创建集群
gem install -l ./redis-3.2.1.gem
#创建集群
cd /usr/local/redis-3.0.0-rc2/src/
./redis-trib.rb create --replicas 1 192.168.2.105:7001 192.168.2.105:7002 192.168.2.105:7003 192.168.2.105:7004 192.168.2.105:7005 192.168.2.105:7006
#对于 --replicas 1 ,这里的1的理解
表示一个比例的数字,表示 master : slave = 1 :1
因为上面的Redis集群,只有6个节点,而且, master : slave = 1 :1
所以上面的Reids进去,建立成功后,将会是 3个主节点master,3个从节点slave
2.7 启动Redis集群(依次启动Redis集群的节点)
# 启动Redis 集群2.8 查看各个Redis集群节点的启动情况
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7001/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7002/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7003/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7004/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7005/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7006/redis.conf
[root@cent03 redis-cluster]# ps -ef | grep redis2.9 验证Redis的集群信息
root 1957 1 0 06:43 ? 00:00:01 /usr/local/bin/redis-server 127.0.0.1:6379
root 3156 1 0 07:03 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.2.105:7001 [cluster]
root 3160 1 0 07:03 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.2.105:7002 [cluster]
root 3164 1 0 07:03 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.2.105:7003 [cluster]
root 3168 1 0 07:03 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.2.105:7004 [cluster]
root 3172 1 0 07:04 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.2.105:7005 [cluster]
root 3176 1 0 07:04 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.2.105:7006 [cluster]
root 3184 2566 0 07:04 pts/0 00:00:00 grep redis
2.9.1 登录集群的任意一个节点
# -c 表示集群模式
/usr/local/redis/bin/redis-cli -c -h 192.168.2.105 -p 7001
2.9.2 查看集群信息
192.168.2.105:7001> cluster info
cluster_state:ok
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:1
cluster_stats_messages_sent:28506
cluster_stats_messages_received:28434
2.9.3 查看集群的节点信息
192.168.2.105:7001> cluster nodes
cabff9be14080ae12bfad0b199ae737639ec57bd 192.168.2.105:7003 master - 0 1477547152433 3 connected 10923-16383
1b362004cf174d9ecb72c0650117781618c52a70 192.168.2.105:7004 slave aae7ff08b8cc4bb5473044a52f926b6e82c96840 0 1477547150920 4 connected
286b1ed602c9e74f23b8bd8d66db50308b256d3e 192.168.2.105:7006 slave cabff9be14080ae12bfad0b199ae737639ec57bd 0 1477547150384 6 connected
f9a0fbd03254b0010bca6782867dfa65f21a2448 192.168.2.105:7002 master - 0 1477547150920 2 connected 5461-10922
987b27c96774f9c9bbbbf7bf3ccfe4e4b2e4c3e7 192.168.2.105:7005 slave f9a0fbd03254b0010bca6782867dfa65f21a2448 0 1477547151929 5 connected
aae7ff08b8cc4bb5473044a52f926b6e82c96840 192.168.2.105:7001 myself,master - 0 0 1 connected 0-5460
3、Redis集群的关闭
3.1 依次关闭各个Redis 数据库服务
# -c 表示集群模式
[root@cent03 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.2.105 -p 7001 shutdown
[root@cent03 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.2.105 -p 7002 shutdown
[root@cent03 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.2.105 -p 7003 shutdown
[root@cent03 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.2.105 -p 7004 shutdown
[root@cent03 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.2.105 -p 7005 shutdown
[root@cent03 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.2.105 -p 7006 shutdown