# 工具部署redis

工具类型: shell 脚本

文档更新: 2025-02-22 16:43:06

适用场景: 非云化产品的的私有化部署(自建环境)

# 免责申明和使用须知

  • 1.工具定位声明

    • 本工具为 辅助部署工具,旨在帮助快速搭建云原生环境所依赖的中间件(包含并不仅限于Kubernetes、Nacos、Kafka等),便于项目组快速部署微服务应用。
    • 不承诺提供中间件的长期完整维护、支持或安全保障。
  • 2.开源组件免责声明

    • 本工具使用的 Kubernetes、etcd、calico、Nacos、Kafka等组件均为开源软件,受各自开源许可证保护。
    • 本工具 不修改、不篡改 任何开源组件,仅作为安装和部署的辅助工具。
    • 使用本工具即表示您已阅读并同意相关开源组件的 使用许可协议。
  • 3.安全与责任声明

    • 本工具 不承担 因使用过程中出现的安全问题、系统崩溃、数据丢失等后果的责任。
    • 建议用户自行评估部署环境的安全性,并根据自身需求选择合适的版本和配置。
  • 4.不提供长期维护

    • 本工具仅为临时部署工具,不承诺对中间件进行持续更新、补丁修复、安全处置和兼容性支持。
    • 用户应自行关注官方更新,并根据实际需要决定是否升级或更换工具。
  • 5.商业使用提醒

    • 若您将本工具用于 商业环境,请确保所有使用组件符合其 开源许可证,并遵守相关法律法规。
    • 本工具不提供任何形式的商业支持或担保。
  • 6.用户自主决策

    • 本工具仅供参考和学习使用,最终部署方案由用户自行决定。
    • 在使用前,请确保您具备足够的技术能力,并了解Kubernetes、Nacos、Kafka等等云原生组件的运行机制和配置方法。

# 相关下载

安装工具: https://pan.baidu.com/s/1BY1ivBu9R17NcLgTZQUGEQ?pwd=2024

# 工具部署步骤

# 环境准备要求

工具支持要求:

Redis工具部署原理是:[Redis主机] —-SSH远程部署—-> [Redis单机/Redis集群]

故,如果是单机,就将工具放在当前单机服务器上;如果是集群,就将工具放在集群第一个节点上,其余服务器确保SSH端口互通(SSH端口、帐号、密码全部保持一致),工具自动部署。

# 准备部署包

确定工具和部署包后,将其上传到运维机上任意目录,比如 /seeyon/scripts/redis

准备Redis部署包:推荐部署Redis6 或 Redis 7,(截止2025年8月)小版本推荐Redis-6.2.19及以上,以降低安全问题。

准备工具:multi-install-redis-amd64.tgz 对应X86环境;multi-install-redis-arm64.tgz 对应ARM环境,直接上传到脚本目录再解压,如 tar -xf multi-install-redis-amd64.tgz

1756173519817.png

# 运维机配置工具参数

vim multi-install-redis.sh

配置按需修改: 单机部署可以什么都不错调整(集群配置也无需删除,只要引导单机部署就不会读取集群配置),安全起见,密码改成更安全复杂的。

1756175025286.png

# 执行脚本工具

1、直接运行.sh不会执行安装,脚本工具会输出用法供参考:

bash multi-install-redis.sh

请传参指定部署模式
脚本用法: bash multi-install-redis.sh <single|cluster>
单机部署: bash multi-install-redis.sh single
集群部署: bash multi-install-redis.sh cluster

2、单机部署执行 bash multi-install-redis.sh single

Redis工具部署过程采用的是二进制编译方式,编译需要一定时间。 看到如下信息,编译完成,记住编译后的信息,供后续维护使用:

1756175652554.png

3、首次部署完成通过如下命令启动并查看状态:

systemctl start redis
systemctl status redis

# 日常维护

记住工具部署后的输出信息,默认信息如下:

查看状态:systemctl status redis
启动命令:systemctl start redis
重启命令:systemctl restart redis
停止命令:systemctl stop redis

开始设置配置: /apps/redis/etc/redis.conf
设置连接端口: 6379
设置pid文件: /apps/redis/var/redis-server.pid
设置log文件: /apps/redis/var/redis.log
设置日志级别: verbose
设置工作目录: /apps/redis/var
开启守护进程: daemonize yes
设置连接密码: 自定义的Redis密码
设置bind地址: Redis服务器IP地址
设置AOF持久化: appendonly no
关闭RDB持久化: save ""

