docker搭建redis主从和哨兵模式集群

最近在研究redis,索性使用docker搭建一套redis的主从和哨兵集群。

准备工作

          准备三台服务器

node1192.33.238.185
node2192.33.237.186
node3192.33.236.187

      分别在三台服务器安装docker,不知道怎么安装的可以参考docker官网Install Docker Desktop on Linux | Docker Documentation

      docker安装好后,获取redis镜像,docker  pull  redis(这里使用最新7.0.4也可以指定版本),镜像拉取成功后,可以通过docker images查看

 

 紧接着开始搭建redis主从集群(从节点自动同步主节点数据,实现数据的热备份)

主从集群搭建 

          这里我们使用docker-componse搭建

          编写docker-componse.yml文件

         注意:这里演示的是通过指定redis配置文件启动,所以需要先去redis官网下载对应版本的redis配置文件(版本一定要一致否则无法启动)

1.需要将bind 助兴 给注释掉否则 远程服务连接

 

2.定义redis日志路径(redis容器内路径,然后挂载到宿主机) 

 

3.对于从节点需要配置主节点的密码,否则无权限同步数据(也可以三台都配置,毕竟后面会搭建哨兵,主节点挂掉,会选举新的主节点)

 下面是主从节点下的docker-compose.yml文件

redis-master

version: '3'
services:
  master:
    image: redis
    container_name: redis-master
    restart: always
    command: redis-server /etc/redis/redis.conf  --port 6379 --requirepass 123456   --appendonly yes
    ports:
      - 6379:6379
    volumes:
      - /home/redis/data:/data
      - /home/redis/conf/redis.conf:/etc/redis/redis.conf
      - /home/redis/log:/usr/local/redis/log/

redis-slave1

version: '3'
services:
  slave1:
    image: redis
    container_name: redis-slave1
    restart: always
    command: redis-server /etc/redis/redis.conf  --slaveof 主节点ip 6379  --port 6379 --requirepass 123456   --appendonly yes
    ports:
      - 6379:6379
    volumes:
      - /home/redis/data:/data
      - /home/redis/conf/redis.conf:/etc/redis/redis.conf
      - /home/redis/log:/usr/local/redis/log/
 

两台从节点的配置文件一样,直接通过scp将redis目录复制过来就行(改一下service和容器名称就可以,其它的不用更改,三台端口号一致就行,反正是不同的服务器)

docker-componse.yml文件编写好后,在所在目录下使用docker-compose up -d(后台启动)

三台服务器启动好后,分别通过docker ps查看redis容器是否启动 

 如果容器启动失败可以查看容器日志查看失败原因

 docker logs 容器名称/id

通过info replication 命令查看服务器节点角色(从节点一样这样查看)

 

测试

   使用rdm连接redis主节点,并set  数据

 

 在从节点上查看日志

进入redis从节点容器内部查询同步过来的数据

docker exec -it  容器名称  /bin/bash  或者 docker exec -it 容器名称 redis-cli

如果设置了密码 需要执行 auth  密码

至此redis主从搭建完成

redis哨兵搭建(实现故障转移,服务高可用) 

在刚才三台服务器创建哨兵的目录,比如我服务器中的

 创建docker-compose.yml文件

version: '3'
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    ports:
      - 26379:26379
    privileged: true # 拥有容器内命令执行的权限
    volumes:
      - /home/redis-sentinel/data:/data
      - /home/redis-sentinel/conf/sentinel.conf:/etc/redis/sentinel.conf
      - /home/redis-sentinel/log:/usr/local/redis/log/
    command: redis-sentinel /etc/redis/sentinel.conf
 

 创建好后,scp 远程拷贝到其它两台服务器中(改一下service和容器名称)

创建哨兵配置文件sentinel.conf 

#哨兵的端口
port 26379
#工作路径
dir "/data"
# 指明日志文件名
logfile "/usr/local/redis/log/sentinel.log"
# master表示 哨兵监控master服务的别名
# 192.168.136.128 6379 表示 master地址
#2 表示只需要2个sentinel投票即可故障转移
sentinel monitor redis-master 主节点ip 2
sentinel auth-pass redis-master 123456
sentinel down-after-milliseconds redis-master 30000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 180000
sentinel deny-scripts-reconfig yes

注意sentinel monitor redis-master  后面的 ip是服务器的ip(一些博客中说的是容器启动后 分配的ip地址-单机,坑死人)对于真正的集群千万不要写容器分配的ip,否则哨兵故障转移没用

sentinel auth-pass redis-master  后面是redis服务密码(建议三台redis服务器的密码设置成一样)

配置文件中其它属性的作用,自行百度或者官网

将哨兵配置文件复制到其它两台服务器中(和搭建主从时一样,直接scp 拷贝 redis-sentinel整个目录

docker-compose.yml和sentinel.conf 文件都准备好后,同样的在docker-compose.ym 文件所在目录中执行 docker-compose up -d 命令

然后再三台服务器中执行docker ps查看redis哨兵容器是否启动

如果启动失败,一样通过容器日志查看原因

docker logs  容器名称/id

查看哨兵日志

 tail -f  sentinel.log  

测试 

我们将主节点上的redis容器关闭

docker stop 容器名称/id

这时我们查看其它从节点上的哨兵日志

 

可以看到redis-master  已经变了(选举和确认主节点发生故障需要时间)

这时我们再把刚才关闭的redis容器启动起来

然后我们再次查看启动起来redis服务的角色

 

角色由master已经变为slave

到此redis哨兵已经搭建完成

总结;如果真想自己亲自搭建一套redis主从和哨兵建议还是花点钱租几台云服务器,单机搭建真是没什么用,另外参考一些文章搭建的时候一定要看好是单机还是集群,有好多都是复制别人的,坑死不偿命,坑还是自己踩一下才能印象深刻,因为本文中介绍的搭建教程都是基于docker的所以没接触过doker的还是去网上了解下docker常用命令,多学点总没有错

 


              


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