本次所有操作在docker下进行,搭建方便,迅速构建redis集群。

1. docker安装redis

  • 获取redis:latest(使用官方最新的) 镜像
$ docker pull redis
$ docker run -it -v /vagrant/app/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /vagrant/app/redis/sentinel-master.conf:/usr/local/etc/redis/sentinel.conf  --name redis-master -p 6379:6379 -d redis
$ docker run -it -v /vagrant/app/redis/redis-slave1.conf:/usr/local/etc/redis/redis.conf -v /vagrant/app/redis/sentinel-slave1.conf:/usr/local/etc/redis/sentinel.conf --link redis-master:master --name redis-slave1 -p 6380:6379 -d redis
$ docker run -it -v /vagrant/app/redis/redis-slave2.conf:/usr/local/etc/redis/redis.conf -v /vagrant/app/redis/sentinel-slave2.conf:/usr/local/etc/redis/sentinel.conf --link redis-master:master --name redis-slave2 -p 6381:6379 -d redis

-v 参数用于将宿主机上的某个目录挂载到容器中

--link redis-master:master参数,前面提到的redis-slave.conf配置文件中slaveof配置项,这里使用了一个master作为别名,其效果和使用IP一样(IP地址在/etc/host文件中)。

2. redis集群,配置主从复制

分别进入三台redis容器内(docker exec -it 容器id /bin/bash),redis-cli 连接redis服务端;

连接后,使用info replication 查看当前机器角色,都为master主机;

在redis-slave1、redis-slave2下,使用 slaveof master 6379 命令,建立主从联系;再次使用 info replication查看当前role

并且master主机可以看到连接connectd-slaves:2,主从配置成功。

redis-master主机下,执行 set sun 111,可以看到slave1、slave2能 get sun,返回结果  111;

3. 添加哨兵

三台redis容器服务器,互相启动一个redis哨兵。

查看容器ip,docker inspect <容器id>
docker inspect redis-master

分别对sentinel-master.conf、sentinel-slave1.conf、sentinel-slave2.conf,编辑修改:

sentinel monitor redis-master 172.17.45.8 6379 2
##其余mymaster的地方统一修改为 redis-master

分别进入容器内,执行如下命令:

redis-sentinel /usr/local/etc/redis/sentinel.conf

4. 检测

dockers ps -a  可以看到三个正在运行的redis服务器

dockers stop redis-master 停止redis-master服务再启动,打开容器redis-slave1(可能redis-slave2),执行redis-cli,info查看:

可以看到,redis-slave1已升级为master

redis 配置文件实现主从

所有redis.conf文件中 所有bind ip 改为 0.0.0.0 (任意ip可连)

 docker run -it -p 6379:6379 -v  /vagrant/app/redis/redis-master.conf:/usr/local/etc/redis/redis.conf  --name redis-master -d redis redis-server /usr/local/etc/redis/redis.conf

docker run -d -p 6380:6379 -v /vagrant/app/redis/redis-slave1.conf:/usr/local/etc/redis/redis.conf --link redis-master:master --name redis-slave1 redis redis-server /usr/local/etc/redis/redis.conf

docker run -d -p 6381:6379 -v /vagrant/app/redis/redis-slave2.conf:/usr/local/etc/redis/redis.conf --link redis-master:master --name redis-slave2 redis redis-server /usr/local/etc/redis/redis.conf

查看容器日志,可以帮助我们快速找到问题

    docker logs <容器id>

不出意外主从配置完成,接下来配置sentinel:

  • 修改配置文件 sentinel.conf

sentinel-master.conf

    protected-mode no

    sentinel monitor mymaster master 6379 2  # master 别名,定位reids-master ip

sentinel-slave1.conf

    protected-mode no

    sentinel monitor mymaster slave1 6379 2  # slave1 别名,定位redis-slave1 ip

sentinel-slave2.conf

    protected-mode no  #是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码   和bind,可以开启。否   则最好关闭,设置为no。

    sentinel monitor mymaster slave2 6379 2  #Sentinel去监视一个名为mymaster的主redis实例, slave2 别名,定位redis-slave2 ip

启动sentinel服务:

# 监控redis-master节点
docker run -d -p 5000:26379 -v /vagrant/app/redis/sentinel-master.conf:/usr/local/etc/redis/sentinel.conf --link redis-master:master --name sentinel-master redis redis-server /usr/local/etc/redis/sentinel.conf --sentinel # 监控redis-slave1节点
docker run -d -p 5001:26379 -v /vagrant/app/redis/sentinel-slave1.conf:/usr/local/etc/redis/sentinel.conf --link redis-slave1:slave1 --name sentinel-slave1 redis redis-server /usr/local/etc/redis/sentinel.conf --sentinel # 监控redis-slave2节点
docker run -d -p 5002:26379 -v /vagrant/app/redis/sentinel-slave1.conf:/usr/local/etc/redis/sentinel.conf --link redis-slave2:slave2 --name sentinel-slave2 redis redis-server /usr/local/etc/redis/sentinel.conf --sentinel

