一、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. 解决 Ubuntu 14.04 图形界面无法正常显示 问题

    参考: ubuntu清除系统缓存的方法 apt-get(四) 每天一个linux命令(33):df 命令 Ubuntu server 12.10 /dev/sda1 disk full 解决 Ubun ...

  2. java 从List中随机取出一个元素

    java 从List中随机取出一个元素 List<Integer> list = new ArrayList<>(); Random random = new Random() ...

  3. 新开发项目Jacoco代码覆盖率

    一般只有新的项目才会去用JaCoCo工具看一下代码覆盖率, 一来看看测试有没有漏的测试用例 二来看看开发有没有留下冗余的代码 新开发项目Jacoco代码覆盖率后端接口打成jar包,进行启动 #exec ...

  4. Mysql tinyint长度为1时在java中被转化成boolean型

    MySql 中的tinyint(1)的使用 在MySql中如何定义像Java中类型的Boolean类型数据..其实,mysql中 是没有直接定义成Boolean这种数据类型. 它只能定义成 tinyi ...

  5. 电脑上装两个JDK的方法

    在window操作系统上配置两个JDK方便开发以及新JDK的学习 我的机子上的JDk环境为1.8 在cmd中执行:java -version 查看JDK版本 安装方法 在系统变量中配置中设置JAVA_ ...

  6. Spark与Flink大数据处理引擎对比分析!

    大数据技术正飞速地发展着,催生出一代又一代快速便捷的大数据处理引擎,无论是Hadoop.Storm,还是后来的Spark.Flink.然而,毕竟没有哪一个框架可以完全支持所有的应用场景,也就说明不可能 ...

  7. Unity 4.x 资源打包

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; pu ...

  8. 3-18 关于namespace,双冒号::的用法; SelfYield.

    关于namespace,双冒号::的用法. 防止引用多个模块在一个文件/类中,有重名的对象.::可以调用类的类方法,和常量. class Foo   BAR = "hello"   ...

  9. Android Webview 和Javascript交互,实现Android和JavaScript相互调用

    在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好 ...

  10. 用Javascript 实现倒计时

    用Javascript 实现倒计时<!DOCTYPE html> <html lang="en"> <head> <meta charse ...