一、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. 通过java代码对kylin进行cube build

    转:http://www.cnblogs.com/hark0623/p/5580632.html 通常是用于增量 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...

  2. 【Coursera】Seventh Week

    Application Layer:Use the services of the TCP layer Quick Review Link Layer(Ethernet):gets the data ...

  3. 用python生成器实现杨辉三角

    先看杨辉三角的形态: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 上学的时候大多是用c语言的两层for循环在实现,现在我们尝试用生成器来实现. 先说思路:我 ...

  4. 查找SQL Server 自增ID值不连续记录

    在很多的时候,我们会在数据库的表中设置一个字段:ID,这个ID是一个IDENTITY,也就是说这是一个自增ID.当并发量很大并且这个字段不是主键的时候,就有可能会让这个值重复:或者在某些情况(例如插入 ...

  5. django用包来组织模型

    在我们使用python manage.py startapp xxx命令创建新的应用时,Django会自动帮我们建立一个应用的基本文件组织结构,其中就包括一个models.py文件.通常,我们把当前应 ...

  6. Java成神之路技术整理

    关于 Java 的技术干货,从以下几个方面汇总. Java 基础篇 Java 集合篇 Java 多线程篇 Java JVM篇 Java 进阶篇 Java 新特性篇 Java 工具篇 Java 书籍篇 ...

  7. php 邮件发送利器 PHPMailer

    php 自带的邮件发送函数已经弱到不能用了. PHPMailer非常的强大. 绝对是php里必须使用的程序. 下载地址: https://github.com/Synchro/PHPMailer 只要 ...

  8. 查询ORACLE存储关联表

    SELECT DISTINCT * FROM user_sourceWHERE TYPE = 'PROCEDURE'AND upper(text) LIKE '%PS_KL_ABS_002_DATA% ...

  9. English trip -- VC(情景课)5 Around Town

     Around Town  城市周围 Talk about the picture 看图说话 sentences Where are you? I'm in the Meten classroom. ...

  10. os.mkdir()和os.path.join()的区别

    os.path.join("D:\","test.txt")结果是D:\test.txt,并且在我们往里面写东西,然后保存,在这个目录下会生成这个文件,但是如果 ...