Redis主从复制,哨兵模式搭建(Docker)

哨兵模式搭建成功!(带密码)

首先仍然是需要docker-compose(用于启动监控哨兵情况)

安装(一下网址不需要经过github):

https://blog.csdn.net/pushiqiang/article/details/78682323

redis配置文件与sentinel配置文件模板放置网盘中,如下!

链接:https://pan.baidu.com/s/1MA16xdQl_OnlRY-IJkxg0w
提取码:1234

准备搭建情况:

#主机
84:6379

#从机
85:6379
86:6379

#哨兵
84:26379
85:26379
86:26379

84机器环境搭建

1.redis搭建

vim /opt/redis/myredis/redis.conf

其中bind注释掉或者0.0.0.0

port 6379

protected-mode no

masterauth 123456

requirepass 123456

其他的默认就可以

主机中之所以配置masterauth 正是为了防止主机宕机后已经选择其他机器作为主机,他要作为其他主机的从机,必须要知道他要连接主机的密码是什么

docker run -p 6379:6379 --name myredis
-v  /opt/redis/myredis/redis.conf:/etc/redis/redis.conf 
-d redis 
redis-server /etc/redis/redis.conf 

-v 主宿机位置 容器内位置 因此这里需要确保/opt/redis/myredis/redis.conf存在,否则将以没有配置文件的方式启动

使用docker ps检查下有没有启动成功,如果没成功检查下redis.conf内部是不是配置错了

3.哨兵1搭建

vim /opt/redis/myredis/sentinel.conf

进去后 :%d 将内容清除,放入如下内容

port 26379
daemonize no
dir "/data"
#主节点
sentinel monitor mymaster 192.168.2.84 6379 2
sentinet auth-pass mymaster 123456
#默认30s我设置5s就是便于观察(多少时间查看一次主节点通讯)
sentinel down-after-milliseconds mymaster 5000
#默认180s我设置5s就是便于观察(选举失败,下次选取时间)
sentinel failover-timeout mymaster 5000
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 2
#docker无权限手动配置 报告自己的ip
sentinel announce-ip 192.168.2.84
sentinel announce-port 26379

4.在同级目录下 /opt/redis/myredis

vim docker-compose.yml

输入:

version: '3.1'
services:
sentinel1:
 image: redis
 container_name: redis-sentinel
 ports:
      - 26379:26379
    privileged: true
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf

privileged: true这个很重要,否则通过docker-composer logs -f就能看到权限不足无法启动容器了!

如果没有docker-compose,最上方已经给了安装地址,几秒钟就安装完了

  1. 在当前 /opt/redis/myredis下执行
  • docker-compose up -d
  • 完成后通过docker ps查看容器是否已经启动
  • 通过docker-composer logs -f 查看实时日志(这个很重要,我们启动哨兵后,断开master就要在这里看看怎么变化,如果失败则会显示没启动成功的原因,如果成功则会显示监视的主节点是哪个,以及主节点下的从节点有哪些,看不到就完蛋了...)
  • docker exec -it redis-sentinel redis-cli -p 26379 后info查看

85机器搭建

和上方一直,只要不在redis配置文件修改自己是slave以及对应sentinel.conf声明为自己ip即可

1.redis搭建

vim /opt/redis/myredis/redis.conf

其中bind注释掉或者0.0.0.0

port 6379

protected-mode no

#这个是必须的,因为redis模式自己是主节点
slaveof 192.168.2.84 6379

masterauth 123456

requirepass 123456

其他的默认就可以
docker run -p 6379:6379 --name myredis
-v  /opt/redis/myredis/redis.conf:/etc/redis/redis.conf 
-d redis 
redis-server /etc/redis/redis.conf 

-v 主宿机位置 容器内位置 因此这里需要确保/opt/redis/myredis/redis.conf存在,否则将以没有配置文件的方式启动

使用docker ps检查下有没有启动成功,如果没成功检查下redis.conf内部是不是配置错了

3.哨兵1搭建

