Redis 6.0 部署指南(Ubuntu)

发布于:2025-07-17 ⋅ 阅读:(20) ⋅ 点赞:(0)

Redis 6.0 部署指南(Ubuntu)

一、前期准备

1.1 环境要求

  • 操作系统:Ubuntu 18.04 LTS / 20.04 LTS(64位)
  • GCC版本:5.3+(Ubuntu 18.04默认7.5,20.04默认9.3,均满足要求)
  • 依赖工具build-essentialtclwgetcurl

1.2 依赖安装

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装基础依赖
sudo apt install -y build-essential tcl wget curl

1.3 Redis安装(两种方式)

方式一:通过官方PPA安装(推荐)
# 添加Redis官方GPG密钥
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

# 添加PPA源
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

# 安装Redis 6.x
sudo apt update && sudo apt install -y redis-server

# 验证版本
redis-server --version  # 应显示6.x.x
方式二:源码编译安装
# 下载源码
wget http://download.redis.io/releases/redis-6.0.16.tar.gz
tar xzf redis-6.0.16.tar.gz
cd redis-6.0.16

# 编译(若失败尝试make MALLOC=libc)
make && make test && sudo make install

# 创建配置目录
sudo mkdir -p /etc/redis /var/lib/redis
sudo cp redis.conf /etc/redis/

1.4 系统优化

# 调整内核参数
sudo sysctl -w vm.overcommit_memory=1
sudo sysctl -w net.core.somaxconn=1024
echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf
echo "net.core.somaxconn=1024" | sudo tee -a /etc/sysctl.conf

# 调整文件描述符限制
echo "* soft nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65536" | sudo tee -a /etc/security/limits.conf

1.5 防火墙配置

# 开放Redis端口(主从/集群)
sudo ufw allow 6379/tcp   # Redis服务端口
sudo ufw allow 26379/tcp  # 哨兵端口
sudo ufw allow 16379/tcp  # 集群总线端口(6379+10000)
sudo ufw reload

二、主从部署

2.1 配置主节点(master)

# 编辑配置文件
sudo vim /etc/redis/redis.conf

# 修改以下参数
bind 0.0.0.0               # 允许所有IP访问
protected-mode no          # 关闭保护模式
port 6379                  # 端口
daemonize yes              # 后台运行
pidfile /var/run/redis_6379.pid
logfile /var/log/redis/redis_6379.log
dir /var/lib/redis         # 数据目录
requirepass your_password  # 设置密码(可选)
masterauth your_password   # 从节点认证密码(与requirepass一致)

2.2 配置从节点(slave)

# 复制配置文件
sudo cp /etc/redis/redis.conf /etc/redis/redis_6380.conf

# 编辑从节点配置
sudo vim /etc/redis/redis_6380.conf

# 修改以下参数
port 6380
pidfile /var/run/redis_6380.pid
logfile /var/log/redis/redis_6380.log
replicaof 192.168.1.100 6379  # 主节点IP:端口

2.3 启动服务

# 启动主节点
sudo redis-server /etc/redis/redis.conf

# 启动从节点
sudo redis-server /etc/redis/redis_6380.conf

# 设置开机自启(systemd)
sudo tee /etc/systemd/system/redis-master.service <<EOF
[Unit]
Description=Redis Master
After=network.target

