部署

予早 2024-10-19 16:05:32
Categories: Tags:

主从:一主两从

IP PORT 角色
192.168.1.9 7001 master
192.168.1.9 7002 replica
192.168.1.9 7003 replica

redis01

mkdir redis01

三个目录中分别放置redis.conf配置文件

vi redis.conf
# 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 密码,设置后访问Redis必须输入密码
requirepass "123456"
# 监听的端口
port 7001
# 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录
dir "/home/centos/redis01"
# 数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15
databases 1
# 设置redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile "redis.log"
# 主节点密码,构建集群时从节点需要配置
# 注意,若使用哨兵集群,则从节点会切换为主节点,所以随后若主节点恢复降为从节点时也需要该值,所以主从哨兵集群中必须所有工作节点必须配置主节点密码,同时,也由于会自动切换,所以任意一个节点可能需要配置其他节点的密码,由此可以推出,主从哨兵集群中必须所有密码一样才能满足自动切换的条件
masterauth 123456
# Generated by CONFIG REWRITE
pidfile "/var/run/redis.pid"
save 3600 1
save 300 100
save 60 10000
user default on #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 ~* &* +@all
replicaof 192.168.1.9 7003
redis-server ./redis01/redis.conf

redis02

redis03

建立拓扑

注意:在5.0以后新增命令replicaof,与salveof效果一致。

replicaof <masterIp> <masterPort>
replicaof 192.168.1.9 7001
replicaof 主库IP 主库端口
 
slaveof 主库IP 主库端
 
slaveof no one    设置本机不再是任何redis服务的从机

使用info查看节点信息,可以在master查看主节点信息,可以看到子节点相关信息

可以在replica节点看到主节点相关信息

从节点会禁止写操作

127.0.0.1:7002> set key value
(error) READONLY You can't write against a read only replica.

主从哨兵:一主两从三哨兵

在先前基础上增加三个节点的哨兵集群构成一主两从三哨兵集群。

节点 IP PORT
sentinel01 192.168.1.9 27001
sentinel02 192.168.1.9 27002
sentinel03 192.168.1.9 27003
mkdir sentinel01 sentinel02 sentinel03

sentinel01

mkdir sentinel01
port 27001
daemonize yes
dir "/home/centos/sentinel01"
logfile "sentinel.log"
sentinel monitor mymaster 192.168.1.9 7001 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
redis-sentinel /home/centos/sentinel01/sentinel.conf
mkdir sentinel02
port 27002
daemonize yes
dir "/home/centos/sentinel02"
logfile "sentinel.log"
sentinel monitor mymaster 192.168.1.9 7001 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
redis-sentinel /home/centos/sentinel02/sentinel.conf
mkdir sentinel03
port 27003
daemonize yes
dir "/home/centos/sentinel03"
logfile "sentinel.log"
sentinel monitor mymaster 192.168.1.9 7001 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
redis-sentinel /home/centos/sentinel03/sentinel.conf

测试故障切换

尝试让master节点7001宕机,查看sentinel日志:

查看7003的日志:

查看7002的日志:

主从分片

集群结构

主从分片,三分片,每个分片一主一从

IP PORT 角色
192.168.1.9 8001 master
192.168.1.9 8002 master
192.168.1.9 8003 master
192.168.1.9 9001 slave
192.168.1.9 9002 slave
192.168.1.9 9003 slave

redis01

  1. 创建目录
mkdir -p /usr/local/redis_cluster/redis01
  1. 移动到工作目录
cd /usr/local/redis_cluster/redis01
  1. 创建配置文件
vi redis.conf
# redis.conf

bind 0.0.0.0
port 8001
daemonize yes
protected-mode no
databases 1
requirepass 123456
masterauth 123456
pidfile redis.pid
logfile "redis.log"
# RDB
dir /usr/local/redis_cluster/redis01
dbfilename dump.rdb
# AOF
appendonly yes
appendfilename "dump.aof"
# 集群
cluster-enabled yes
cluster-config-file /usr/local/redis_cluster/redis01/nodes.conf
cluster-node-timeout 5000
  1. 启动节点
redis-server /usr/local/redis_cluster/redis01/redis.conf

redis02

  1. 创建目录
mkdir -p /usr/local/redis_cluster/redis02
  1. 移动到工作目录
cd /usr/local/redis_cluster/redis02
  1. 创建配置文件
vi redis.conf
# redis.conf

bind 0.0.0.0
port 8002
daemonize yes
protected-mode no
databases 1
requirepass 123456
masterauth 123456
pidfile redis.pid
logfile "redis.log"
# RDB
dir /usr/local/redis_cluster/redis02
dbfilename dump.rdb
# AOF
appendonly yes
appendfilename "dump.aof"
# 集群
cluster-enabled yes
cluster-config-file /usr/local/redis_cluster/redis02/nodes.conf
cluster-node-timeout 5000
  1. 启动节点
redis-server /usr/local/redis_cluster/redis02/redis.conf

redis03

  1. 创建目录
mkdir -p /usr/local/redis_cluster/redis03
  1. 移动到工作目录
cd /usr/local/redis_cluster/redis03
  1. 创建配置文件
vi redis.conf
# redis.conf

