docker安装配置redis单机、主从架构、哨兵模式

本文详细指导如何在CentOS 7.6环境中安装Docker 18.06.1-ce,配置并启动单节点Redis 3.0.7,包括解决配置错误,以及主从复制和哨兵模式的部署。还介绍了RDB和AOF持久化,以及Redis Manager可视化工具的安装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统:centos7.6

docker:18.06.1-ce

redis:3.0.7

一、安装单节点redis

1、拉取镜像

docker pull redis:3.0.7

2、创建目录,docker/redis/{conf,data}

mkdir -p /docker/redis
cd /docker/redis
mkdir {conf,data}

3、准备配置文件,redis.conf

从redis官网:https://redis.io/topics/config,找到对应版本的配置,copy下来;本次版本3.0

安装过程中遇到问题:容器起不起来,查看日志:

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 94
>>> 'protected-mode no'
Bad directive or wrong number of arguments

原因:在网上down了一个redis.conf的配置,和3.0.7的不匹配,一直报配置错误;最后替换了官网上的3.0的配置,就成功了。

需要注意的配置:

bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败

4、启动

docker run --name redis  -p 6379:6379 -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data -d redis:3.0.7 /usr/local/bin/redis-server /etc/redis/redis.conf

说明:

        -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf 挂载目录,指定挂载的配置文件路径

        /usr/local/bin/redis-server /etc/redis/redis.conf  指定配置文件启动redis-server

Redis持久化:

RDB快照(snapshop):redis默认将内存数据库快照保存在名为dump.rdb的二进制文件中。

# save 60 1000      redis在满足60秒内有超过1000个键被改动,自动保存一次数据集。

也可以通过save或者bgsave命令,手动生成dump.rdb文件。每次新的rdb文件会覆盖原有的快照文件。

        bgsave:写是复制,借助操作系统提供的写时复制技术(COW,copy-on-write),在生成快照的同时,依然可以正常处理写命令。bgsave子进程是由主进程fork生成的,可以共享主线程所有内存数据。save阻塞客户端,bgsave不阻塞客户端。

AOF(append-only file)

快照功能不耐久会丢数据,redis完全耐久的持久化方式:AOF持久化,将修改的每一条指令记录进文件appendonly.aof中(先写入os cache,每隔一段时间fsync到磁盘)

appendonly yes   配置打开AOF功能

appendfsync always : 每次有新命令都追加到AOF文件时就执行一次fsync,非常安全也很慢。

appendfsync everysec :每秒fsync一次,故障时,只丢失1秒数据。

appendfsync no :从不fsync,将数据交给操作系统来处理。最快,也最不安全。

AOF重写,AOF会定期根据内存最新数据生成aof文件,手动重写bgrewriteaof。

redis4.0混合持久化:AOF重写时,将这一刻之前的内存做RDB快照处理,且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件。

二、安装redis主从

1、主节点同安装单节点redis步骤一样端口默认6379

2、修改从节点配置redis.conf,关键配置slaveof、slave-read-only;redis5.0之后slave替换成replica即可。

# 端口
port 11001
pidfile /var/run/redis-11001.pid  # 吧pid进程号写入pidfile配置的文件
logfile "11001.log"

# 配置主从复制
slaveof 192.168.0.60 6379  # 从192.168.0.60的6379的redis实例复制数据
slave-read-only yes  # 配置从节点只读

3、启动容器

docker run --name redis-11001  -p 11001:11001 -v /docker/redis-11001/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis-11001/data:/data -d redis:3.0.7 /usr/local/bin/redis-server /etc/redis/redis.conf

重复2、3步骤,可以配置多个从节点

Redis主从工作原理:

        如果你为master配置了一个slave,不管这个slave是不是第一次连接上master,它都会发送一个PSYNC命令给master请求复制数据;

        master收到PSYNC命令后,会在后台通过bgsave生成最新的rdb快照文件,持久化期间,master收到客户端的请求,缓存在内存中,当持久化完毕,master先将rdb快照发送给slave,slave先将收到的数据持久化成rdb,再加载到内存。最后master将缓存在内存中的命令发送给slave。

        当slave和master之间断开时,slave能够自动重连master,如果master收到多个slave连接请求,只会持久化一次,然后分别发送给每个slave。

当有很多从节点时,为了缓解主从复制风暴(多个从节点同时复制主节点,导致主节点压力过大),可以做如下架构

三、哨兵模式

sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。

哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis主节点发生变化,哨兵会第一时间感知到,且将新的redis主节点通知给client端(这里redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)

 基于二redis主从架构升级成哨兵模式的redis主从

每个redis节点redis-1100*,*代表从0到2,共三个节点。在各自目录/conf/下进行sentinel2100*.conf  ,内容如下:

port 21000
daemonize yes
sentinel monitor mymaster 8.140.176.246 11000 2

三个节点的端口号分别为:21000、21001、21002

对应三个节点的启动命令改为:

docker run --name redis-11000  -p 11000:11000 -v /docker/redis-11000/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis-11000/conf/sentinel-21000.conf:/etc/redis/sentinel-21000.conf -v /docker/redis-11000/data:/data -d redis:3.0.7 /usr/local/bin/redis-server /etc/redis/redis.conf

修改点:新增 映射sentinel配置文件   -v 

/docker/redis-11000/conf/sentinel-21000.conf:/etc/redis/sentinel-21000.conf

容器启动后,进入容器,启动哨兵sentinel

# 进入容器,各自容器名称注意对应
docker exec -it redis-11000 /bin/bash
# 进入sentinel.conf配置所在目录
cd /etc/redis/
# 启动哨兵
redis-sentinel sentinel-21000.conf

# 连接哨兵
redis-cli -p 21000
# 查看信息
info

 配置各节点过程中,结尾的slaves从0开始直至2,sentinels从1开始直至3

ps -ef

可以看到redis-server进程和sentinel进程都已启动。 

 四、redis可视化界面安装:redis-manager

# 获取最新镜像
docker pull reasonduan/redis-manager
# 启动容器,端口号是8182,映射到外部端口20000
docker run -d  --name redis-manager  \
-p 20000:8182 \
-e DATASOURCE_URL='jdbc:mysql://116.62.207.166:10000/redis-manager?characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai' \
-e DATASOURCE_USERNAME='root' \
-e DATASOURCE_PASSWORD='123456' \
reasonduan/redis-manager

 访问:http://ip:20000,登录admin/admin

 添加集群:

 最终看到集群的监控信息:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值