sentinel 可通过主节点找到下列所有子节点,进行故障调度,为每个节点设定sentinel,相互监控,安全可靠性高。

如此实现哨兵,主从。优点,方便启动,易于调整,故障处理风险低;

redis主从,哨兵,集群的更多相关文章

  1. 【Redis学习专题】- Redis主从+哨兵集群部署

    集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.1 ...

  2. Redis主从&哨兵集群搭建

    主从集群 在搭建主从集群前,我们先把Redis安装起来: #解压Redis压缩包 [root@master lf]# tar -zxvf redis-6.2.1.tar.gz -- #安装gcc [r ...

  3. 三千字介绍Redis主从+哨兵+集群

    一.Redis持久化策略 1.RDB 每隔几分钟或者一段时间会将redis内存中的数据全量的写入到一个文件中去. 优点: 因为他是每隔一段时间的全量备份,代表了每个时间段的数据.所以适合做冷备份. R ...

  4. redis主从、集群、哨兵

    redis的主从.集群.哨兵 参考: https://blog.csdn.net/robertohuang/article/details/70741575 https://blog.csdn.net ...

  5. redis的哨兵集群,redis-cluster

    #主从同步redis主从优先1.保证数据安全,主从机器两份数据一主多从2.读写分离,缓解主库压力主redis,可读可写slave身份,只读   缺点1.手动主从切换假如主库挂了,得手动切换master ...

  6. redis:哨兵集群配置

    最少配置1主2从3哨兵 一.引言 上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...

  7. 走进Redis:哨兵集群

    为什么需要哨兵 在 Redis 的主从库模式中,如果从库发生了故障,用户的操作是可以继续进行的,因为写操作是只在主库中进行的.那么,如果主库发生了故障,用户的操作将会收到影响.这时候可能会需要选择一个 ...

  8. Redis Sentinel哨兵集群

    Redis Sentinel(哨兵集群)是一种高可用的redis部署方案.在集群中的redis-master服务挂掉时,无需人为干预,即可通过哨兵集群的自我调整,实现redis服务的持续可用. 哨兵集 ...

  9. redis的哨兵集群,自动切换主从库

    Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能. 而 ...

  10. Redis高可用-主从,哨兵,集群

    主从复制 Master-Slave主从概念 同时运行多个redis服务端,其中一个作为主(master),其他的一个或多个作为从(slave),主从之间通过网络进行通讯,slave通过复制master ...

随机推荐

  1. 【开源组件】FastDFS极速入门与安装

    FastDFS是一个开源的轻量级的分布式文件系统,为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供 ...

  2. ubuntu关闭时间同步与centos更改时间

    环境:ubuntu 源于一次项目需要修改系统时间,但是每次修改后又被同步回网络时间,找了好久发现是这个原因: NTP即Network Time Protocol(网络时间协议),是一个互联网协议,用于 ...

  3. [中英对照]Why Redis beats Memcached for caching | 在cache化方面,为何Redis胜过Memcached?

    对Memcached和Redis有兴趣的同学不妨花几分钟读一读本文,否则请飘过. Why Redis beats Memcached for caching | 在cache化方面,为何Redis胜过 ...

  4. Upgrading WebLogic Application Environments --官方文档

    http://docs.oracle.com/cd/E13179_01/common/docs92/upgrade/dirstruct.html WebLogic Domain Directory S ...

  5. Python制作回合制手游外挂简单教程(下)

    引入: 接着上篇的博文,今天我们讲如何实现助人为乐 前期准备: 如何获取图片中指定文字的坐标? 我的思路是截取一个小区域,再根据小区域左上角的坐标获取中央坐标 例如: 获取坐上角的x和y坐标,测量x到 ...

  6. 第一章:初识PHP

    Web程序工作原理介绍? 工作方式? 浏览器首先向Web服务器发出请求,Web服务器对请求做出响应,将响应数据发送给客户端浏览器,通常是一个HTML文件,然后通过浏览器把HTML文件信息显示在屏幕上. ...

  7. 如鹏网学习笔记(九)JavaScript

    JavaScript笔记 一.JavaScript简介 1,JavaScript是一种计算机编程语言,可以像等其他编程语言那样定义变量,执行循环等. 2,JavaScript代码主要执行在浏览器上,为 ...

  8. 使用gunzip、tar、rar、(zip压缩和unzip解压缩)

    ---------------------20171119------------------------------ 解压gz后缀 使用gunzip filename.gz ------------ ...

  9. 给<input>文本框添加灰色提示文字

    value="你的提示文字" onFocus="if(value==defaultValue){value='';this.style.color='#000'}&quo ...

  10. python(九):迭代器与生成器

    一.Python的迭代协议 迭代器是访问集合内元素的一种方式.它只能依次访问集合内元素.其特点是惰性执行. collection.abc的迭代协议提供了两个概念:可迭代对象和迭代器.可迭代对象:必须具 ...