bind 0.0.0.0
port 8003
daemonize yes
protected-mode no
databases 1
requirepass 123456
masterauth 123456
pidfile redis.pid
logfile "redis.log"
# RDB
dir /usr/local/redis_cluster/redis03
dbfilename dump.rdb
# AOF
appendonly yes
appendfilename "dump.aof"
# 集群
cluster-enabled yes
cluster-config-file /usr/local/redis_cluster/redis03/nodes.conf
cluster-node-timeout 5000
  1. 启动节点
redis-server /usr/local/redis_cluster/redis03/redis.conf

redis04

  1. 创建目录
mkdir -p /usr/local/redis_cluster/redis04
  1. 移动到工作目录
cd /usr/local/redis_cluster/redis04
  1. 创建配置文件
vi redis.conf
# redis.conf

bind 0.0.0.0
port 9001
daemonize yes
protected-mode no
databases 1
requirepass 123456
masterauth 123456
pidfile redis.pid
logfile "redis.log"
# RDB
dir /usr/local/redis_cluster/redis04
dbfilename dump.rdb
# AOF
appendonly yes
appendfilename "dump.aof"
# 集群
cluster-enabled yes
cluster-config-file /usr/local/redis_cluster/redis04/nodes.conf
cluster-node-timeout 5000
  1. 启动节点
redis-server /usr/local/redis_cluster/redis04/redis.conf

redis05

  1. 创建目录
mkdir -p /usr/local/redis_cluster/redis05
  1. 移动到工作目录
cd /usr/local/redis_cluster/redis05
  1. 创建配置文件
vi redis.conf
# redis.conf

bind 0.0.0.0
port 9002
daemonize yes
protected-mode no
databases 1
requirepass 123456
masterauth 123456
pidfile redis.pid
logfile "redis.log"
# RDB
dir /usr/local/redis_cluster/redis05
dbfilename dump.rdb
# AOF
appendonly yes
appendfilename "dump.aof"
# 集群
cluster-enabled yes
cluster-config-file /usr/local/redis_cluster/redis05/nodes.conf
cluster-node-timeout 5000
  1. 启动节点
redis-server /usr/local/redis_cluster/redis05/redis.conf

redis06

  1. 创建目录
mkdir -p /usr/local/redis_cluster/redis06
  1. 移动到工作目录
cd /usr/local/redis_cluster/redis06
  1. 创建配置文件
vi redis.conf
# redis.conf

bind 0.0.0.0
port 9003
daemonize yes
protected-mode no
databases 1
requirepass 123456
masterauth 123456
pidfile redis.pid
logfile "redis.log"
# RDB
dir /usr/local/redis_cluster/redis06
dbfilename dump.rdb
# AOF
appendonly yes
appendfilename "dump.aof"
# 集群
cluster-enabled yes
cluster-config-file /usr/local/redis_cluster/redis06/nodes.conf
cluster-node-timeout 5000
  1. 启动节点
redis-server /usr/local/redis_cluster/redis06/redis.conf

分别启动

创建集群拓扑

# --cluster-replicas 用于指定每一个分片中从节点数量
# master数量 = 总结点数 / (单个分片中从节点 + 1)
redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.1.9:8001 192.168.1.9:8002 192.168.1.9:8003 192.168.1.9:9001 192.168.1.9:9002 192.168.1.9:9003

输入命令开始生成集群配置,等待确认

确认配置后完成集群构建

查看集群信息

info replication        查看主从复制的相关信息
cluster info              查看集群所有节点的信息  
cluster nodes          查看集群整体信息
redis-cli -a 123456 -p 8001 cluster nodes

集群读写

单节点操作在集群中不会自动转发

redis-cli -a 123456 -p 8001

集群操作会被自动转发

redis-cli -c -a 123456 -p 8001

故障切换

cluster failover

缩容

从集群中删除以9003为主节点的整个分片,哈希槽为0-5460。

redis-cli -a 123456 --cluster check 192.168.1.9:8001

将分片的从节点删除

redis-cli -a 123456 --cluster del-node 192.168.1.9:8001 ccd516357bce6f5abc038a406e8d9377c802d26a

然后将分片的主节点移除,移除主节点之前需要将哈希槽移走

redis-cli -a 123456 --cluster reshard 192.168.1.9:8002

选择哈希槽数量,选择移动到哪个主节点,选择从哪里移动

确认

移动成功

删除无哈希槽的主节点

redis-cli -a 123456 --cluster del-node 192.168.1.9:9003 c4d66d29086727519d56772398365b75730b3a8b

之前被删除的两个节点都会变成无哈希槽的主节点

扩容

接下来进行扩容操作,将8001节点作为主节点,9003作为从节点扩容一个新的分片。

向集群中添加主节点8001

redis-cli -a 123456 --cluster add-node 192.168.1.9:8001 192.168.1.9:8002
redis-cli -a 123456 --cluster reshard 192.168.1.9:8002

将9003作为8001的从机

redis-cli -a 123456 --cluster add-node 192.168.1.9:9003 192.168.1.9:8001 --cluster-slave --cluster-master-id ccd516357bce6f5abc038a406e8d9377c802d26a

完成扩容