一、redis的简介

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型
支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排
序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文
件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布
记录。同步对读取操作的可扩展性和数据冗余很有帮助。

二、redis的安装和部署

系统: redhat 6.5

server1  redis

server2  redis

(一)redis的安装

1、在server1、2上安装redis服务

--->  tar  zxf  redis-4.0.8.tar.gz     # 解包

--->  cd  redis-4.0.9

--->  yum  install -y gcc              # 先安装gcc依赖包

--->  make      # 此时会出现如下错误

解决方法: 使用命令: make MALLOC=lib

--->  make install           # 安装 (当在src中执行make test后结果如下。不执行也可以)

--->  cd  /root/redis-4.0.9/utils

--->  ./install_server.sh              # 执行redis的安装脚本。有配置,直接回车即可。

# 注意,一定要再utils目录下,否则会提示找不到。

2、检测redis是否安装成功

--->  redis-cli

--->  info

3、修改master的redis服务的监听端口

--->  vim  /etc/redis/6379.conf           # 注释6379监听的ip

--->  /etc/init.d/redis_6379  restart

--->  netstat -antlp

注释:在server2和3中只需要安装好redis,并测试即可。

(二)redis实现主从复制

1、在server1中对redis配置文件设置、redis命令行设置键值对

--->  vim  /etc/redis/6379.conf   # 关闭保护模式(注释6379监听的ip,之前做过,在此就不需要注释了)

--->  redis-server  /etc/redis/6379.conf           # 重启服务

--->  redis-cli           # 设置key-value

--->  set name  xniu

2、在server2中编辑配置文件

--->  vim  /etc/redis/6379.conf         # 设置自己的master的ip和端口号(和之前的注释端口号)

--->  /etc/inti.d/redis_6379  restart

# 然后在redis中查看在server1中设置的变量

--->  redis-cli

--->  get  name

# 此时,我们完成了redis的主从复制。

三、redis集群部署实现高可用

此时,我们使用server1、2、3构成集群。server3的redis安装配置和server2相同。

高可用原理:当一个主服务器不能正常工作时, Sentinel
会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器自动更改自己的主服务器;
当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。(redis具有监控、提醒、故障转移功能)

server1  master   (前提环境是一主两从)

server2、3  slave

1、在server1中修改sentinel.conf配置文件

--->  cd  /root/redis-4.0.8

--->  cp  sentinel.conf  /etc/redis   # 首先复制到/etc/redis目录下

--->  vim  /etc/redis/sentinel.conf

# 关闭保护模式

# 配置指示 Sentinel 去监视一个名为 mymaster 的主服务器,这个主服务器的IP为172.25.2.1,端口为6379,而将这个主服务器判断为失效至少需要2个Sentinel同意(只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)

# down-after-milliseconds 表示 Sentinel 认为服务器已经断线所需的毫秒数。在指定时间内没有返回响应,则视为下线。

--->  scp   /etc/redis/sentinel.conf   server2:/etc/redis      # 把修改好的文件复制到server2、server3中

--->  scp   /etc/redis/sentinel.conf   server3:/etc/redis

2) 三台服务器启动sentinel服务。(以server1为例。在server2和3中监控到信息和1相同)

--->  redis-sentinel  /etc/redis/sentinel.conf  # 可以监控到master和slave。

注意: +slave 表示 :一个新的从服务器已经被 Sentinel 识别并关联。此时master为172.25.2.1;salve为server2和3。

3)在master端使用info查看,也会有master、slave的信息

--->  redis-cli

--->  info

4)当我们把master中的redis宕掉之后,此时监控中,我们可以看到master切换到其它server3主机上, 而此时server2中配置文件的slaveof的值也变为server3了。

server1:

server3:(监控情况如下)

server2: slaveof的值变为172.25.2.3

四、redis集群化工具的使用

在server1中执行

1、将集群化工具的运行脚本放在第三方软件目录中

--->  cd /root/redis-4.0.2/src

--->  cp  redis-trib.rb  /usr/local/bin

--->  cd  /usr/local/bin

2、执行redis-trib.rb的时候,会出现依赖错误

--->  yum  install -y ruby

--->  yum  install -y  rubygems-1.3.7-5.el6.noarch.rpm  libyaml-0.1.3-4.el6_6.x86_64  ruby-2.2.3-1.el6.x86_64.rpm

--->  gem  install --local redis-4.0.1.gem

3、查看集群化工具是否安装成功

--->  gem  list  --local    # 此时可以看到redis

4)创建集群,并查看集群中的主从关系

--->  cd  /usr/local

--->  mkdir  cluster

--->  mkdir  cluster/700{1..6}

--->  vim  cluster/7001/redis.conf         # 在每个集群节点中添加配置文件

port 7001        # 端口号;不同目录对应相应的端口

cluster-enabled  yes

cluster-config-file  nodes.conf

cluster-node-timeout  5000

appendonly  yes

