在我上第一个项目的时候,就已经接触过redis的主从和哨兵了。但一直以来,仅仅是在项目上用到,却没有自己搭建过。最近研究了一下,用docker搭建了一个【一主二从三哨兵】的集群,下面来记录一下。
首先,自然是要拉取redis的镜像。我们直接输入docker pull redis,等待拉取完成,然后输入docker images查看结果。
可以看到redis的镜像已经被拉下来了。下一步,我们需要准备redis的配置文件。
因为我们用docker启动redis,默认是以无配置文件启动的,所以我们需要为其额外准备一份配置文件。可以去官网下载一个标准版的redis,把里面的配置文件拿到,并上传到服务器。我这里采用的就是这种方式。
拿到redis.conf之后,我们分别为这些节点复制一份,如下图所示。
之后,我们就要开始修改配置文件了。
master的配置文件基本不需要改动,修改一下密码即可。
两个从节点的配置文件,我们分别修改端口为6380和6381,并且增加2个配置项:
slaveof 127.17.0.2 6379
masterauth 123456
这里是设置主节点的地址以及密码
到这一步,我们可以先启动主节点和两个从节点看看效果,先不管哨兵。
docker run --name redis-master -p 6379:6379 -v /root/docker_redis_conf/redis-master.conf:/redis.conf redis redis-server /redis.conf
docker run --name redis-slave1 -p 6380:6380 -v /root/docker_redis_conf/redis-slave1.conf:/redis.conf redis redis-server /redis.conf
docker run --name redis-slave2 -p 6381:6381 -v /root/docker_redis_conf/redis-slave2.conf:/redis.conf redis redis-server /redis.conf
用工具连接上三个redis节点,输入命令info replication,查看主从连接情况
可以看到,主从已经搭建成功了,主节点和从节点都分别识别到了。在主节点尝试插入一条数据,可以发现两个从节点都复制到了数据。
然后我们开始搭建哨兵节点。哨兵的配置文件有三个,首先还是修改端口,这里我们为了方便分别修改为11111、22222、33333。然后是三个哨兵的通用配置
sentinel monitor mymaster 172.17.0.2 6379 2
sentinel auth-pass mymaster 123456
这个其实和从节点类似,都是指定主节点的地址和密码。mymaster是自己给主节点起的一个名字,第一条命令最后的2,指的是当两个哨兵都认为主节点挂了之后,才会重新选取一个从节点作为主节点。
然后我们来启动哨兵
docker run --name redis-sentinel1 -p 11111:11111 -v /root/docker_redis_conf/redis-sentinel1.conf:/redis.conf redis redis-sentinel /redis.conf
docker run --name redis-sentinel2 -p 22222:22222 -v /root/docker_redis_conf/redis-sentinel2.conf:/redis.conf redis redis-sentinel /redis.conf
docker run --name redis-sentinel3 -p 33333:33333 -v /root/docker_redis_conf/redis-sentinel3.conf:/redis.conf redis redis-sentinel /redis.conf
现在我们执行docker ps来看一下整体的启动情况
然后我们来测试一下哨兵是否能正常工作,我们手动停止掉master节点,然后分别在两个从节点执行info replication,看看会有什么效果。
可以看到,slave2自动变成了master节点,slave的master也变成了slave2。这就证明了哨兵搭建成功了,可以自动将master转移到某个slave上。