- 三主三从集群模式
1)、新建redis集群目录:7001~7006工作目录【/app/soft/redis-cluster/目下】
2)、在7001~7006 目录下创建bin和conf 目录,然后将/app/soft/redis/bin目录下的文件分别拷贝到7001~7006 目录,然后在7001~7006 目录conf文件夹创建redis.conf 文件。修改配置文件:
include /app/soft/redis-cluster/redis_common.conf
port 7006 【每个目录下端口自行定义,同一台服务器不能冲突】
#requirepass 1q2w3e4r
logfile "/app/soft/redis/logs/m.log"【日志路径可自行定义】
dir /app/soft/redis/data【数据存储路径可自行定义】
pidfile redis_m.pid
dbfilename dump_m.rdb
appendfilename "appendonly_m.aof"
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file nodes-7006.conf 【每目录文件名自行定义,一台服务器不能冲突】
4)、将redis编译安装后的配置文件/app/soft/redis-5.0.12/redis.conf 拷贝至/app/soft/redis-cluster/ 目录并重命名为redis_common.conf
5)、修改配置文件redis_common.conf
#bind 127.0.0.1
protected-mode no
daemonize yes
6)、在001~7006 /bin目录下分别执行以下命令启动redis服务
./redis-server ../conf/redis.conf
2、创建集群【进入redis解压目录/app/soft/redis-5.0.12/src】执行以下命令
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
--cluster-replicas 1【表示主从复制节点比例1:1,不跟这些指令执行时候有可能出现2主4从模式。】分配好主节点Master和从节点Slave及solt(槽)的大小,默认redis集群中仅含有16384个槽点。
3、查看redis集群中各节点【进入redis解压目录/app/soft/redis-5.0.12/src,在集群中任意节点输入以下命令】
./redis-cli --cluster check localhost:7001
4、Redis集群的会根据数据的key值计算一个slot(槽位),然后把数据写入Master节点的Slot,对应的slave节点会和master节点进行主从同步。读取数据时也会根据一致性哈希算法从master节点读取数据。
查看各几点占用槽位的命令./redis-cli --cluster check 127.0.0.1:7001
5、当master节点挂掉(服务异常、内存溢出、宕机)时,对应slave节点才会启动充当Master节点
127.0.0.1:7001> shutdown【登录到节点7001,停止redis服务】
not connected>
not connected> exit
[domains@ensemble1 src]$ ./redis-cli --cluster check 127.0.0.1:7001
Could not connect to Redis at 127.0.0.1:7001: Connection refused
查看集群情况,在其他节点执行以下命令:./redis-cli --cluster check 127.0.0.1:7002【此时7001原来的slave节点升级为Master节点,7001节点不可用】
注意:必须3个或以上主节点,否则创建集群失败;且当存活主节点数小于总数一半时集群不可以用。需要重新启动集群
6、集群异常时如何处理
1)、某一个Mastar点服务异常时,对应的Slave节点会自动切换为新的Master节点,数据使用/app/soft/redis/data/ 目录下的数据。
2)、当异常节点服务恢复后,执行 ./redis-cli --cluster check ip:端口,重新检查并将该节点添加到集群中。
3)、若出现对应的主从节点同时服务异常,则集群不可对外提供服务。需要尽快恢复节点
7、执行cluster info 命令查看集群状态信息
[domains@ensemble1 src]$ ./redis-cli -c -p 7001【-c 以集群方式连接】
127.0.0.1:7001> cluster info
8、集群中节点的操作
1)、从节点的删除
./redis-cli --cluster del-node 127.0.0.1:7001 ebf3defc027d5ec32bbc491f0332cc652aae23ab【这个是要删除的节点ID】
2)、添加从节点
./redis-cli --cluster add-node 127.0.0.1:7001 127.0.0.1:7006 --cluster-slave --cluster-master-id 797d05071cc019b65d4f6ff3ce724b1f95bd0612
#添加节点时候一定要清楚节点中的数据
#127.0.0.1:7001 127.0.0.1:7006分别表示新加入的slave节点和集群中任意一个节点
#--cluster-slave表示加入的是slave节点
#--cluster-master-id表示slave对应的maste节点的ID
结果出现:make it join the cluster 表示节点添加成功
注意:添加的从节点必须清空数据才能添加,有数据的时候添加会报错。【登录需要添加的节点,执行flushdb命令清空redis数据库后再添加即可】