下载redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
wget命令无效,执行下面安装插件
yum -y install wget
复制redis.conf文件多分(这里配置3个1主1从,形成3主3从)
port 7001#修改成自己对应的端口号
#bind 127.0.0.1 #注释或者去掉这个
logfile "/root/redis-cluster/redis.log"#事先创建好,指定了记录日志的文件
dir /root/redis-cluster/7001/ #事先创建好,数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
appendonly yes 开启AOF功能需要设置配置:appendonly yes,默认不开启
默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
protected-mode no #保护模式 yes改为no
cluster-enabled yes #是否开启集群
cluster-config-file nodes7001.conf#根据目录不同区分,集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
cluster-node-timeout 5000 节点互连超时的阀值。集群节点超时毫秒数
进入src下启动redis 必须是6个节点,集群最少需要3个主节点
./redis-server ../../7000/redis0.conf &
./redis-server ../../7001/redis1.conf &
./redis-server ../../7002/redis2.conf &
./redis-server ../../7003/redis3.conf &
./redis-server ../../7004/redis4.conf &
./redis-server ../../7005/redis5.conf &
ps -ef | grep redis查看启动的redis节点
启动集群 redis/src目录下
redis-cli --cluster create 192.168.198.128:7000 192.168.198.128:7001 192.168.198.128:7002 192.168.198.128:7003 192.168.198.128:7004 192.168.198.128:7005 --cluster-replicas 1
#cluster-replicas 1 设置一主一从,代表一个主节点下面有几个从节点
输入命令后如下图提示是否按当前的主从配置,输入yes开始配置
输入./redis-cli -c -p 7000 查看集群
这要注意有输入-c(表示集群模式)
然后执行cluster nodes显示如图则表示集群部署成功
至此集群模式配置完成
水平扩容
复制两份redis.conf 7006/redis6.conf、7007/redis7.conf,一主一从扩容
./redis-server ../../7006/redis6.conf &
./redis-server ../../7007/redis7.conf &
增加主节点
./redis-cli --cluster add-node 192.168.0.31:7006 192.168.0.31:7000
添加到主节点中,7000为自己任意主节点
添加后槽显示空
使用redis-cli命令为7006分配hash槽,找到集群中的任意一个主节点(7000),对其进行重新分片工作
命令:./redis-cli --cluster reshard 192.168.198.128:7000
输入100,分配100槽
提示需要加入槽点的id是多少(槽点id来自如下图,在cluster nodes中查询到需要增加槽点的主节点输入即可)
下来需要输入增加类型(all,done两种)
两种方式:
一种是all,以将所有节点用作散列槽的源节点,
一种是done,这种是你自己选择从哪个节点上拿出来节点分给8007
备注:all是随机的,比如说我们要分出1000个,则3个主节点分别拿出333个,333个,334个节点分别7007,这里我们选择done,从7000拿1000个给7006
如果选择done,如上图需要先选择分配的master的id,master任意选择,在输入done回车就行
下图是否开始分配槽数,输入yes就行,分配开始
如图分配完成有槽数
添加从节点
./redis-cli --cluster add-node 192.168.198.128:7007 192.168.198.128:7001
如主节点同理,将需要加入的节点加入到集群中任意对应的节点(7001是集群中的从节点)
加入成功!
进入到当前从节点客户端
执行与主节点绑定命令CLUSTER REPLICATE d6c245137ae1c47bdabfee1e1cd8bfdff5acaf3f
d6c245137ae1c47bdabfee1e1cd8bfdff5acaf3f :主节点id
查看
7006已经是7007的主节点了
删除从节点:
命令:
./redis-cli --cluster del-node 192.168.198.128.31:7007 230e6e5b45e310fffafd2809f0bd5c869889a015
删除主节点:
命令:
./redis-cli --cluster reshard 192.168.198.128:7006
关闭节点:
命令:./redis-cli -p 7000 shutdown
服务启动成功了但是telnet 192.168.xx.xx 7001不通
如果telnet不通,但是ps -ef|grep redis可以看到服务或者本地客户端可以连接,远程客户端连接不了。这个时候就要修改redis.conf参数了
vim 7001(2)/redis.co
关掉受保护模式
启动redis时没有反应,查看进程没有相关进程号。
Redis.conf文件中有一个
Logfile标签,可以设置日志文件输出到这个文件中进行排查问题
注意以下的情况[ERR] Node 192.168.198.128:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决:
这个时候需要将每个节点下的这几个文件给删掉(测试情况删掉,实际应用不要删,这是备份文件以及节点信息,按实际的情况进行处理)