一、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 web项目配置https访问

      转载: tomcat6配置:  1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源  2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址  如果只是加 ...

  2. javascript的一些在IE下不支持的函数小结

    // ============ isArray ===============// // isArray function isArray(value){ return Object.prototyp ...

  3. HDU 5877 Weak Pair(树状数组+dfs+离散化)

    http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意: 给出一棵树,每个顶点都有权值,现在要你找出满足要求的点对(u,v)数,u是v的祖先并且a[u]*a ...

  4. maven+nexus配置本地私有仓库

    以下是settting.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <settings> ...

  5. 【Python】【fmt】

      [练习]    #练习1:format print(format(3.44444,'.3e')) #3.444e+00 #练习2:findall() & finditer()import ...

  6. SetCommMask

    SetCommMask           用途:设置串口通信事件   原型:BOOL SetCommMask(HANDLE hFile, //标识通信端口的句柄   DWORD dwEvtMask ...

  7. 《剑指offer》第十四题(剪绳子)

    // 面试题:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1]* ...

  8. Codeforces D - GCD of Polynomials

    D - GCD of Polynomials 逆推,根据(i-2)次多项f(i-2)式和(i-1)次多项式f(i-1)推出i次多项式f(i) f(i)=f(i-1)*x+f(i-2) 样例已经给出0次 ...

  9. C++STL3--queue

    C++STL3--queue 一.心得 STL的这些东西用法都差不多 二.介绍 queue数据结构中的队列 priority_queue优先队列,插入进去的元素都会从大到小排好序 PS:在priori ...

  10. tomcat日志切割和定期删除

    tomcat日志切割和定期删除 在tomcat的软件环境中,如果我们任由日志文件无限增长,总有一天会将磁盘占满的(废话).特别是在日志文件增长速度很快的一些情况下,按日志切割日志文件并删除,就是一件很 ...