Docker搭建Redis主从 + Redis哨兵模式(一主一从俩哨兵)

我这里是搭建一主一从,俩哨兵,准备两台服务器,分别安装docker

我这里有两台centos服务器

主服务器IP:192.168.252.134

从服务器IP:192.168.252.135

1.两台服务器分别拉取redis镜像

docker pull redis

2.查看镜像 docker images

3.创建文件目录,我这里是放在 /opt/docker/redis

mkdir /opt/docker/redis/conf

mkdir /opt/docker/redis/data

4.主节点配置文件修改(提前准备好配置文件)可以去redis官方下载:redis.conf 配置文件下载

进入到 cd /opt/docker/redis/conf 把 redis.conf 配置文件放到这里

如果不想下载的话也可以直接 vim redis.conf 创建并编辑文件,配置内容如下

cd /opt/docker/redis/conf

注释掉 所有IP都可以访问redis服务

#bind 127.0.0.1 -::1

关闭保护模式

protected-mode no

端口号

port 6379

改为no 后台进程的模式,避免跟docker的-d命令冲实

daemonize no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

登录密码

requirepass 123456

主节点密码

masterauth 123456

持久化

开启后,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里

appendonly yes

5.从节点配置文件修改

同样 cd /opt/docker/redis/conf 编辑 vim redis.conf

从节点的配置只多了一个 replicaof 主从复制的配置,(如果配置多个从节点,复制此配置即可)

注释掉 所有IP都可以访问redis服务

#bind 127.0.0.1 -::1

关闭保护模式

protected-mode no

端口号

port 6379

改为no 后台进程的模式,避免跟docker的-d命令冲实

daemonize no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

登录密码

requirepass 123456

主节点密码

masterauth 123456

持久化

开启后,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里

appendonly yes

#从节点需要配置这个 主节点的IP 和端口

replicaof 192.168.252.134 6379

6.分别启动 两台服务器上的redis容器

# 主服务器启动
# 创建并运行redis容器
docker run -d --privileged=true --restart always -v /opt/docker/redis/data:/data -v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf --name redis-master -p 6379:6379 redis /etc/redis/redis.conf


# 从服务器启动
# 创建slave节点
docker run -d --privileged=true --restart always -v /opt/docker/redis/data:/data -v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf --name redis-slave -p 6379:6379 redis /etc/redis/redis.conf

参数说明:

-v /opt/docker/redis/data:/data ## 将容器里的数据挂载到宿主机/opt/docker/redis/data目录下

-v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf ## 容器里的redis配置文件与/opt/docker/redis/conf/redis.conf下的配置文件互相通信

/etc/redis/redis.conf ## 指定要加载的配置文件 就是映射的上面配置的那个redis.conf文件

7.这样一主一从的redis服务就启动成功了,我们进入容器验证一下

查看容器

docker ps

进入主容器

docker exec -it redis-master /bin/bash

登录到redis服务

redis-cli

输入密码

auth 123456

ping一下

ping

可以看到服务正常启动

8.查看主从信息

info replication

从节点查看:也是一样进入到从节点容器,登录redis服务里面

使用命令 exit 即可退出服务和容器

此时 主从搭建已经配置好了,我们可以用redis工具往主节点redis中set数据,即可看到从节点有相同的数据被同步过来了。

9.哨兵模式配置

哨兵的配置文件 sentinel.conf 也同样可以去 redis官方下载:sentinel.conf 配置文件下载

创建目录并进入

mkdir /opt/docker/sentinel

cd /opt/docker/sentinel

使用官方配置 把 sentinel.conf 文件copy到 服务器 /opt/docker/sentinel 这个目录

或者直接 vim sentinel.conf 配置内容如下

Example sentinel.conf

关闭保护模式

protected-mode no

哨兵服务的端口号

port 26379

改为no 后台进程的模式,避免跟docker的-d命令冲实

daemonize no

pidfile /var/run/redis-sentinel.pid

loglevel notice

logfile ""

dir /tmp

添加主节点的 IP和端口 后面的这个数字1,代表主机挂了,slave投票看让谁接替成为主机,票数最多的,就会成为主机! (我这只部署两台哨兵 所以写1)

sentinel monitor mymaster 192.168.252.134 6379 1

主节点的认证密码

sentinel auth-pass mymaster 123456

监控时间 (名称) (超时时间,当超过这个时间,则认为master已经挂了)

sentinel down-after-milliseconds mymaster 50000

acllog-max-len 128

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 180000

sentinel deny-scripts-reconfig yes

SENTINEL resolve-hostnames no

SENTINEL announce-hostnames no

SENTINEL master-reboot-down-after-period mymaster 0

多个哨兵的配置都是如此

10.启动哨兵模式容器 多个哨兵操作都是同样的(我这里是两台服务器两个哨兵)

# redis 哨兵  主节点
docker run -d --privileged=true --restart always -v /opt/docker/sentinel/sentinel.conf:/etc/redis/sentinel.conf  --name sentinel-master -p 26379:26379 redis redis-sentinel /etc/redis/sentinel.conf


# redis 哨兵 从节点
docker run -d --privileged=true --restart always -v /opt/docker/sentinel/sentinel.conf:/etc/redis/sentinel.conf  --name sentinel-slave -p 26379:26379 redis redis-sentinel /etc/redis/sentinel.conf

参数说明

redis-sentinel 是 Redis 提供的哨兵模式的命令行工具,它可以用来启动一个哨兵进程,并且可以通过它来监控和管理 Redis 服务

/etc/redis/sentinel.conf 是指定启动的加载文件

11.进到哨兵容器里面查看哨兵信息

# 进入到哨兵容器
docker exec -it sentinel-master /bin/bash

# 登录redis哨兵服务
redis-cli -p 26379

# 查看哨兵信息
info sentinel

通过上面的几个状态信息,我们可以看到哨兵检测的主节点信息,主节点下面有几个从节点,同时哨兵节点有几个。

至此 redis主从搭建和哨兵模式都已经配置好了

相关推荐
FinelyYang7 分钟前
docker+容器+redis+minio+java jar,实现开机自启动
运维·docker·容器
克鲁德战士33 分钟前
【Java并发编程的艺术3】Java内存模型(下)
java·开发语言·redis
NiNg_1_2341 小时前
Redis中的数据结构详解
数据结构·数据库·redis
NiNg_1_2343 小时前
Redis中的zset底层实现
数据库·redis·缓存
hong1616883 小时前
Docker 启动和停止的精准掌舵:操控指南
docker·容器·eureka
zwm_yy3 小时前
docker创建vue镜像
docker·vue
zwm_yy3 小时前
Dockerfile && docker-compose
开发语言·docker
Dontla3 小时前
Docker Desktop Engine Stopped原因分析(docker桌面停止)WSL没装或没更新
运维·docker·容器
小诸葛的博客5 小时前
如何使用docker启动一个gitlab
docker·容器·gitlab
爱写Bug的小孙5 小时前
docker搭建私有的仓库
java·运维·spring boot·docker·容器