前言
个人云服务器约束,通过docker资源占用率小的优势实现redis伪集群部署,以对redis能有更深入的了解。一、redis镜像下载
使用docker命令在仓库中查询redis镜像
docker search redis
上图第一个即是官方镜像文件,
docker pull redis拉下
完成后可用过docker images命令查看镜像
二、redis配置
首先清楚docker运行的是个容器,可以抽象的理解为一台独立的虚拟机,所以在运行的过程中具有相对独立的配置和操作。为了之后能更方便的维护redis,我们在本机创建出对应的映射文件redis.conf(redis配置)和sentinel.conf(哨兵配置),然后在修改所映射配置文件即可对docker容器中的服务进行配置,不用再进入容器内部进行操作。- 确定一个目录对于映射文件的存放,方便以后维护
mkdir /docker_dara/redis/conf -p
mkdir /docker_dara/redis/data -p
mkdir /docker_dara/redis/log -p
//在此,共创建了三个文件目录,分别存放.conf的配置文件,redis的rdb物理文件和redis日志文件
- 下载配置文件
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
- 修改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镜像
此刻,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,然后成功!