docker——redis部署&&哨兵集群部署

docker的安装过程省略


前言

个人云服务器约束,通过docker资源占用率小的优势实现redis伪集群部署,以对redis能有更深入的了解。

一、redis镜像下载

  1. 使用docker命令在仓库中查询redis镜像docker search redis
    在这里插入图片描述

  2. 上图第一个即是官方镜像文件,docker pull redis拉下
    完成后可用过docker images命令查看镜像
    在这里插入图片描述

二、redis配置

首先清楚docker运行的是个容器,可以抽象的理解为一台独立的虚拟机,所以在运行的过程中具有相对独立的配置和操作。为了之后能更方便的维护redis,我们在本机创建出对应的映射文件redis.conf(redis配置)和sentinel.conf(哨兵配置),然后在修改所映射配置文件即可对docker容器中的服务进行配置,不用再进入容器内部进行操作。
  1. 确定一个目录对于映射文件的存放,方便以后维护
mkdir /docker_dara/redis/conf -p
mkdir /docker_dara/redis/data -p
mkdir /docker_dara/redis/log -p
//在此,共创建了三个文件目录,分别存放.conf的配置文件,redis的rdb物理文件和redis日志文件

  1. 下载配置文件
    cd到conf中,wget下载配置文件,redis.conf为redis-server配置;sentinel.conf为redis的哨兵配置
wget -c http://download.redis.io/redis-stable/redis.conf
wget -c http://download.redis.io/redis-stable/sentinel.conf
  1. 修改redis.conf
    以下是我的修改项,改动不大,且附说明,供参考。
#bind 127.0.0.1 确保外网连接
protected-mode no
logfile "/log/redis.log" //日志输出路径
dir /data //文件存放路径
在原有的基础上改动不大,只是关闭了保护模式和修改了输出文件路径,redis默认是开启了rdb的备份操作,aof是关闭的,这里我没有用到这方面的备份操作所以就打开,如果小伙伴需要aof备份的话,打开即可,输出路径若改动可参考`dir`路径

在此我master节点和slave节点使用的相同的配置,主从关系我后面会进入容器然后通过redis命令行slaveof 来配置主从关系,如果小伙伴想要在配置文件中配置主从关系,可以将redis.conf复制出多份,以上可作为master节点配置,而slave节点可增加slaveof master_ip master_port配置,根据redis版本抉择

三、运行redis-server服务

先运行master节点,master节点和slave节点通过docker-name 进行分区,我的分别为docker_redis_master、docker_redis_slave0、docker_redis_slave1

docker run --name docker_redis_master \
-v \
/data/docker_data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v \
/data/docker_data/redis/log/redis_master.log:/log/redis.log \
-v \
/data/docker_data/redis/data:/data \
-v \
/data/docker_data/redis/conf/sentinel_master.conf:/usr/local/etc/redis/sentinel.conf \
-d -p 6379:6379 -p 26379:26379 redis

简单讲解一下,docker run不必多说了,创建并运行容器
--name指定docker名称,之后直接使用改容器名称运行或停止该容器
-v映射指向,将本机/data/中/data/docker_data/redis/conf/redis.conf映射到容器中/usr/local/etc/redis/redis.conf文件,修改本机该文件即可同步如容器中的指定文件,这里避免了每次进入容器修改文件的繁琐操作
-p端口映射,本机端口:docker端口,意思为将容器内6379端口映射到本机器的6379端口
-d后台运行,大家都不想一直看着日志输出吧,加上这个参数没错的
最后的redis即为docker镜像

此处我映射了四个文件,一个是redis-server的配置文件,一个就是redis的rdb存储数据的物理文件,一个是日志redis输出日志,最后一个是sentinel的哨兵配置文件,若不需要开启哨兵模式的可以将最后一个删除,当然不删除对服务也不会有影响

此刻,master部署完成,使用docker ps查看正在运行的容器,然使用下面命令进入运行的master节点容器中,进入redis的客户端,可通过命令行进行操作

docker exec -it docker_redis_master /bin/bash
redis-cli
...

然后slave节点与master相同,通过上面的docker run命令,更改对应的配置文件名运行即可。

四、主从关系依赖

服务起来了,接下来主从关系,我们通过slaveof ip prot命令关联主宠
首先确定master节点的内网ip

docker inspectdocker_redis_master 

在这里插入图片描述
Nerworks中的IPAddress就是该 docker容器的ip
进入从节点容器,使用SLAVEOF 上面查询到的ip port

docker exec -it docker_redis_slave0 /bin/bash

完成主从绑定,另一个从节点相同操作,最后进入master通过info查看从节点数量。
至此,redis服务集群部署完成,接下来是哨兵模式

四、sentinel哨兵配置

修改sentinel.conf
在修改哨兵配置文件前,先了解哨兵的工作模式,每个哨兵节点监听的是redis-server的master节点,所以,在配置文件中需要指定redis的master节点的ip以用于sentinel检测master状态,上步相同,先得到master的内网ip
改动不大,供参考

daemonize yes //后台运行
logfile "/log/sentinel.log"
dir "/data/sentinel"
sentinel monitor mymaster [master_ip] 6379 2 //指定主节点ip 后面的2为投票数

修完以上配置后,将sentinel.conf复制出多份,每个节点一个,因为配置文件中有个
sentinel myid 77bd29793d91cf41a1561f4de0a8545a19c6cd48
介个属性,表示每个sentinel的id,该id是唯一的,哨兵之间相互确认就是通过这玩意儿,所以如果公用一个文件,他们这id都是一个值,自然关系将瓦解了,所以三个文件就myid不用,其他一样即可

cp sentinel.conf sentinel_master.conf
cp sentinel.conf sentinel_slave0.conf
cp sentinel.conf sentinel_slave1.conf

复制完后,手动的修改一下myid这个属性,让三文件不一样就行。

五、运行redis-sentinel服务

依次进入三个容器中,分别执行下面命令直接开启哨兵模式

redis-sentinel /usr/local/etc/redis/sentinel.conf

之前映射已经做了sentinel.conf的映射,这里直接执行就好,如果不放心可以进入每个容器找到对应的配置文件查看具体内容
由于是docker,里面内置命令很少,没有vim,需要下载,可以参考该文下载vim

三个节点均运行sentinel之后,可以尝试kill master节点,然后查看slave节点是否能够自主升为master,然后成功!



版权声明:本文为shaun17原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。