docker搭建Redis主从复制+哨兵

安装redis
拉取官方的镜像,标签为3.2

docker pull  redis:3.2

下载完我们看一下

docker images

运行容器

docker run -p 6379:6379 -v $PWD/data:/data  -d redis:3.2 redis-server --appendonly yes

这个不行的话要改下

docker run -p 6379:6379 -v ${HOME}/data:/data  -d redis:3.2 redis-server --appendonly yes

命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

然后我们连接查看一下

docker exec -it 7b465dcfa90b redis-cli
    172.17.0.1:6379> info
    # Server
    redis_version:3.2.0
    redis_git_sha1:00000000
    redis_git_dirty:0
    redis_build_id:f449541256e7d446
    redis_mode:standalone
    os:Linux 4.2.0-16-generic x86_64
    arch_bits:64
    multiplexing_api:epoll
    ...

主从复制
1.运行redis镜像
docker启动3个redis容器服务,分别使用到6379、6380、6381端口

docker run --name redis-6379 -p 6379:6379 -d redis:3.2 redis-server
docker run --name redis-6380 -p 6380:6379 -d redis:3.2 redis-server
docker run --name redis-6381 -p 6381:6379 -d redis:3.2 redis-server

之前开过一个的 再开两个就可以了

2.配置redis集群

docker inspect containerid(容器ID)

在这里插入图片描述
3个redis的内网ip地址为:

redis-6379:172.17.0.5:6379
redis-6380:172.17.0.6:6379
redis-6381:172.17.0.7:6379

进入docker容器内部,查看当前redis角色(主master还是从slave)(命令:info replication)

[root@localhost /]# docker exec -it 7b465dcfa90b redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:3860
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:3859

127.0.0.1:6379> 


可以看到当前3台redis都是master角色,使用redis-cli命令修改redis-6380、redis-6381的主机为172.17.0.5:6379

SLAVEOF 172.17.0.5 6379

再次查看主机info,已经有两个从机了(.6 和 .7)

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.6,port=6379,state=online,offset=166213,lag=0
slave1:ip=172.17.0.7,port=6379,state=online,offset=166213,lag=1
master_repl_offset:166213
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:166212

至此,redis下的主从配置就好了

三、Sentinel哨兵

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务

监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

接下来直接进入3台redis容器内部进行配置

docker exec -ti 容器id /bin/bash

进入根目录创建sentinel.conf文件

cd / && touch sentinel.conf && touch log.txt

修改sentinel.conf文件内容为:

sentinel monitor mymaster 172.17.0.5 6379 1
#添加为后台运行
daemonize yes
#指定日志目录
logfile "/log.txt"

这里vim的时候可能会遇到错误
bash: vi: command not found
这是因为vim没有安装,使用如下命令安装:

apt-get install vim

又会出现如下问题:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim

此时我们要

apt-get update

然后再

apt-get install vim

最后我们就启动redis哨兵

redis-sentinel /sentinel.conf

配置完毕
然后我们查看一下

tail -f log.txt

在这里插入图片描述
1:可以看到我们的6 ,7服务都是从5过来的
2:当我们停掉5的时候,6马上自动成了主服务器,
3:最后我们重新把5 启动,5自动成了6的从服务器

报错: READONLY You can’t write against a read only slave.

只读,解决方案

config set slave-read-only no
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值