Redis安装和部署

单机安装

通过 yum 安装

在 CentOS 7 上通过 yum 安装 Redis,可以按照以下步骤进行操作:

  1. 更新系统软件包:

    sudo yum update
    
  2. 安装 Redis:

    sudo yum install redis
    

    可以看到默认安装的 redis 版本是 3.2.12-2.el7

    如果需要安装 redis 7,这需要下载 yum 源:

    sudo yum install epel-release
    sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
    

    然后,在指定源进行安装:

    yum --enablerepo=remi install redis
    
  3. 启动 Redis 服务:

    sudo systemctl start redis
    
  4. 配置 Redis 开机自启动:

    sudo systemctl enable redis
    
  5. 修改配置文件 /etc/redis.conf

    修改 bind 和 requirepass

    bind 0.0.0.0
    
    requirepass 123456
    

    然后重启 redis:

    sudo systemctl restart redis
    
  6. 开启防火墙(可选)

    # 添加 redis 端口
    firewall-cmd --zone=public --add-port=6379/tcp --permanent
    firewall-cmd --zone=public --add-port=6379/udp --permanent
    
    # 重启防火墙
    firewall-cmd --reload
    
  7. 运行 redis-cli

    redis-cli
    
    127.0.0.1:6379> auth 123456
    OK
    

通过 snap 安装

  1. 安装 redis

    sudo snap install redis
    
  2. 查看 snap 安装的包:

    snap list
    
  3. 启动 Redis:

    sudo snap start redis
    
  4. 运行 redis-cli

    Redis的snap安装没有预配置的文件(redis.conf)。因此,我们需要使用Redis的CLI进入控制台并进行配置。

    redis.cli
    
    # 打印所有的配置
    127.0.0.1:6379> CONFIG GET *
    
  5. 配置外网访问

    要配置Redis以允许外部网络访问,使用以下命令:

    127.0.0.1:6379> CONFIG GET bind
    
    127.0.0.1:6379> config set bind 0.0.0.0
    

    这将绑定Redis服务器到0.0.0.0 IP地址,使其对外可访问。请注意,这可能会带来一些安全风险,因此请谨慎操作。

    设置保护模式

    127.0.0.1:6379> CONFIG SET protected-mode no
    

    该模式控制外部网是否可以连接 redis 服务,默认是 yes, 所以默认我们外网是无法访问的,如需外网连接 rendis 服务则需要将此属性改为 no。

  6. 设置访问密码

    127.0.0.1:6379> config set requirepass mypass
    

    这将设置一个名为"mypass"的密码作为访问Redis的要求。请确保将"mypass"替换为您选择的强密码。

  7. 升级

    sudo snap refresh redis
    
  8. 卸载

    sudo snap remove redis
    

在 MacOS 安装

  1. 安装 Redis:

    brew install redis
    
  2. 启动 Redis 服务器:

    brew services start redis
    

    这将启动 Redis 服务器并使其在后台运行。

  3. 查看 Redis 状态

    brew services info redis
    
  4. 验证 Redis 安装:

    您可以使用以下命令来验证 Redis 是否成功安装并正在运行:

    redis-cli ping
    

    如果 Redis 正常运行,它将返回 “PONG”。

  5. 停止 Redis 服务器:

    brew services stop redis
    

通过源码安装

  1. 安装编译软件

    yum -y install gcc gcc-c++ kernel-devel
    
  2. 创建安装目录

    mkdir -p /usr/local/redis
    
  3. 下载源代码并解压

    wget https://download.redis.io/redis-stable.tar.gz
    tar -xzvf redis-stable.tar.gz
    
  4. 进入都目,编译安装

    cd redis-stable
    make prefix=/usr/local/redis/ install
    

    make install默认安装到/usr/local/bin目录下,如果需要指定安装路径,需要添加PREFIX参数

  5. 拷贝配置文件

    mkdir /usr/local/redis/conf
    cp redis.conf /usr/local/redis/conf/
    
  6. 修改 redis.conf 加入以下配置:

    # 允许哪些 IP 地址可以访问
    bind 0.0.0.0
    
    # 以守护进程的方式运行
    daemonize yes
    
    # 设置密码授权
    requirepass <设置密码>
    
  7. 启动Redis:

    redis-server /usr/local/redis/conf/redis.conf
    

    查看进程:

    ps -ef|grep redis
    

    停止redis服务:

    redis-cli shutdown
    

通过 docker 安装

在Docker中运行Redis容器,并设置密码保护和持久化存储的配置

REDIS_PASSWORD=123456

docker run \
  -d \
  --restart always \
  --privileged=true \
  --name redis \
  -v /etc/localtime:/etc/localtime \
  -p 6379:6379 \
  redis:7 \
  --requirepass $REDIS_PASSWORD \
  --appendonly yes

参数说明:

  • REDIS_PASSWORD=123456:设置Redis的密码为123456。可以根据需要更改密码。
  • docker run:运行Docker容器命令。
  • -d:以后台模式运行容器。
  • --restart always:设置容器在启动时自动重启。
  • --privileged=true:授予容器特权,以便在容器内部执行特权操作。
  • --name redis:指定容器的名称为redis。
  • -v /etc/localtime:/etc/localtime:将主机的时区设置映射到容器内部,以确保时间同步。
  • -p 6379:6379:将主机的6379端口映射到容器的6379端口,以便可以通过主机IP和端口访问Redis。
  • redis:7:指定要运行的Redis镜像版本为7。
  • --requirepass $REDIS_PASSWORD:设置Redis的密码为之前定义的REDIS_PASSWORD变量的值。
  • --appendonly yes:开启Redis的AOF(Append-Only File)持久化模式,将写操作追加到文件中,以保证数据持久化。

