Header

【Redis集群实战】Redis 以及 Redis Sentinel 的 Docker部署

Redis 基本说明

这里我是用的是docker。
既然使用docker那么就需要配置两个组件
一个 Redis 一个 Redis Sentinel
我们可以使用 docker-compose 来启动一组 docker

安装 docker-compose

下载 docker-compose 安装包

这里面直接从 github 下载。并且放在了 /usr/local/bin/docker-compose 目录下

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

改变 docker-compose 权限

sudo chmod +x /usr/local/bin/docker-compose

加入环境变量

export PATH="$PATH:/usr/local/bin"
source ~/.bashrc

验证安装

docker-compose --version

出现 以下提示代表安装成功

docker-compose --version

docker-compose 配置说明

version: '3.9'
services:
  redis-master:
    image: redis:latest
    container_name: redis-master
    volumes:
      - ./redis/master.conf:/usr/local/etc/redis/redis.conf
      - ./redis-data:/data
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    ports:
      - "6379:6379"

  sentinel1:
    image: redis:latest
    container_name: sentinel1
    volumes:
      - ./sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
    command: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]
    ports:
      - "26379:26379"

这里 服务名 sentinel1 和 容器名 一样 有什么区别呢?

同一台服务器,容器名称必须唯一,但是服务名称只需要保证同一个docker-compose中唯一即可。但是需要确保两个docker-compose文件在不同目录中。

参考文章:docker-compose服务名称和容器名称区别

volumes 参数

docker 作为容器,可以理解为一台模拟器,那么我们启动了一个容器,他的接口 他的配置都是在容器里的。我们需要对外进行映射。
一般使用 冒号 【:】 隔开,前面代表真实服务器 ,后面代表容器。
比如端口,前面代表服务器端口,后面代表容器端口。

这里的volumes 就是配置文件映射。前面代表 服务器真实地址,后面代表 容器内的位置。
可以通过换行来配置多个

其他配置

./redis/master.conf

port 6379
bind 0.0.0.0
protected-mode no
appendonly yes

./sentinel/sentinel1.conf

port 26379
bind 0.0.0.0
sentinel monitor redis-master 192.168.1.220 6379 2
sentinel down-after-milliseconds redis-master 5000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 10000

启动

docker-compose up -d

使用

docker ps

查看启动情况

排错

我的直接上来就启动错了。是因为配置文件莫名其妙 port 变成了 rt
我们可以使用

docker-compose logs

来看启动日志

sentinel1       | 1:X 20 Nov 2024 06:32:07.561 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
sentinel1       | 1:X 20 Nov 2024 06:32:07.561 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
sentinel1       | 1:X 20 Nov 2024 06:32:07.561 * Redis version=7.4.1, bits=64, commit=00000000, modified=0, pid=1, just started
sentinel1       | 1:X 20 Nov 2024 06:32:07.561 * Configuration loaded
sentinel1       | 1:X 20 Nov 2024 06:32:07.561 * monotonic clock: POSIX clock_gettime
sentinel1       | 1:X 20 Nov 2024 06:32:07.562 * Running mode=sentinel, port=26379.
sentinel1       | 1:X 20 Nov 2024 06:32:07.562 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
sentinel1       | 1:X 20 Nov 2024 06:32:07.562 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Is a directory
sentinel1       | 1:X 20 Nov 2024 06:32:07.562 * Sentinel ID is 0042b19b706b21ddfce786a6753080d31cb84cad
redis-master    |
redis-master    | *** FATAL CONFIG FILE ERROR (Redis 7.4.1) ***
redis-master    | Reading the configuration file, at line 2
redis-master    | >>> 'rt 6379'
redis-master    | Bad directive or wrong number of arguments

这里说到了我的配置文件配置错误。
修改后启动成功。

slave 配置

port 6379
bind 0.0.0.0
protected-mode no
slaveof 192.168.1.220 6379   # 这里配置主服务器
appendonly yes

其他配置同上,不过注意自己的配置文件名

使用 redis-cli 检查服务器配置

INFO replication

# Replication
role:master
connected_slaves:1   #连接成功
slave0:ip=192.168.1.221,port=6379,state=online,offset=155,lag=0
master_failover_state:no-failover
master_replid:7f44403bedc3c754e6078de5d33fe5c59068236d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:155
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:154

测试故障转移

在 Virtual Box 关掉网卡后

img

服务断掉了。

从其他服务器查看信息
可以看到 master服务器变味了 222

> INFO replication
# Replication
role:slave
master_host:192.168.1.222
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:63983
slave_repl_offset:63983
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:5ab549112334c05c91c67d129bec1c3e501ef842
master_replid2:7f44403bedc3c754e6078de5d33fe5c59068236d
master_repl_offset:63983
second_repl_offset:40577
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:16
repl_backlog_histlen:63968
posted @ 2024-11-20 15:21  大俗XD  阅读(4)  评论(0编辑  收藏  举报

Footer