[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
Restart=always
User=redis
Group=redis

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable redis-master

2.4 验证主从复制

# 主节点状态
redis-cli -h 192.168.1.100 -p 6379 -a your_password info replication
# 应显示 role:master, connected_slaves:1

# 从节点状态
redis-cli -h 192.168.1.101 -p 6380 -a your_password info replication
# 应显示 role:slave, master_host:192.168.1.100

# 数据同步测试
redis-cli -h 192.168.1.100 -p 6379 -a your_password set test_key "hello world"
redis-cli -h a192.168.1.101 -p 6380 -a your_password get test_key  # 应返回"hello world"

2.5 手动主从切换

# 停止主节点
redis-cli -h 192.168.1.100 -p 6379 -a your_password shutdown

# 从节点提升为主节点
redis-cli -h 192.168.1.101 -p 6380 -a your_password replicaof no one

# 验证新主节点
redis-cli -h 192.168.1.101 -p 6380 -a your_password info replication  # role:master

三、哨兵部署(Sentinel)

3.1 配置哨兵(至少3个实例)

# 创建哨兵配置文件(示例为26379端口)
sudo tee /etc/redis/sentinel_26379.conf <<EOF
port 26379
daemonize yes
pidfile /var/run/redis-sentinel_26379.pid
logfile /var/log/redis/sentinel_26379.log
dir /tmp
sentinel monitor mymaster 192.168.1.100 63792  # quorum=2(至少2个哨兵同意故障)
sentinel auth-pass mymaster your_password       # 主节点密码
sentinel down-after-milliseconds mymaster 5000 # SDOWN判定时间(5秒)sentinel parallel-syncs mymaster1          # 故障转移时并行同步的从节点数
sentinel failover-timeout mymaster 15000       # 故障转移超时时间(15秒)
EOF

# 复制配置文件并修改端口(26380、26381)
sudo cp /etc/redis/sentinel_26379.conf /etc/redis/sentinel_26380.conf
sudo sed -i 's/26379/26380/g' /etc/redis/sentinel_26380.conf
sudo cp /etc/redis/sentinel_26379.conf /etc/redis/sentinel_26381.confsudo sed -i 's/26379/26381/g' /etc/redis/sentinel_26381.conf

3.2启动哨兵

# 启动3个哨兵实例
sudo redis-sentinel /etc/redis/sentinel_26379.conf
sudo redis-sentinel /etc/redis/sentinel_26380.conf
sudo redis-sentinel /etc/redis/sentinel_26381.conf# 验证哨兵状态
redis-cli -p 26379 info sentinel
# 应显示 sentinel_masters:1, sentinel_tilt:0

3.3 自动故障转移测试

# 1. 查看当前主节点
redis-cli -p 26379 sentinel masters | grep "name m"

# 2. 停止主节点
redis-cli -h 192.168.1.100 -p6379 -a your_password shutdown

# 3. 观察哨兵日志
tail -f /var/log/redis/sentinel_26379.log
# 应出现 "+switch-master mymaster 192.168.1.100 6379 192.168.1.1016380"

# 4. 验证新主节点
redis-cli -p 26379 sentinel masters | grep addr  # 地址变为从节点IP:端口

##四、分布式集群部署(Redis Cluster)###4.1 节点规划(6节点:3主3从)| 节点角色 | IP |端口 | 数据目录 |
|----------|----------|------|----------------|主节点1 |192.168.1.100 |7000 | /var/lib/redis/7000 |
| 主节点2 |192.168.1.101 |7001 | /var/lib/redis/7001 |
| 主节点3 |192.168.1.102 |7002 | /var/lib/redis/7002 |
| 从节点1 |192.168.1.100 |7003 | /var/lib/redis/7003 |
| 从节点2 |192.168.1.101 |7004 | /var/lib/redis/7004 |
|从节点3 |192.168.1.102 |7005 | /var/lib/redis/7005 |

###4.2 配置集群节点

# 创建配置脚本(以7000端口为例)
for port in $(seq7000 7005); do
  sudo mkdir -p /var/lib/redis/$port
  sudo tee /etc/redis/redis_$port.conf <<EOF
port $port
cluster-enabled yescluster-config-file nodes_$port.conf
cluster-node-timeout5000
daemonize yes
pidfile /var/run/redis_$port.pidlogfile /var/log/redis/redis_$port.log
dir /var/lib/redis/$port
bind 0.0.0.0protected-mode no
requirepass your_password
masterauth your_passwordEOF
done

###4.3 启动所有节点

sudo redis-server /etc/redis/redis_$port.confdone# 验证进程
ps aux | grep redis-server | grep -v grep  #应显示6个进程

###4.4 创建集群```bash

Redis 6.x需使用redis-cli创建集群

redis-cli --cluster create
192.168.1.100:7000192.168.1.101:7001
192.168.1.102:7002 \192.168.1.100:7003 \192.168.1.101:7004
192.168.1.102:7005 --cluster-replicas1
-a your_password# 确认分配方案时输入 yes


###4.5 添加从节点(可选)
```bash
# 获取主节点ID
redis-cli -c -h192.168.1.100 -p7000 -a your_password cluster nodes | grep master

# 添加新从节点(示例:将7006添加为7000的从节点)
redis-cli --cluster add-node \--cluster-slave \--cluster-master-id <master-node-id> \192.168.1.100:7006 \192.168.1.100:7000 \
-a your_password

###4.6 验证集群状态

# 集群信息
redis-cli -c -h192.168.1.100 -p7000 -a your_password cluster info
# 应显示 cluster_state:ok# 节点状态
redis-cli -c -h192.168.1.100 -p7000 -a your_password cluster nodes

# 哈希槽分布
redis-cli -c -h192.168.1.100 -p7000 -a your_password cluster slots

# 数据测试
redis-cli -c -h192.168.1.100 -p7000 -a your_password set test_key "cluster"
redis-cli -c -h192.168.1.101 -p7001 -a your_password get test_key  # 自动路由到对应节点

###4.7 故障转移测试

# 1. 停止一个主节点(如7000)
redis-cli -h192.168.1.100 -p7000 -a your_password shutdown

# 2. 观察从节点是否自动提升
redis-cli -c -h192.168.1.100 -p7003 -a your_password cluster nodes | grep master
# 7003应变为master

# 3. 重启原主节点(自动变为从节点)
sudo redis-server /etc/redis/redis_7000.conf
redis-cli -c -h192.168.1.100 -p7000 -a your_password cluster nodes | grep slave

五、常见问题解决

1.** 编译错误 :若make失败,尝试make MALLOC=libc或升级GCC。
2.
主从同步失败 :检查masterauth是否一致,网络是否互通。
3.
哨兵无法自动切换**:确保quorum值小于哨兵数量的一半+1,日志中查看+odown状态。
4.** 集群槽位未分配 **:使用redis-cli --cluster reshard重新分配槽位。

六、参考文档


网站公告

今日签到

点亮在社区的每一天
去签到