# 预编译纯静态二进制版

有些项目,经常会遇到没法编译或所需硬件架构编译失败等待场景。所以,在网盘提供了各个版本的 redis 的纯静态二进制版,供需要的同事按需使用。

使用时,按实际情况调整 redis.conf 的相关配置,然后正常启停服务即可。

纯静态编译的二进制版本有 amd64/arm64/loong64 三个架构的。redis 在 8.x 系列,特别是 8.4.x 加强了安全支持,纯静态编译的一律未启用 tls 安全加密。

相关版本参考下图(这里仅展示 龙架构 的版本情况):

1770571340634.png


# 提醒

在使用基于 musl libc 构建的 Nginx、Tengine、Angie、Redis 等纯静态二进制程序时,由于 musl 在 DNS 解析及 IPv6 连接回退策略 上的实现特性,在 IPv6 半可用或链路质量不稳定 的环境中,可能出现连接延迟或超时问题。

为规避上述风险,建议通过 应用层配置 + 系统层策略 双层显式限制仅使用 IPv4(单层可生效,双层约束更稳定),包括绑定 IPv4 地址、禁用 IPv6 监听,以及限定仅进行 IPv4 域名解析。


# 1. 应用软件层面

# 1.1 Redis 配置示例

# redis.conf
# 仅监听 IPv4 地址,避免启用双栈监听
bind 0.0.0.0
# 如存在以下配置需删除或注释
# bind ::
# bind * -::*

说明: Redis 默认支持双栈监听,显式移除 IPv6 监听可避免 musl 在连接阶段进入 IPv6 分支;容器化或物理机启动时可注入环境变量强化:export RES_OPTIONS="inet4"


# 1.2 Nginx / Tengine / Angie 配置示例

# nginx.conf
http {
    # HTTP层强制仅IPv4解析
    resolver 223.5.5.5 8.8.8.8 ipv4=on;
    server {
        listen 0.0.0.0:80;
        # listen [::]:80;  # 禁用 IPv6 监听
    }
    server {
        listen 0.0.0.0:443 ssl;
        # listen [::]:443 ssl;  # 禁用 IPv6 监听
        # SSL相关配置...
    }
}

说明: resolver ipv4=on 强制仅解析 A 记录(IPv4),避免 musl 尝试 AAAA(IPv6)解析;使用 upstream 域名时,此配置可有效规避解析层延迟。


# 2. 网络 / 操作系统层面

# 2.1 基于 Kubernetes 的配置示例

# 方式一:通过 sysctl(推荐,前提是集群允许开启 sysctl 配置)
spec:
  securityContext:
    sysctls:
    - name: net.ipv6.conf.all.disable_ipv6
      value: "1"
    - name: net.ipv6.conf.default.disable_ipv6
      value: "1"
  containers:
  - name: 应用名称
    image: 应用镜像:版本
    env:
    - name: RES_OPTIONS
      value: "inet4"

说明: 使用 sysctls 比特权容器更安全,也符合 Kubernetes 最佳实践;需确保集群已配置 sysctl_node_allow_list 包含上述配置项。


# 方式二:特权容器方式(不推荐,仅作兜底)
spec:
  containers:
  - name: 应用名称
    image: 应用镜像:版本
    securityContext:
      privileged: true
    command: ["/bin/sh", "-c"]
    args:
    - sysctl -w net.ipv6.conf.all.disable_ipv6=1 && export RES_OPTIONS="inet4" && 应用启动命令

# 2.2 物理机 / 虚拟机配置示例

# 1. 写入配置文件永久生效
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
# 2. 重载配置立即生效
sysctl -p
# 3. 全局注入环境变量强化IPv4解析(可选)
echo "export RES_OPTIONS=\"inet4\"" >> /etc/profile
source /etc/profile

# 3. 验证配置是否生效

# 1. 验证系统 IPv6 是否禁用(输出 1 即为生效)
sysctl net.ipv6.conf.all.disable_ipv6
# 2. 验证应用是否仅监听 IPv4(无 tcp6/inet6 输出即为生效)
ss -tulnp | grep -E "nginx|redis-server"
# 3. 验证 musl 解析是否仅返回 IPv4(无 IPv6 地址输出即为生效)
getent ahostsv6 目标域名 || echo "IPv6解析已禁用"

编撰人:yangfc、het