daemonize  yes    # 默认值为no,yes表示redis服务以守护模式运行

pidfile  /usr/local/cluster/7001/redis.conf     # 节点的pid所在位置 (每个节点对应相应的)

logfile  /usr/local/cluster/7001/redis.log     # 节点的log文件所在位置

--->  redis-server  redis.conf      # redis.conf是节点的配置文件

# 查看日志,查看节点的信息

--->  netstat  -antlp        # 查看端口是否打开

5)创建集群

--->  redis-trib.rb  create  --replicas  1 127.0.0.1:7001  127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

# 此时有三个master,三个slave

6)在集群中写入值,并查看

--->  redis-cli  -c  -p  7001

--->  set  name xnih

--->  get name

# 此时我们可以查询其他节点的name值

7)宕掉7001的master,然后进入集群查看(此时,依然可以查看到信息。因为宕掉7001,还有它对应的slave在提供数据) 。当把对应的slave都宕掉的话,此时就不能查询到信息。启动slave或master,数据又可以恢复。

redis的主从复制和高可用集群的更多相关文章

  1. Redis Cluster 4.0高可用集群安装、在线迁移操作记录

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  2. Redis 高可用集群

    Redis 高可用集群 Redis 的集群主从模型是一种高可用的集群架构.本章主要内容有:高可用集群的搭建,Jedis连接集群,新增集群节点,删除集群节点,其他配置补充说明. 高可用集群搭建 集群(c ...

  3. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...

  4. Redis创建高可用集群教程【Windows环境】

    模仿的过程中,加入自己的思考和理解,也会有进步和收获. 在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了. ...

  5. Redis系列(二):Redis高可用集群

    一.集群模式 Redis集群是一个由多个主从节点组成的高可用集群,它具有复制.高可用和分片等特性 二.集群部署 1.环境 3台主机分别是: 192.168.160.146 192.168.160.15 ...

  6. sentinel监控redis高可用集群(一)

    一.首先配置redis的主从同步集群. 1.主库的配置文件不用修改,从库的配置文件只需增加一行,说明主库的IP端口.如果需要验证的,也要加多一行,认证密码. slaveof 192.168.20.26 ...

  7. Redis Cluster高可用集群在线迁移操作记录【转】

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  8. Redis Cluster高可用集群在线迁移操作记录

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  9. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

随机推荐

  1. WebApi——json返回多了 k_BackingField

    产生原因: model类添加了    [System.Serializable] 解决方案: xxxxx.WebApi\App_Start\WebApiConfig.cs的Register函数中添加如 ...

  2. UVa 11729 突击战

    https://vjudge.net/problem/UVA-11729 题意:有n个部下,每个部下需要完成一项任务.第i个部下需要你话B分钟交代任务,然后立刻执行J分钟完成任务.安排交代任务顺序并计 ...

  3. 关于nohup 和 &的使用

    nohup  是 no hang up 的缩写,意思是不挂断运行,一直运行下去,永久运行下去,但是注意并没有后台运行的功能 & 是在后台运行的意思 单独使用一个命令,还不能在终端关闭的时候,让 ...

  4. SQLServer随机取记录

    SQLServer本身并没有提供随机读取记录的功能,但我们可以通过一些方法来实现这个目的.本文介绍了其中几种方法并比较了各自的优劣. 方法一:直接通过Sql语句实现,如: SELECT TOP 100 ...

  5. [原][OSG][osgBullet][osgworks][bullet]编译osgBullet尝试物理引擎

    相关网址: 类似文章:http://blog.csdn.net/lh1162810317/article/details/17475297 osgBullet官网:http://osgbullet.v ...

  6. [原][OSG]深入osg函数----SceneView::cull 函数

    参考:最长一帧 先介绍几个类: osgUtil::CullVisitor:“筛选访问器” 当我们使用它遍历场景图形的各个节点时, CullVisitor 将会对每一个遇到的节点执行场景筛选的工作,判断 ...

  7. 监控视频采集与Web直播开发全流程分析

    内容概要: 摄像头 => FFmpeg => Nginx服务器 => 浏览器 从摄像头拉取rtsp流 转码成rtmp流向推流服务器写入 利用html5播放 1.开发流程 1.1 通过 ...

  8. 丑数问题 Ugly Number

    2018-07-28 15:30:21 一.判断是否为丑数 问题描述: 问题求解: 所谓丑数,首先得是正数,然后其质数因子只包含了2,3,4,因此我们只需要对当前的数分别除2,3,4直到不能除为止. ...

  9. 慕课网Hibernate初探之一对多映射实验及总结

    慕课网Hibernate初探之一对多映射实验及总结 一.本课核心 * 1.如何在MyEclipse中使用Hibernate * 2.如何实现Hibernate中一对多的映射 * 3.如何创建Sessi ...

  10. git rm删除

    在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交: $ git add test.txt $ git commit -m "add test. ...