网站制作广告,网站免费关键词如何做,河南省建设厅一体化平台,甘肃省最新消息今天redis复制本文是我们学院课程的一部分#xff0c;标题为Redis NoSQL键值存储 。 这是Redis的速成课程。 您将学习如何安装Redis和启动服务器。 此外#xff0c;您还会在Redis命令行上乱七八糟。 接下来是更高级的主题#xff0c;例如复制#xff0c;分片和集群#xff0c… redis复制 本文是我们学院课程的一部分标题为Redis NoSQL键值存储 。 这是Redis的速成课程。 您将学习如何安装Redis和启动服务器。 此外您还会在Redis命令行上乱七八糟。 接下来是更高级的主题例如复制分片和集群同时还介绍了Redis与Spring Data的集成。 在这里查看 目录 1.简介 2.在Redis中复制 3.在Redis中配置基本复制 4.验证复制是否有效 5.在运行时配置复制 6.高级复制配置 1.简介 复制是任何面向数据的解决方案的一个非常重要的功能复杂的关系数据库或简单的键/值存储。 复制使您可以将数据的许多副本分布在许多节点服务器数据中心和/或地理区域中。 复制是可靠的可水平扩展和容错的系统的基础一旦一个数据节点服务器发生故障另一个就准备好服务具有故障节点的大部分最新数据的查询或请求。 更不用说能够在主节点和从节点只读副本之间有效地拆分写入和读取操作的功能。 一些有趣的软件系统模式基于此类决策例如CQRS 命令查询责任分离和复制缓存解决方案。 基本上有两个主要的复制类 Master – Master 或Active – Active 和 Master – Slave 或Active – Passive 。 尽管Master – Master是自动故障转移的最佳选择但它非常复杂只有很少的数据解决方案。 在撰写本文时Redis 2.8.4仅支持Master – Slave复制。 2.在Redis中复制 本部分的内容基于出色的Redis文档[1] 。 如前所述Redis支持Master – Slave复制该复制允许从服务器成为主服务器的精确副本。 有关Redis复制的一些事实 Redis使用异步复制 Redis主服务器可以有多个从服务器 Redis从站可以接受来自其他从站的连接级联复制 Redis复制在主服务器端无阻塞当一个或多个从服务器执行初始同步时主服务器将继续处理查询 可以将Redis复制配置为在从属端无阻塞在从属端执行初始同步时它可以使用旧版本的数据集处理查询请参阅Advanced Replication Configuration slave-serve-stale-data设置 在几个建议的用例中Redis复制可能非常方便。 首先它可以用于具有多个从属服务器以进行只读查询或仅用于数据冗余。 其次也可以使用复制来避免主服务器将整个数据集写入磁盘从服务器可以配置为定期这样做。 另外Redis 2.8中最近的一项非常重要的增强功能是主服务器和从服务器通常能够继续复制过程而无需在复制链接断开后进行完全重新同步。 实际上这意味着如果在主服务器和从服务器之间发生网络分区则从服务器可以稍后通过获取丢失的更改集而不是整个数据集来追赶主服务器。 3.在Redis中配置基本复制 从站或副本配置非常简单基本形式只需要在redis.conf文件中设置单个参数slaveof 主IP地址和端口。 值得一提的是默认情况下Redis从站以只读模式运行。 此行为由配置文件redis.conf的slave-read-only选项redis.conf 可以在从属运行时使用CONFIG SET命令更改请参考本教程的第2部分 Redis命令–使用Redis命令行 。 只读从站将拒绝所有写命令。 反过来非只读从设备将接受写命令。 请注意以这种方式写入从站的数据是短暂的当从站和主站重新同步或重新启动从站时这些数据将消失。 为了在实践中了解Redis复制配置有多么容易我们将配置一个主服务器和两个从属服务器副本。 一个从属服务器副本将具有默认的只读模式在下面的图片中用绿色标记而另一个从属服务器副本将被配置为支持写操作以便我们可以实际看到发生了什么。 图1. Redis主从拓扑 对于主服务器和从服务器我们将使用Redis发行版中的配置模板redis.conf请参阅本教程的第1部分 Redis安装–如何安装Redis 。 对于master 只需将redis.conf复制到redis-master.conf cp redis.conf redis-master.conf 并使用以下配置启动Redis服务器 redis-server redis-master.conf 图2. Redis主服务器启动 对于slave副本1只需将redis.conf复制到redis-slave1.conf cp redis.conf redis-slave1.conf 并将以下配置设置添加到redis-slave1.conf 我们假设Redis master的主机名是master slaveof master 6379 然后使用此配置启动Redis服务器将默认端口覆盖为6380 redis-server redis-slave1.conf --port 6380 启动后从站副本立即与主站同步如下图所示。 图3. Redis从站副本1已启动默认情况下处于只读模式并立即与master同步 对于slave副本2只需将redis.conf复制到redis-slave2.conf cp redis.conf redis-slave2.conf 并将以下配置设置添加到redis-slave2.conf 我们假设Redis master的主机名是master slaveof master 6379 将slave-read-only从yes 默认更改为no 从而有效地允许写入。 slave-read-only no 最后使用此配置启动Redis服务器将默认端口替换为6381 redis-server redis-slave2.conf --port 6381 启动后从站副本立即与主站同步如下图所示。 图4. Redis从属服务器副本2已启动读写模式并立即与主服务器同步 此时我们有了一个拓扑其中连接了一个Redis主服务器和两个Redis从属服务器副本。 4.验证复制是否有效 有两种简单的技术可以确认Redis复制是否按预期工作。 最简单的方法是在主服务器上SET一些密钥然后在每个从服务器上对此密钥发出GET命令以查看它是否已复制。 图5.在主节点上设置密钥mykey 图6a 图6b。 在两个从节点上获取密钥mykey并验证是否复制了主节点上的更改 尝试在从站1上发出任何写命令都会导致错误因为它是在只读模式下配置的如下图所示。 图7.只读从属服务器 slave1 上的SET命令返回错误 因此在从机2上发出任何写命令都是合法的但是一旦从机与主机重新同步所有这些临时数据都将消失。 图8.接受读写从设备 slave2 上的SET命令 5.在运行时配置复制 如果您已经在运行多个独立的Redis服务器则借助Redis运行时配置功能可以配置主从复制而无需重新启动其中的一个。 为了在现场进行演示我们将在端口6390上运行常规Redis实例然后使其成为另一个Redis实例 master 的从属。 因此让我们来看看独立实例 redis-server --port 6390 图9.在端口6390上运行独立Redis实例 现在让我们使用redis-cli连接到该实例并使用SLAVEOF命令 [2] 使该实例成为正在运行的master实例的从属副本。 图10.使独立Redis实例成为从属副本 实例通过使用完全同步立即与主服务器同步如下图所示。 图11.独立Redis实例成为从属副本并与主实例进行完全重新同步 也可以同时使用CONFIG SET命令 [3] 将从站的默认只读模式更改为读写模式。 图12.将slave的默认只读模式更改为读写 在任何时候都可以使用CONFIG GET命令查询当前配置设置。 以下示例检索slave-read-only设置以确保将其值更改为“ yes ”。 图13.查询从站的只读模式配置设置 6.高级复制配置 除了我们的基本示例外还有很多设置在实词场景中非常有用。 在本节中将详细介绍其中的大部分内容以指出如何使复制更加健壮。 仅当当前至少有N个从属服务器连接到Redis主服务器时才可以将其配置为接受写入命令但是无法确保从属服务器实际收到了给定的写入操作仅在不足够的情况下限制丢失写入操作的暴露窗口从站可用具有指定的秒数。 配置设置支持最小数量的从属设备 min-slaves-to-write 该min-slaves-to-write的延迟不大于最大秒数 slaves-max-lag 。 如果不满足这些条件则主机将返回一个错误并且将不接受写入。 设置 min-slaves-to-write 从站数量 描述 设置奴隶数为了执行写命令应该连接该奴隶数。 奴隶数奴隶必须处于“在线”状态。 将该值设置为0将禁用此功能。 默认值 默认情况下 min-slaves-to-write设置为0禁用功能 例 min-slaves-to-write 3 表格1 设置 min-slaves-max-lag 秒数 描述 以秒为单位设置必须小于或等于指定值的延迟。 它是根据从从站收到的最后一次ping计算得出的通常每秒发送一次。 将该值设置为0将禁用该功能。 默认值 默认情况下 min-slaves-max-lag设置为10 例 min-slaves-max-lag 10 表2 如果主服务器受密码保护使用requirepass配置指令则可以在开始复制同步过程之前告诉从服务器进行身份验证否则主服务器将拒绝从服务器请求。 设置 大师认证 描述 配置用于与主服务器进行身份验证的密码 默认值 已注释掉无身份验证 例 masterauth mysectetpassword 表3 当从属服务器失去与主服务器的连接或复制仍在进行时从属服务器可以通过两种不同的方式进行操作 如果slave-serve-stale-data设置为“ yes ”默认设置slave仍将回复客户端请求可能包含过期数据或者如果这是第一次同步则数据集可能为空 如果slave-serve-stale-data设置为“ no ”则slave将对所有类型的命令 “ INFO [4]” 和SLAVEOF [2] 进行答复并显示错误“ 与主机进行同步 ”。 设置 slave-save-stale-data是| 没有 描述 配置从站失去与主站的连接时的行为 默认值 默认情况下 slave-serve-stale-data设置为yes 例 slave-serve-stale-data是 表4 从站以预定义的间隔将PING发送到服务器。 允许使用repl_ping_slave_period选项更改此间隔。 设置 repl-ping-slave-period 秒数 描述 配置从站将PING发送到服务器的频率 默认值 默认情况下 repl-ping-slave-period设置为10 例 repl-ping-slave-period 10 表5 可以配置主服务器和从服务器的复制超时从服务器的角度来看是超时当从服务器决定主服务器不可用时从超时的角度来看超时是从主服务器的角度来看当主服务器决定从服务器的角度是超时时不可用 从站的角度来看在SYNC期间进行批量传输I / O 从机角度来看主机超时 从主机角度来看从机超时 设置 repl-timeout 秒数 描述 配置复制超时。 重要的是要确保该值大于为repl-ping-slave-period指定的值否则每当主机和从机之间的通信量较低时都会检测到超时。 默认值 默认情况下 repl-timeout设置为60 例 repl-timeout 60 表6 出于复制目的Redis通过使用repl-disable-tcp-nodelay选项支持一些底层TCP协议调整。 如果将其设置为“ yes ”则Redis服务器将使用较少数量的TCP数据包和较少带宽将数据发送到从属服务器。 但这会增加数据显示在从属端的延迟对于使用默认配置的Linux内核此延迟最多为40毫秒。 激活此设置在非常繁忙的流量条件下或当主从之间的距离很远时可能会很有用。 默认情况下它设置为“ no ”这意味着将减少数据出现在从属端的延迟但是将使用更多带宽进行复制。 设置 repl-disable-tcp-nodelay是| 没有 描述 SYNC后在从属套接字上禁用/启用TCP_NODELAY 默认值 默认情况下 repl-disable-tcp-nodelay设置为“ no ”针对低延迟进行了优化 例 repl-disable-tcp-nodelay否 表7 有两个配置参数可帮助主服务器管理从属断开连接和部分复制复制积压大小和积压缓冲区生存时间。 待办事项是一个缓冲区当从站断开连接一段时间后该缓冲区会累积从站数据因此当从站要再次重新连接时通常不需要完全重新同步但是部分重新同步就足够了只需将部分数据传递给从站即可断开连接时错过。 复制积压最大从服务器可以断开连接的时间越长以后就可以执行部分重新同步。 仅当连接了至少一个从站时才分配积压。 设置 repl-backlog-size 描述 设置复制积压大小 默认值 默认情况下 repl-backlog-size is set to “ 1mb ” 例 repl-backlog-size 1mb 表8 主机在一段时间内不再连接从机后积压的订单将被释放。 repl-backlog-ttl选项配置从释放最后一个从属服务器开始到释放待办事项缓冲区所需的秒数。 设置 repl-backlog-ttl 秒数 描述 设置积压缓冲区的生存时间然后再释放它。 值为0表示从不释放积压。 默认值 默认情况下 repl-backlog-ttl设置为“ 3600 ” 例 repl-backlog-ttl 3600 表9 最后一个非常有趣的设置即为Redis Sentinel [5] 使用的从站副本分配优先级以便在主站无法正常工作时选择要升级为主站的从站。 具有较低优先级编号的从属服务器更适合提升例如如果有三个具有优先级10、100和25的从属服务器Redis Sentinel [5] 将选择一个具有优先级10最低的的从属服务器。 但是特殊优先级0表示从属服务器无法执行主机角色因此Redis Sentinel [5] 永远不会选择优先级为0的从属服务器进行升级。 设置 从属优先级 数字 描述 从属优先级是Redis在INFO输出中发布的整数。 默认值 默认情况下 slave-priority设置为100 例 slave-priority 100 表10 Redis Sentinel [5] 将在本教程的后面进行讨论。 [1] http://redis.io/topics/replication [2] http://redis.io/commands/slaveof [3] http://redis.io/commands/config-set [4] http://redis.io/commands/info [5] http://redis.io/topics/sentinel 翻译自: https://www.javacodegeeks.com/2015/09/redis-replication.htmlredis复制