之前承诺大家出redis-cluster 集群部署的教程,一晃就是一年,实在抱歉,由于工作原因,大家相互理解下,今天就分享给大家。这套部署方案是我测试过,并且我们正在使用的教程,网上其它例子也很多,找到适合自己的才是最好的,还请大家多多包涵,互相学习探讨,关于linux 的一些高级教程,可以加我q329570036 或者v (wqx2080) 进行探讨,谢谢。话不多说直接上教程。
版本选择
Redis 3.2.8
Ruby 2.3
准备一台机器,系统版本为CentOS7。
1、下载软件包
# wget http://download.redis.io/releases/redis-3.2.8.tar.gz
2、解压
# tar xvf redis-3.2.8.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv redis-3.2.8/ redis
3、编译
# yum groupinstall -y "Development Tools"
# cd redis
# make
4、为多实例redis配置启动环境
# mkdir -pv /etc/redis-cluster/{7001,7002}
cp redis.conf /etc/redis-cluster/7001/
cp redis.conf /etc/redis-cluster/7002/
mkdir /var/log/redis
mkdir /var/lib/redis
cp /usr/local/redis/src/redis-cli /bin/
cp /usr/local/redis/src/redis-server /bin/
5、redis.conf文件配置
文件最后添加以下信息(注意不要重复添加)
bind 192.168.11.71
daemonize yes
pidfile /var/run/redis_7001.pid
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
6、启动服务
/usr/local/redis/src/redis-server /etc/redis-cluster/7001/redis.conf
7、查看服务启动状态
ps -ef|grep redis
yum install centos-release-scl-rh
# yum install rh-ruby23 -y //直接yum安装即可
# scl enable rh-ruby23 bash //必要一步
# ruby -v
用 gem 这个命令来安装 redis接口(gem是ruby的一个工具包)
#gem install redis
设置环境变量
echo "PATH=$PATH:/usr/local/redis/src/" >> /etc/profile
source /etc/profile
检查集群状态
#/usr/local/redis/src/redis-trib.rb check 192.168.11.71:7001
连接服务
#/usr/local/redis/src/redis-cli -c -h 192.168.11.71 -p 7001
查看集群状态
#CLUSTER INFO
192.168.11.73:7006> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:10
cluster_size:4
cluster_current_epoch:10
cluster_my_epoch:10
cluster_stats_messages_sent:30215
cluster_stats_messages_received:27362
cluster_state:集群的状态。ok表示集群是成功的,如果至少有一个solt坏了,就将处于error状态。
cluster_slots_assigned:有多少槽点被分配了,如果是16384,表示全部槽点已被分配。
cluster_slots_ok:多少槽点状态是OK的, 16384 表示都是好的。
cluster_slots_pfail:可能已经失效的槽的数目
cluster_slots_fail:已经失效的槽的数目
cluster_known_nodes:已知节点的集群中的总数,包括在节点 握手的状态可能不是目前该集群的成员。这里总共有10个。
cluster_size:集群中设置的分片个数简单的说就是集群中主节点[Master]的数量。
cluster_current_epoch:集群中的currentEpoch总是一致的,currentEpoch越高,代表节点的配置或者操作越新,集群中最大的那个node epoch
cluster_my_epoch:当前节点的config epoch,每个主节点都不同,一直递增, 其表示某节点最后一次变成主节点或获取新slot所有权的逻辑时间.
cluster_stats_messages_sent:通过群集节点到节点的二进制总线发送的消息数。
cluster_stats_messages_received:通过群集节点到节点的二进制总线上接收报文的数量。
查看节点状态
#CLUSTER NODES
测试
get 和 set数据
/usr/local/redis/src/redis-cli -c -h 192.168.11.71 -p 7001
进入命令窗口,直接 set hello good
通过get hello 验证
新建集群
/usr/local/redis/src/redis-trib.rb create --replicas 1 192.168.11.71:7001 192.168.11.71:7002 192.168.11.72:7003 192.168.11.72:7004 192.168.11.73:7005 192.168.11.73:7006
*集群添加需要一个一个添加,根据提示重复执行
添加Master节点
#前面的ip和端口号为新添加的节点,后面的为集群中任意一个节点。
/usr/local/redis/src/redis-trib.rb add-node 192.168.11.73:7006 192.168.11.71:7001
添加Slave节点
/usr/local/redis/src/redis-trib.rb add-node --slave --master-id 3771574aeba36ac672bdf9c7abb77db1613951e5 192.168.11.73:7006 192.168.11.71:7001
删除节点
/usr/local/redis/src/redis-trib.rb del-node 192.168.11.73:7006 9af76c7549ec26957d4c4d72637292e3dba47173
遇到的问题
注意:新增节点如果没有成功,可以按以下方式修改
[ERR] Node 192.168.11.73:7006 is not empty.Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决方法:
1)、将需要新增的节点下aof、rdb等本地备份文件删除;
2)、将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件(/var/lib/redis/nodes-7XXX.conf);
3)、再次添加新节点如果还是报错,则登录新Node, /usr/local/redis/src/redis-cli -c -h 192.168.11.71 -p 7001对数据库进行清除:
172.168.11.71:7001> flushdb #清空当前数据库
集群创建重试步骤:
ps aux|grep redis
kill -9 pid
rm -rf /var/lib/redis/*
/usr/local/redis/src/redis-cli -c -h 192.168.11.71 -p 7001
192.168.11.71:7001> flushdb
查看命令
/usr/local/redis/src/redis-trib.rb
获取所有的key
#KEYS *
压力测试
/usr/local/redis-3.2.8/src/redis-benchmark -h 192.168.11.56 -p 6379 -n 1000000 -t set,get,lpush,lpop -P 16 -q