1、主从数据库配置

为master数据库添加slave数据库只需要在从数据库的配置中添加配置:

slaveof 主数据库地址 主数据库端口

当然,也可以通过命令:

redis-server --port  --slaveof 主数据库地址 主数据库端口

可以通过命令info replication查看相关的信息:

> info replication
# Replication
role:master
connected_slaves:
master_replid:971c47ba6a01c3e1362f626683f4e2391793accb
master_replid2:
master_repl_offset:
second_repl_offset:-
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:

当主数据库修改键值的时候,修改的数据自动同步到从数据库(从数据库默认不允许进行写操作)。

2、同步命令sync/psync

从数据库可以发送命令sync和psync命令向主数据库请求数据同步,其中psync支持增量复制。
主从数据库的配置意义在于,可以通过复制实现读写分离,只有需要写的时候才需要主数据库进行操作,而读数据的压力分摊到从数据库中,为此,从数据库需要和主数据库保持一定程度上的一致性,当从数据库因为某些原因与主数据库断了连接,则两者数据可能会不一致,因此redis通过下面的配置来处理此问题:

min-slaves-to-write
min-slaves-max-lag 

min-slaves-to-wrire 3表示只有当3个或者3个以上的从数据库连接到主数据库时,主数据库才是可写的;而min-slaves-max-lag 10表示允许从数据库与主数据库断开连接的时间,即断开10s内仍认为与主数据库处于连接状态。

3、一致性

当从数据库崩溃等异常导致主从数据库不一致时,只需要重启从数据库,发送同步数据请求即可。

当主数据库崩溃等异常导致主从数据库不一致时,需要在从数据库中执行slaveof no one,将从数据库升级为主数据,再将原主数据库变为从数据库进行数据同步操作。

强烈不推荐在主数据库崩溃的情况下重启主数据库,否则重启后主数据库的数据为空,再同步到从数据库后,从数据库也空了,那么从数据库的数据持久化就没意义了。

4、无硬盘复制与增量复制

主从数据库主要通过RDB快照文件进行数据同步,但是对于某些硬盘性能较差的服务器来说,在进行数据同步的过程中可能会因数据同步降低服务器的性能,因此redis推出了无硬盘复制的功能,即生成RDB文件不保存在硬盘中,而是直接通过网络传输给从数据库,开启该功能的配置是:

repl-diskless-sync yes

增量同步是基于积压队列与命令的偏移量来实现的,具体的原理不详细说明,此处记下相关的配置:

repl-backlog-size 调整积压队列的大小,积压队列越大,允许主从数据库断线时间越长。
repl-backlog-ttl 当所有从数据库与主数据库断开连接和,经过多久时间可以释放积压队列的内存空间,默认时1小时。

5、配置哨兵

哨兵主要作用有两个:

1)监控主从数据库是否正常运行;

2)在主数据库故障时,自动将从数据库升级成主数据库。

添加哨兵的方法如下:

建立一个配置文件

sentinel monitor mymaster  

同时给予应用程序读写该文件的权限。

然后命令行输入:

/etc/redis# redis-sentinel /etc/redis/sentinel.conf

6、redis集群

根据书中内容记录下redis集群的操作,以便查阅

1)打开每个数据库节点的cluster-enabeled配置选项。

2)集群会将当前节点记录的集群状态持久化到指定文件中,该文件默认是当前工作目录下的nodes.conf文件,每个节点对应的文件必须不同,否则会启动失败,故启动节点时需要注意最后为每个节点使用不同的工作目录,或者通过cluster-config-file选项修改持久化文件的名称。

3)使用命令info cluster判断集群是否正常启用

4)使用redis提供的辅助工具redis-trib.rb来初始化集群,该脚本是由ruby编写的,故运行前需要安装ruby程序,同时执行gem install redis安装依赖包。该脚本执行命令如下:

/path/to/redis-trib.rb create --replicas  数据库地址:端口  数据库地址:端口  数据库地址:端口  数据库地址:端口............

5)集群创建完成后,可在任意一个节点客户端执行cluster nodes来获取所有节点的信息

6)加入新节点,只需向新节点发送如下命令:cluster meet ip port

新节点加入集群后,要么执行cluster replicate复制每个主数据库的数据以从数据库的形式允许,要么向集群申请插槽,以主数据库的形式运行。

将插槽分配给指定节点的命令是:cluster add slot slot1 slot2...,可以通过cluster slots查看插槽的使用情况。

7)如何使用redis-trib.rb将一个插槽从6380迁移至6381?执行

