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. 用python做一个烟花show

    烟花效果如图(截了几个时刻的静态图): 源代码如下: # -*- coding: utf-8 -*- # Nola import tkinter as tk from PIL import Image ...

  2. tensorFlow 零散知识

    收集一些碰到的关于细节的函数在这里记录下 1.tf.flags.DEFINE_xxx() 读别人家的代码的时候经常看到这个,结果两三天不看居然忘记了,这脑子绝对上锈了,决定记下来免得老是查来查去的.. ...

  3. Java语法基础学习DaySixteen(多线程)

    一.多线程的创建 1.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...

  4. Alpha 冲刺11——总结

    拖鞋旅游队团队事后诸葛亮会议 前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10054510.html 时间:2018-12-1 20:00 地 ...

  5. JAVA8之函数式接口

    由于JDK8已经发布一段时间了,也开始逐渐稳定,未来使用JAVA语言开发的系统会逐渐升级到JDK8,因为为了以后工作需要,我们有必要了解JAVA8的一些新的特性.JAVA8相对JAVA7最重要的一个突 ...

  6. IntelliJ IDEA 如何生成时序图?

    进入扩展程序安装 File > Settings > Plugins > Browse Repositories 搜索 SequenceDiagram,点击右边 Install 安装 ...

  7. SLEUTH 城市扩张模型

    3.19号准备试着运行一下SLEUTH模型,但是好不容易没报错出了一个test的结果,我就再也没看过了,导致现在我竟然差不多忘记当时怎么搞出来的了... 这也提醒我了,,,以后解决一个什么东西一定要立 ...

  8. cocos2dx自定义事件类封装

    GameEvent.h: #pragma once #include "cocos2d.h" USING_NS_CC; class GameEvent { public: //封装 ...

  9. cmd运行jar

    https://blog.csdn.net/lemon_tree12138/article/details/44081909 https://www.cnblogs.com/LanTianYou/p/ ...

  10. NumPy 基础用法

    NumPy 是高性能科学计算和数据分析的基础包. 它是 pandas 等其他各种工具的基础. 主要功能: ndarray 一个多维数组结构, 高效且节省空间 无需循环对整组数据进行快速运算的数学函数 ...