集群简介

集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果

  • 分散单台服务器的访问压力,实现负载均衡
  • 分散单台服务器的存储压力,实现可扩展性
  • 降低单台服务器宕机带来的业务灾难

QQ截图20201022150933.png

Redis集群结构设计

数据存储设计

  • 通过算法设计,计算出key应该保存的位置
  • 将所有的存储空间计划切割成16384份,每台主机保存一部分每份代表的是一个存储空间,不是一个key的保存空间
  • 将key按照计算出的结果放到对应的存储空间

QQ截图20201022152458.png

集群内部通讯设计

  • 各个数据库相互通信,保存各个库中槽的编号数据
  • 一次命中,直接返回
  • 一次未命中,告知具体位置

QQ截图20201022152607.png

cluster集群结构搭建

以下搭建过程比较简略,可以参考03.Redis Cluster集群

  • 原生安装(单条命令)
  1. 配置服务器(3主3从)
  2. 建立通信(Meet)
  3. 分槽(Slot)
  4. 搭建主从(master-slave)
#进入目录
cd /root/redis-4.0.0/conf
#redis配置文件
cat > redis-6379.conf << EOF
daemonize yes
port 6379
dir "/root/redis-4.0.0/data"
logfile "6379.log"
dbfilename dump-6381.rdb
rdbcompression yes
rdbchecksum yes
cluster-enabled yes
cluster-config-file nodes_6379.conf
cluster-node-timeout 15000
EOF

cat > redis-6380.conf << EOF
daemonize yes
port 6380
dir "/root/redis-4.0.0/data"
logfile "6380.log"
dbfilename dump-6381.rdb
rdbcompression yes
rdbchecksum yes
cluster-enabled yes
cluster-config-file nodes_6380.conf
cluster-node-timeout 15000
EOF

cat > redis-6381.conf << EOF
daemonize yes
port 6381
dir "/root/redis-4.0.0/data"
logfile "6381.log"
dbfilename dump-6381.rdb
rdbcompression yes
rdbchecksum yes
cluster-enabled yes
cluster-config-file nodes_6381.conf
cluster-node-timeout 15000
EOF

cat > redis-6382.conf << EOF
daemonize yes
port 6382
dir "/root/redis-4.0.0/data"
logfile "6382.log"
dbfilename dump-6382.rdb
rdbcompression yes
rdbchecksum yes
cluster-enabled yes
cluster-config-file nodes_6382.conf
cluster-node-timeout 15000
EOF

cat > redis-6383.conf << EOF
daemonize yes
port 6383
dir "/root/redis-4.0.0/data"
logfile "6383.log"
dbfilename dump-6381.rdb
rdbcompression yes
rdbchecksum yes
cluster-enabled yes
cluster-config-file nodes_6383.conf
cluster-node-timeout 15000
EOF

cat > redis-6384.conf << EOF
daemonize yes
port 6384
dir "/root/redis-4.0.0/data"
logfile "6384.log"
dbfilename dump-6384.rdb
rdbcompression yes
rdbchecksum yes
cluster-enabled yes
cluster-config-file nodes_6384.conf
cluster-node-timeout 15000
EOF

#启动redis服务端
redis-server /root/redis-4.0.0/conf/redis-6379.conf
redis-server /root/redis-4.0.0/conf/redis-6380.conf
redis-server /root/redis-4.0.0/conf/redis-6381.conf
redis-server /root/redis-4.0.0/conf/redis-6382.conf
redis-server /root/redis-4.0.0/conf/redis-6383.conf
redis-server /root/redis-4.0.0/conf/redis-6384.conf

#进入目录
cd /root/redis-4.0.0/src

#脚本搭建集群
./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

#如果直接执行搭建脚本失败,需要执行以下代码
yum makecache fast
yum install -y rubygems
#因为国外源不可用,替换国内源
gem sources --remove https://rubygems.org/
gem sources -a http://mirrors.aliyun.com/rubygems/
gem update - system
gem install redis -v 3.3.5

Cluster配置

  • 添加节点
cluster-enabled yes|no
  • cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
cluster-config-file <filename>
  • 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
cluster-node-timeout <milliseconds>
  • master连接的slave最小数量
cluster-migration-barrier <count>

Cluster节点操作命令

  • 查看集群节点信息
cluster nodes
  • 进入一个从节点 redis,切换其主节点
cluster replicate <master-id>
  • 发现一个新节点,新增主节点
cluster meet ip:port
  • 忽略一个没有solt的节点
cluster forget <id>
  • 手动故障转移
cluster failover

redis-trib命令

  • 添加节点
redis-trib.rb add-node
  • 删除节点
redis-trib.rb del-node
  • 重新分片
redis-trib.rb reshard