Redis 安装
使用 Debian 12 从源码中安装 Redis,操作的主目录在 /root/redis
。
https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-from-source/
# 安装编译环境
apt install build-essential tcl
# 下载源码包安装
wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
# 启动 redis
./src/redis-server
Redis 主从复制
主从结构搭建
有两种方式可以配置 Redis 的复制功能,分别是使用slaveof host port
命令或修改 Slave 的配置文件。
创建目录存放配置、日志和数据文件。
# 位于 /root/redis
mkdir conf
mkdir data
mkdir log
创建主节点配置文件 conf/redis.conf
。
# 放行 IP
bind 0.0.0.0
# 后台启动
daemonize yes
# 日志存储
logfile "/root/redis/log/redis.log"
# rdb 数据文件
dbfilename dump.rdb
# 开启 aof 模式
appendonly yes
appendfilename "appendonly.aof"
# 数据文件目录
dir /root/redis/data
# 密码
requirepass 123456
# 从节点访问主节点的密码
masterauth 123456
# 从节点只读
replica-read-only yes
从节点配置文件增加一行:
# 隶属的主节点
slaveof 192.168.56.101 6379
启动 redis。
# 位于 /root/redis
redis-stable/src/redis-server conf/redis.conf
登录 redis 查看配置主从信息。
redis-stable/src/redis-cli -a 123456
# 登录 redis 后
info replication
主节点信息
从节点信息
Redis Sentinel
Redis Sentinel 的作用
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance),Redis Sentinel 主要有三个作用:
- 监控(Monitoring):Sentinel 会不断的检查 Redis 主服务器和从服务器是否运行正常。
- 提醒(Notification):当被监控的某个 Redis 服务器出现问题时,Sentinel 可以通过 API 向管理员或其它应用程序发送通知。
- 自动故障迁移(Atomic failover):当一个主服务器不能正常工作时,Sentinel 会开始启动一次自动故障迁移。它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让其它从服务器改为同步新主服务器的数据。当客户端试图连接失效主服务器时,集群会向客户端返回新主服务器的地址。
Redis Sentinel 是一个分布式系统,可以在一个架构中运行多个 Sentinel 进程,这些进程使用流言协议(Gossip Protocol)来接收关于主服务器是否下线的信息,并使用投票协议(Agreement Protocol)来决定是否执行自动故障迁移,以及选择哪个从服务器作为新的主服务器。
Sentinel 搭建
创建配置文件 conf/sentinel.conf
bind 0.0.0.0
port 26379
daemonize yes
logfile "/root/redis/log/sentinel.log"
pidfile "/var/run/sentinel.pid"
sentinel monitor mymaster 192.168.56.101 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 10000
启动 sentinel
redis-stable/src/redis-server conf/redis.conf
redis-stable/src/redis-sentinel conf/sentinel.conf
查看日志
sentinel 工作原理
Sentinel 内部有3个定时任务:
- 每1秒每个 sentinel 对其它 sentinel 和 redis 节点执行
PING
操作(监控); - 每2秒每个 sentinel 通过 master 节点的 channel 交换信息(publish/subscribe);
- 每10秒每个 sentinel 会对 master 和 slave 执行
INFO
命令。
Redis 集群架构
集群搭建
使用 3 个节点启动 6 个 redis 服务,节点 ip 分别为 192.168.56.10[1,2,3],redis 服务端口分别为 637[1-6]。
创建目录存放配置、数据和日志文件。
mkdir -p redis/cluster/conf redis/cluster/data redis/cluster/log
创建配置文件 redis/cluster/conf/redis-6371.conf
bind 0.0.0.0
port 6371
daemonize yes
logfile "/root/redis/cluster/log/redis-6371.log"
dbfilename dump-6371.rdb
appendonly yes
appendfilename "appendonly-6371.aof"
dir /root/redis/cluster/data
requirepass 123456
masterauth 123456
# 集群配置
cluster-enabled yes
cluster-config-file nodes-6371.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.56.101
cluster-announce-port 6371
cluster-announce-bus-port 16371
不同服务使用的配置文件不同,体现在端口和命名后缀上,将与 6371 和 56.101 有关的值依次递增,在 3 个节点上创建 6 份配置文件。
依次启动 6 个 redis 服务
redis-stable/src/redis-server cluster/conf/redis-6371.conf
随便选取一个节点执行 cluster 创建操作
redis-stable/src/redis-cli -a 123456 --cluster create 192.168.56.101:6371 192.168.56.101:6372 192.168.56.102:6373 192.168.56.102:6374 192.168.56.103:6375 192.168.56.103:6376 --cluster-replicas 1
确认配置无误后输入 yes
即可
集群管理
集群状态
检查集群状态
redis-stable/src/redis-cli -a 123456 --cluster check 192.168.56.101:6371
查看集群信息
# 连接到 redis cluster
redis-stable/src/redis-cli -c -a 123456 -h 192.168.56.101 -p 6371
# 集群信息
cluster info
# 节点信息
cluster nodes
性能测试
集群性能测试
redis-stable/src/redis-benchmark -a 123456 -h 192.168.56.101 -p 6371 --cluster -t set,get -r 1000000 -n 1000000 -c 1000
添加节点
添加主节点
# 添加主节点
# add-node new-node exists-master-node
redis-stable/src/redis-cli -a 123456 --cluster add-node 192.168.56.103:6377 192.168.56.103:6375 --cluster-master-id db9b855f6db790d5a99c7062bd1a98107e1949ce
# 重新分片
redis-stable/src/redis-cli -a 123456 --cluster reshard 192.168.56.101:6371 --cluster-from 76d2931297beabb29c1263e45dba6a6b2635d194 --cluster-to b6ff5ce0bc981184e21f5b2e7fcd32056999cd35 --cluster-slots 2000 --cluster-yes
添加从节点
# add-node new-node replication-from-node
redis-stable/src/redis-cli -a 123456 --cluster add-node 192.168.56.103:6378 192.168.56.103:6377 --cluster-slave --cluster-master-id b6ff5ce0bc981184e21f5b2e7fcd32056999cd35
删除节点
删除从节点
# 从集群中移除从节点
redis-stable/src/redis-cli -a 123456 --cluster del-node 192.168.56.103:6378 b2ee915237e7e1163090ce73000592d6b3445d90
# 停止 redis 服务
redis-stable/src/redis-cli -a 123456 -h 192.168.56.103 -p 6378 shutdown
删除主节点
先执行重新分片命令,将主节点上的 slot 移到其它主节点上。
# 交换式命令
redis-stable/src/redis-cli -a 123456 --cluster reshard 192.168.56.101:6371
删除节点
# 从集群中移除节点
redis-stable/src/redis-cli -a 123456 --cluster del-node 192.168.56.103:6377 b6ff5ce0bc981184e21f5b2e7fcd32056999cd35
# 停止 redis 服务
redis-stable/src/redis-cli -a 123456 -h 192.168.56.103 -p 6377 shutdown