Redis集群至少需要3个节点,来支持投票容错机制,每个节点都有从节点,所有最少是6个服务(3个主3个从)
因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
当有一个主节点宕机,并且它有多个从节点那么这多个从节点就开始竞争选举master,
redis集群没有备份,那么当master挂掉之后那么这个节点上的数据因为没有salve备份和替换有可能会丢失,所以一般集群都会有备份的,一般是3主3从的配置
wget http://download.redis.io/releases/redis-6.0.6.tar.gz # 解压 tar -xzvf redis-6.0.6.tar.gz # 安装编译工具 yum install gcc -y yum -y install gcc automake autoconf libtool make cd redis-6.0.6 # 编译安装 make && make install PREFIX=/usr/local/redis/redis-6.0.6_cluster/build
cd /usr/local/redis/redis-cluster mkdir redis01 cp /usr/local/redis/redis-6.0.6_cluster/build/bin ./redis01 # 修改配置 vim redis.conf --------------------- # 后台配置 开启 daemonize yes # 集群配置 开启 cluster-enabled yes # bind bind 0.0.0.0 # 关闭保护模式 protected-mode no # 端口 port 7001 --------------------- # copy6份 cd /usr/local/redis/redis-cluster cp redis01 redis02 cp redis01 redis03 cp redis01 redis04 cp redis01 redis05 cp redis01 redis06 # 修改各自中的端口 为 7001-7006
cd /usr/local/redis/redis-cluster
vim start-all.sh
#!/bin/bash echo 'start redis01!' cd /usr/local/redis/redis-cluster/redis01 ./redis-server redis.conf echo 'complate redis01!' echo 'start redis02!' cd /usr/local/redis/redis-cluster/redis02 ./redis-server redis.conf echo 'complate redis02!' echo 'start redis03!' cd /usr/local/redis/redis-cluster/redis03 ./redis-server redis.conf echo 'complate redis03!' echo 'start redis04!' cd /usr/local/redis/redis-cluster/redis04 ./redis-server redis.conf echo 'complate redis04!' echo 'start redis05!' cd /usr/local/redis/redis-cluster/redis05 ./redis-server redis.conf echo 'complate redis05!' echo 'start redis06!' cd /usr/local/redis/redis-cluster/redis06 ./redis-server redis.conf echo 'complate redis06!'
vim shutdown.sh
#!/bin/bash redis01/redis-cli -p 7001 shutdown redis01/redis-cli -p 7002 shutdown redis01/redis-cli -p 7003 shutdown redis01/redis-cli -p 7004 shutdown redis01/redis-cli -p 7005 shutdown redis01/redis-cli -p 7006 shutdown echo 'complate shutdown!'
# 启动全部服务 ./start-all.sh # 查询是否启动 netstat -nultp | grep redis # 创建集群 redis-cli --cluster create 192.168.3.142:7001 192.168.3.142:7002 192.168.3.142:7003 192.168.3.142:7004 192.168.3.142:7005 192.168.3.142:7006 --cluster-replicas 1 输入:yes # 关闭集群 ./shutdown.sh
# 随便进入一个节点 redis-cli -p 7001 -c # 查询节点信息 cluster nodes ------------------------- a40a6fcfadf3629cbf526d3d42945b1fab7d7638 192.168.3.142:7001@17001 myself,master - 0 1619347646000 1 connected 0-5460 1379513c0c0a6c495030b666d590caa0629b399a 192.168.3.142:7003@17003 master - 0 1619347646000 3 connected 10923-16383 4e793b425b1a2347d2f40a67c4c1bf346e894594 192.168.3.142:7006@17006 slave cbb56a4d8e6f55218f98135d1fafc497076d894c 0 1619347649076 2 connected 470d7cece91aa170640a494bceb2fc195696485a 192.168.3.142:7005@17005 slave a40a6fcfadf3629cbf526d3d42945b1fab7d7638 0 1619347647035 1 connected 20507a8d47f36aebc8b486d7cfbfc18d778dff19 192.168.3.142:7004@17004 slave 1379513c0c0a6c495030b666d590caa0629b399a 0 1619347648054 3 connected cbb56a4d8e6f55218f98135d1fafc497076d894c 192.168.3.142:7002@17002 master - 0 1619347647000 2 connected 5461-10922 ------------------------- # 可以看出3个主3个从
# 到各自redis0*中删除对应文件 rm -rf dump.rdb nodes.conf