首先执行命令/path/to/redis-trib.rb reshard 127.0.0.1:6380  》询问迁移几个插槽,输入1,回车  》询问把插槽迁移到那个节点,可以通过cluster nodes获取6381的ID,输入ID回车 》询问从哪个节点移出插槽 》输入6380对应的ID,回车确认。

8)7中的操作如不借助redis-trib.rb,应该怎么做?

如向把0号插槽迁移回6380,需执行cluster setslot 插槽号 node 新节点的运行ID

9)因为cluster setslot不会连同键一起迁移,需要手工迁移键到新的节点。

手工获取某个插槽存在那些键的方法:cluster getkeysinslot 插槽号 要返回的键的数量。然后执行:

migrate 目标节点地址 目标节点端口 键名 数据库号码 超市时间 [copy][replace]

redis集群相关的更多相关文章

  1. Redis原理及集群相关知识

    读书笔记 <Redis开发与运维 > Redis使用场景 作为缓存层 减少对Mysql的压力 计数功能 比如使用原子命令incr 共享Session 设置过期时间 可以限制短信接口等调用 ...

  2. Redis 集群常见问题

    Redis集群相关问题 1:远程连接问题 远程连接保护模式下,需要做一些配置.

  3. 转 Redis集群技术及Codis实践

    转  Redis集群技术及Codis实践 转自 :http://blog.51cto.com/navyaijm/1637688 codis开源地址:https://github.com/CodisLa ...

  4. 支撑微博亿级社交平台,小白也能玩转Redis集群(实战篇)

    上篇文章<支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)>介绍了Redis集群相关原理,这篇文章将介绍Redis Cluster集群的搭建.配置,运维.扩容等具体操作 集群搭建 ...

  5. Redis 集群规范

    什么是 Redis 集群??Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现,集群可以使用的功能是普通单机 Redis 所能使用的功能的 ...

  6. Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件(原创)

    回到目录 对于redis-sentinel我在之前的文章中已经说过,它是一个仲裁者,当主master挂了后,它将在所有slave服务器中进行选举,选举的原则当然可以看它的官方文章,这与我们使用者没有什 ...

  7. 深入浅出—Redis集群的相关详解

    前言: 这篇文章主要介绍了Redis集群的相关,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 注意!要求使用的都是redis3.0以上的版本,因为3.0以上增加了red ...

  8. redis集群及相关的使用

    从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接. 1.所有的redis节点彼此互 ...

  9. Linux 下Redis集群安装部署及使用详解(在线和离线两种安装+相关错误解决方案)

    一.应用场景介绍 本文主要是介绍Redis集群在Linux环境下的安装讲解,其中主要包括在联网的Linux环境和脱机的Linux环境下是如何安装的.因为大多数时候,公司的生产环境是在内网环境下,无外网 ...

随机推荐

  1. 正确学习Linux系统的5个建议

    摘要: 最近几年Linux系统应用越来越广泛,以至于很多人开始热衷学习Linux.但是我们都是从小都是学习windows系统长大的,从windows 98到现在的windows 10,而根据学习win ...

  2. H5-移动端实现滑屏翻页-原生js/jquery

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. CodeForces - 1015 D.Walking Between Houses

    Description Natasha is planning an expedition to Mars for nn people. One of the important tasks is t ...

  4. servlet运行“/*”引起的java.lang.StackOverflowError

    <servlet> <servlet-name>login</servlet-name> <servlet-class>com.jd.login.UI. ...

  5. error ...项目路径 \node_modules\chromedriver: Command failed.

    当你拿到完整的vue项目代码,像 node_modules 整个文件夹不可能提交到svn或者github的, 所以怎么自己安装整个项目所需要的一些依赖呢, 前提是你全局安装了node,才能使用nom命 ...

  6. Is It Always a Good Idea to Reach Outside Your Comfort Zone?

    Learning to stretch outside your comfort zone is critical for learning and growing, advancing in you ...

  7. Van Emde Boas Tree

    van Emde Boas trees 支持所有优先级优先级队列的操作,并且巧妙的是它对于SEARCH, INSERT,DELETE,MINIMUM,MAXMUN,SUCCESSOR,和PREDECE ...

  8. Python 判断是否可以转化为浮点数及其他数字类型

    Python中出现ValueError: could not convert string to float:应该怎么处理 import sys import math # 判断是否为浮点数 def ...

  9. 微信小程序用setData给数组对象赋值

    假如现在要给数组marker中的对象属性赋值 data: { marker: [ { latitude: ' ' , longitude: ' ' } ] },   在方法中的写法为   fetchJ ...

  10. MarkDown学习——基础用法

    目录 MarkDown开发版本MD2All基础用法 此处有代码<a id="top"></a>作为页内锚点 此处是用自动生成的目录 MarkDown是什么M ...