【Day 57】Redis的部署
(一)多实例部署
- 多实例部署:通常指的是在同一台物理服务器或者同一个服务器集群环境中,部署多个不同的 Redis 实例。这些实例可以基于不同配置、端口号等区分开来,它们能各自按照单机模式运行,也可以组合起来形成主从关系,或者作为哨兵集群、分片集群的组成部分,目的往往是为了充分利用硬件资源或隔离不同业务的 Redis 使用场景。
准备工作:确保安装了 gcc 和 tcl 等必要依赖,下载与安装 Redis。
配置多实例:复制 Redis 配置文件,修改port参数为不同端口,如 7400、7401 等,同时可根据需要修改pidfile、logfile等参数。
启动实例:使用不同的配置文件启动各个实例。
# 一、初始化目录结构(创建 Redis 实例的 conf/date 目录)
# 创建6380/6381/6382三个实例的conf(配置)和date(数据)目录(-p递归创建)
mkdir 638{0,1,2}/{conf,date} -p
# 检查6380目录结构(确认conf/date是否创建成功)
ls 6380
# 检查三个实例的conf目录是否存在(-d仅显示目录)
ls -ld /opt/6380/conf/ /opt/6381/conf/ /opt/6382/conf/cp /usr/local/redis/conf/redis.conf /opt/6380/conf/redis.conf
cp /usr/local/redis/conf/redis.conf /opt/6381/conf/redis.conf
cp /usr/local/redis/conf/redis.conf /opt/6382/conf/redis.conf# 1. 编辑三个实例的redis.conf(配置端口、主从关系、数据目录等)
vim /opt/6380/conf/redis.conf
vim /opt/6381/conf/redis.conf
vim /opt/6382/conf/redis.conf
bind 192.168.140.141
protected-mode yes
port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
loglevel warning
logfile "/var/log/redis_6380.log"
rdbchecksum yes
dbfilename dump7000.rdb
dir /opt/6380/date# 基于6380的配置文件生成6381的配置(批量替换端口相关参数)
sed 's/6380/6381/g' /opt/6380/conf/redis.conf > /opt/6381/conf/redis.conf
# 同理生成6382的配置
sed 's/6380/6382/g' /opt/6380/conf/redis.conf > /opt/6382/conf/redis.conf# 2. 启动三个Redis实例(指定各自配置文件)
redis-server /opt/6380/conf/redis.conf
redis-server /opt/6381/conf/redis.conf
redis-server /opt/6382/conf/redis.conf
# 3. 停止6382实例(修正配置后重启)
redis-cli -h 192.168.140.141 -p 6382 shutdown
# 4. 重启6382实例(应用修正后的配置)
redis-server /opt/6382/conf/redis.conf
(二)主从复制
- 主从复制 :该架构由一个主节点和一个或多个从节点组成,从节点复制主节点的数据。
配置主节点:编辑主节点配置文件
配置从节点:复制主节点配置文件并修改,添加masterauth(主节点密码)和replicaof(主节点 IP 和端口)参数,如replicaof 192.168.31.72 6379。
启动节点:依次启动主节点和从节点,使用INFO replication命令可查看主从复制状态。
主从复制
vim /opt/6380/conf/redis.conf
# 声明主节点地址和端口
replicaof 192.168.140.141 6381
# 设置密码(避免未授权访问,所有实例密码需一致,方便后续主从配置)
requirepass your_redis_password
# 允许从节点使用密码连接主节点(主从复制必备)
masterauth your_redis_password redis-cli -h 192.168.140.141 -p 6380 shutdown
# 启动实例
redis-server /opt/6380/conf/redis.conf
检验
# 登录验证
redis-cli -h 192.168.140.141 -p 6380 -a 原主节点的密码 info replication
# 确认输出中 role:slave 且 master_link_status:up# 1. 查看6380(主节点)的复制信息
redis-cli -h 192.168.140.141 -p 6380 info replication
# 2. 查看6381(从节点)的复制信息
redis-cli -h 192.168.140.141 -p 6381 info replication
# 3. 查看6382(从节点)的复制信息(排查连接问题)
redis-cli -h 192.168.140.141 -p 6382 info replication# 停止6380实例(测试主从切换)
redis-cli -h 192.168.140.141 -p 6380 shutdown
# 查看Redis进程/端口占用(验证启停状态)
netstat -tunlp |grep redis
从-默认只读
查看主从复制的状态-info
从提升为新主
原主节点:192.168.140.141:6380(需转换为从节点)
原从节点:192.168.140.141:6381(需升级为主节点)
其他从节点:192.168.140.141:6382(需重新指向新主节点)一、将原从节点(6381)升级为新主节点
redis-cli -h 192.168.140.141 -p 6381 -a 原密码
# 执行命令解除主从关系,变为主节点
192.168.140.141:6381>slaveof no one
# 验证角色转换结果
192.168.140.141:6381>info replication
vim /opt/6381/conf/redis.conf
# 注释或删除原主从配置(若有)
# replicaof 192.168.140.141 6380
# masterauth 原密码
# 重启6381实例
redis-cli -h 192.168.140.141 -p 6381 -a 原密码 shutdown
redis-server /opt/6381/conf/redis.conf二、将原主节点(6380)转换为从节点
# 停止原主节点(6380)
redis-cli -h 192.168.140.141 -p 6380 -a 原密码 shutdown
# 修改配置文件,指向新主节点
vim /opt/6380/conf/redis.conf
# 添加以下配置(指向新主节点6381)
replicaof 192.168.140.141 6381 # 新主节点IP和端口
masterauth 原密码 # 新主节点密码(与原密码一致)
# 启动原主节点(6380),使其以从节点身份运行
redis-server /opt/6380/conf/redis.conf
# 验证转换结果
redis-cli -h 192.168.140.141 -p 6380 -a 原密码 info replication三、将其他从节点(6382)重新指向新主节点(6381)
redis-cli -h 192.168.140.141 -p 6382 -a 原密码
replicaof 192.168.140.141 6381 # 指向新主节点6381
vim /opt/6382/conf/redis.conf
# 注释原主节点配置,添加新主节点配置
# replicaof 192.168.140.141 6380 # 注释原主节点
replicaof 192.168.140.141 6381 # 新主节点
masterauth 原密码 # 保持密码一致
# 重启6382实例
redis-cli -h 192.168.140.141 -p 6382 -a 原密码 shutdown
redis-server /opt/6382/conf/redis.conf
# 验证转换结果
redis-cli -h 192.168.140.141 -p 6382 -a 原密码 info replication
(三) 哨兵集群
- 哨兵集群 :这是在主从复制基础上构建的高可用架构。Redis Sentinel 是一个分布式系统,由多个哨兵节点构成,它们通过共识算法来协同监控主从节点的运行状态,当主节点发生故障时,能自动将从节点提升为主节点,还可以在故障发生时通知管理员,并且自动重新配置客户端指向新主节点。其优势是自动化故障转移,提高了系统可用性,但哨兵本身也可能形成单点故障风险,并且故障转移过程中可能有短暂数据不一致。
哨兵集群用于监控主从节点,并在主节点故障时自动进行故障转移。安装主从节点:先按照主从复制的步骤搭建好一个主节点和多个从节点。
配置哨兵:编辑sentinel.conf配置文件,设置sentinel monitor mymaster 192.168.234.130 6379 2(监控主节点),daemonize yes(后台运行)。若 Redis 节点有密码,需设置sentinel auth-pass mymaster password。
启动服务:先启动主从节点,再启动哨兵节点,命令为./redis-sentinel ./sentinel.conf。
# 1. 查看哨兵配置文件源文件(确认sentinel.conf存在)
ls redis-5.0.12/sentinel.conf
# 2. 创建三个实例的sentinel目录(存放哨兵配置)
mkdir /opt/6380/redis-sentinal
mkdir /opt/6381/redis-sentinal
mkdir /opt/6382/redis-sentinal
# 3. 创建哨兵数据目录(按端口区分,如26380对应6380实例的哨兵)
mkdir /opt/6380/date/26380
mkdir /opt/6381/date/26381
mkdir /opt/6382/date/26382
# 4. 复制sentinel.conf到三个哨兵目录
cp redis-5.0.12/sentinel.conf /opt/6380/redis-sentinal/
cp redis-5.0.12/sentinel.conf /opt/6381/redis-sentinal/
cp redis-5.0.12/sentinel.conf /opt/6382/redis-sentinal/
# 5. 编辑三个哨兵的配置文件(指定监控主节点、端口、quorum等)
vim /opt/6380/redis-sentinal/sentinel.conf
vim /opt/6381/redis-sentinal/sentinel.conf
vim /opt/6382/redis-sentinal/sentinel.conf
# 6. 启动三个哨兵实例(指定各自配置文件)
redis-sentinel /opt/6380/redis-sentinal/sentinel.conf
redis-sentinel /opt/6381/redis-sentinal/sentinel.conf
redis-sentinel /opt/6382/redis-sentinal/sentinel.conf
# 7. 查看哨兵日志(排查哨兵运行问题)
ls /var/log/sentinal_26380.log
vim /var/log/sentinal_26380.log
(四)分片集群
- 分片集群 :Redis Cluster 是 Redis 官方的分布式部署方案,它将数据空间划分为 16384 个哈希槽,每个主节点负责一部分哈希槽。基于哈希槽,数据被自动分片存储在不同的主节点上,每个主节点又能搭配一个或多个从节点用于冗余。
- 优点:可以水平扩展,能支撑大规模数据存储和高并发访问,也具备自动故障转移等高可用机制。
- 缺点:部署难度较高,而且集群数据迁移等操作会对性能有一定影响。
分片集群将数据分布在多个节点上,实现数据的分布式存储和高并发处理。
准备工作:准备至少三台 CentOS 7 服务器,在每台服务器上安装 gcc 和 tcl 依赖,Redis。
配置集群节点:在每台服务器上创建集群配置目录,如mkdir /etc/redis-cluster,复制并修改redis.conf,设置bind、requirepass、port、cluster-enabled yes、cluster-config-file、cluster-node-timeout等参数。
# 在多台机子上分别创建
mkdir -p /opt/redis-cluster/{7000,7001,7002,7003,7004,7005}/{conf,data,log}# 配置各节点(每节点单独配置)
# 1. 复制默认配置文件到各节点(以7000为例,其他节点替换端口即可)
cp redis-6.2.14/redis.conf /opt/redis-cluster/7000/conf/
# 2. 编辑7000节点配置(关键参数)
vim /opt/redis-cluster/7000/conf/redis.conf
# 按以下内容修改(其他节点仅需替换端口号):
bind 192.168.140.141 # 替换为实际服务器IP
port 7000
daemonize yes
pidfile /var/run/redis-7000.pid
logfile /opt/redis-cluster/7000/log/redis-7000.log
dir /opt/redis-cluster/7000/data
requirepass Redis@123 # 集群统一密码
masterauth Redis@123 # 与上面密码一致
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes# 3. 批量配置其他节点(复制7000的配置并替换端口)
for port in 7001 7002 7003 7004 7005; docp /opt/redis-cluster/7000/conf/redis.conf /opt/redis-cluster/$port/conf/sed -i "s/7000/$port/g" /opt/redis-cluster/$port/conf/redis.conf
done
三、启动所有节点
# 启动6个节点(分别指定配置文件)
/usr/local/redis/bin/redis-server /opt/redis-cluster/7000/conf/redis.conf
/usr/local/redis/bin/redis-server /opt/redis-cluster/7001/conf/redis.conf
/usr/local/redis/bin/redis-server /opt/redis-cluster/7002/conf/redis.conf
/usr/local/redis/bin/redis-server /opt/redis-cluster/7003/conf/redis.conf
/usr/local/redis/bin/redis-server /opt/redis-cluster/7004/conf/redis.conf
/usr/local/redis/bin/redis-server /opt/redis-cluster/7005/conf/redis.conf
# 验证启动状态(应显示6个进程)
ps -ef | grep redis-server | grep -v grep
四、创建集群(分配主从和哈希槽)
# 创建3主3从集群(--cluster-replicas 1表示每个主节点1个从节点)
/usr/local/redis/bin/redis-cli -a Redis@123 --cluster create \
192.168.140.141:7000 \
192.168.140.141:7001 \
192.168.140.141:7002 \
192.168.140.141:7003 \
192.168.140.141:7004 \
192.168.140.141:7005 \
--cluster-replicas 1
# 执行后会提示分配方案,输入yes确认# 1. 查看集群整体信息(连接任意节点)
/usr/local/redis/bin/redis-cli -h 192.168.140.141 -p 7000 -a Redis@123 cluster info
# 2. 查看节点详情(主从关系、槽位分配)
/usr/local/redis/bin/redis-cli -h 192.168.140.141 -p 7000 -a Redis@123 cluster nodes
# 3. 测试数据写入(会自动路由到对应槽位的主节点)
/usr/local/redis/bin/redis-cli -h 192.168.140.141 -p 7000 -a Redis@123 set cluster_key "hello"
/usr/local/redis/bin/redis-cli -h 192.168.140.141 -p 7001 -a Redis@123 get cluster_key # 从其他节点读取
启动节点:使用配置文件启动每个节点,如redis-server /etc/redis-cluster/redis-7400.conf。
创建集群:进入 Redis 安装目录的src目录,执行redis-cli --cluster create 192.168.117.128:7400 192.168.117.128:7401 192.168.117.129:7402 192.168.117.129:7403 192.168.117.131:7404 192.168.117.131:7405 --cluster-replicas 1命令创建集群,其中--cluster-replicas 1表示每个主节点配一个从节点。