通过 docker-compose 安装

使用Docker Compose配置Redis单机容器,https://github.com/chensoul/learn-docker/blob/main/docker-compose/redis/docker-compose.redis.yml

version: '3.0'

services:
  # Redis standalone
  redis:
    image: bitnami/redis:7.2
    restart: always
    environment:
      # ALLOW_EMPTY_PASSWORD is recommended only for development.
      ALLOW_EMPTY_PASSWORD: "yes"
    ports:
      - '6379:6379'
    volumes:
      - redis-data:/bitnami/redis/data
    healthcheck:
      test: [ "CMD", "redis-cli","--raw", "incr","ping" ]
      interval: 5s
      timeout: 2s
      retries: 10

volumes:
  redis-data:
  • restart: always:设置容器在停止后自动重启。
  • environment:定义容器的环境变量。
    • ALLOW_EMPTY_PASSWORD: "yes":允许使用空密码(仅在开发环境中建议使用)。
  • ports:指定容器端口与主机端口的映射关系。
    • '6379:6379':将主机的6379端口映射到容器的6379端口,以便可以通过主机IP和端口访问Redis。
  • volumes:定义容器的数据卷。
    • redis-data:/bitnami/redis/data:将Redis容器的数据存储在名为redis-data的卷中。
  • healthcheck:定义容器的健康检查。
    • test: [ "CMD", "redis-cli","--raw", "incr","ping" ]:使用Redis的健康检查命令来测试容器的健康状态。
    • interval: 5s:每5秒运行一次健康检查。
    • timeout: 2s:每次健康检查的超时时间为2秒。
    • retries: 10:最多重试10次健康检查。

集群模式安装

通过 yum 安装

TODO

通过 docker-compose 安装

https://github.com/chensoul/learn-docker/blob/main/docker-compose/redis/docker-compose.redis-cluster.yml

version: '3.0'

services:
  # Redis cluster
  redis-node-0:
    image: bitnami/redis-cluster:7.2
    volumes:
      - redis-cluster-data-0:/bitnami/redis/data
    environment:
      - REDIS_PASSWORD=redis
      - REDISCLI_AUTH=redis
      - REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5

  redis-node-1:
    image: bitnami/redis-cluster:7.2
    volumes:
      - redis-cluster-data-1:/bitnami/redis/data
    depends_on:
      - redis-node-0
    environment:
      - REDIS_PASSWORD=redis
      - REDISCLI_AUTH=redis
      - REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5

  redis-node-2:
    image: bitnami/redis-cluster:7.2
    volumes:
      - redis-cluster-data-2:/bitnami/redis/data
    depends_on:
      - redis-node-1
    environment:
      - REDIS_PASSWORD=redis
      - REDISCLI_AUTH=redis
      - REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5

  redis-node-3:
    image: bitnami/redis-cluster:7.2
    volumes:
      - redis-cluster-data-3:/bitnami/redis/data
    depends_on:
      - redis-node-2
    environment:
      - REDIS_PASSWORD=redis
      - REDISCLI_AUTH=redis
      - REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5

  redis-node-4:
    image: bitnami/redis-cluster:7.2
    volumes:
      - redis-cluster-data-4:/bitnami/redis/data
    depends_on:
      - redis-node-3
    environment:
      - REDIS_PASSWORD=redis
      - REDISCLI_AUTH=redis
      - REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5

  redis-node-5:
    image: bitnami/redis-cluster:7.2
    volumes:
      - redis-cluster-data-5:/bitnami/redis/data
    depends_on:
      - redis-node-0
      - redis-node-1
      - redis-node-2
      - redis-node-3
      - redis-node-4
    environment:
      - REDIS_PASSWORD=redis
      - REDISCLI_AUTH=redis
      - REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5
      - REDIS_CLUSTER_REPLICAS=1
      - REDIS_CLUSTER_CREATOR=yes


volumes:
  redis-cluster-data-0: 
  redis-cluster-data-1: 
  redis-cluster-data-2: 
  redis-cluster-data-3: 
  redis-cluster-data-4: 
  redis-cluster-data-5: 

哨兵模式安装

通过 yum 安装

TODO

通过 docker-compose 安装

https://github.com/chensoul/learn-docker/blob/main/docker-compose/redis/docker-compose.redis-sentinel.yml

version: '3.0'

services:
  # Redis sentinel
  redis-master:
    image: bitnami/redis:7.2
    volumes:
      - redis-sentinel-data-master:/bitnami/redis/data
    environment:
      - REDIS_REPLICATION_MODE=master
      - REDIS_PASSWORD=123456

  redis-slave:
    image: bitnami/redis:7.2
    volumes:
      - redis-sentinel-data-slave:/bitnami/redis/data
    environment:
      - REDIS_REPLICATION_MODE=slave
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PASSWORD=123456
      - REDIS_PASSWORD=123456
    depends_on:
      - redis-master

  redis-sentinel:
    image: bitnami/redis:7.2
    volumes:
      - redis-sentinel-data-sentinel:/bitnami/redis/data
    environment:
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_SET=mymaster
      - REDIS_SENTINEL_PASSWORD=123456
      - REDIS_MASTER_PASSWORD=123456
    depends_on:
      - redis-master
      - redis-slave

volumes:
  redis-sentinel-data-master: 
  redis-sentinel-data-slave: 
  redis-sentinel-data-sentinel: 
Share this post:

Related content