vim /opt/redis/myredis/sentinel.conf

进去后 :%d 将内容清除,放入如下内容

port 26379
daemonize no
dir "/data"
#主节点
sentinel monitor mymaster 192.168.2.84 6379 2
sentinet auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 5000
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 2
#docker无权限手动配置 报告自己的ip
sentinel announce-ip 192.168.2.85
sentinel announce-port 26379

4.在同级目录下 /opt/redis/myredis

vim docker-compose.yml

输入:

version: '3.1'
services:
sentinel1:
 image: redis
 container_name: redis-sentinel
 ports:
      - 26379:26379
    privileged: true
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf

privileged: true这个很重要,否则通过docker-composer logs -f就能看到权限不足无法启动容器了!

如果没有docker-compose,最上方已经给了安装地址,几秒钟就安装完了

  1. 在当前 /opt/redis/myredis下执行
  • docker-compose up -d

  • 完成后通过docker ps查看容器是否已经启动

  • 通过docker-composer logs -f 查看实时日志(这个很重要,我们启动哨兵后,断开master就要在这里看看怎么变化,如果失败则会显示没启动成功的原因,如果成功则会显示监视的主节点是哪个,以及主节点下的从节点有哪些,看不到就完蛋了...)

86机器搭建

和上方一直,只要不在redis配置文件修改自己是slave以及对应sentinel.conf声明为自己ip即可

1.redis搭建

vim /opt/redis/myredis/redis.conf

其中bind注释掉或者0.0.0.0

port 6379

protected-mode no

#这个是必须的,因为redis模式自己是主节点
slaveof 192.168.2.84 6379

masterauth 123456

requirepass 123456

其他的默认就可以
docker run -p 6379:6379 --name myredis
-v  /opt/redis/myredis/redis.conf:/etc/redis/redis.conf 
-d redis 
redis-server /etc/redis/redis.conf 

-v 主宿机位置 容器内位置 因此这里需要确保/opt/redis/myredis/redis.conf存在,否则将以没有配置文件的方式启动

使用docker ps检查下有没有启动成功,如果没成功检查下redis.conf内部是不是配置错了

3.哨兵1搭建

vim /opt/redis/myredis/sentinel.conf

进去后 :%d 将内容清除,放入如下内容

port 26379
daemonize no
dir "/data"
#主节点
sentinel monitor mymaster 192.168.2.84 6379 2
sentinet auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 5000
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 2
#docker无权限手动配置 报告自己的ip
sentinel announce-ip 192.168.2.86
sentinel announce-port 26379

4.在同级目录下 /opt/redis/myredis

vim docker-compose.yml

输入:

version: '3.1'
services:
sentinel1:
 image: redis
 container_name: redis-sentinel
 ports:
      - 26379:26379
    privileged: true
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf

privileged: true这个很重要,否则通过docker-composer logs -f就能看到权限不足无法启动容器了!

如果没有docker-compose,最上方已经给了安装地址,几秒钟就安装完了

  1. 在当前 /opt/redis/myredis下执行
  • docker-compose up -d

  • 完成后通过docker ps查看容器是否已经启动

  • 通过docker-composer logs -f 查看实时日志(这个很重要,我们启动哨兵后,断开master就要在这里看看怎么变化,如果失败则会显示没启动成功的原因,如果成功则会显示监视的主节点是哪个,以及主节点下的从节点有哪些,看不到就完蛋了...)

【我们可以通过docker stop方式关闭redis容器,但是最好不要直接关机,因为直接关机的话,当前机器上的哨兵也没了,我这边就出现了一台从机变为主机,但是另一台从机仍然认为已经宕机的节点作为自己的主节点!】

整个要先启动redis节点,节点全部启动完毕后再启动哨兵!

如果要搭建不要密码的,那么把redis配置中masterauth 与 requirepass去掉,把sentinel配置中sentinet auth-pass去掉即可,当然还是建议要配置密码的,要不然很不安全!

原文地址:https://www.cnblogs.com/ningxinjie/p/14586623.html