=================================================html
人工智能教程。零基础!通俗易懂!风趣幽默!你们能够看看是否对本身有帮助!
点击查看高清无码教程 git
=================================================github
如何学会在合适的场景使用合适的技术方案,这值得思考。web
因为本地环境的使用,因此搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基本一致!
(精读阅读本篇可能花费您15分钟,略读需5分钟左右)redis
为了使得集群在一部分节点下线或者没法与集群的大多数节点进行通信的状况下, 仍然能够正常运做, Redis 集群对节点使用了主从复制功能: 集群中的每一个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其他的 N-1 个复制品为从节点(slave)。[ 摘自 Redis 集群中的主从复制 ]数据库
那么上面是主从复制呢,简单的来讲就是一个主节点master能够拥有一个甚至多个从节点的slave,而一个slave又能够拥有多个slave,如此下去,造成了强大的多级服务器集群架构。
windows
其中主节点以写为主(可写也能够读),从节点只能读不可写入!【读写分离场景】
其中主节点写入的数据会同步(不是准实时的)到salve上,这样若是主节点出现故障,数据丢失,则能够经过salve进行恢复。【容灾恢复场景,注:由于数据不是实时同步的,可能会存在从salve恢复数据后有数据丢失问题】缓存
综上:下面是关于redis主从复制的一些特色:
1.一个master能够有多个slave
2.除了多个slave连到相同的master外,slave也能够链接其余slave造成图状结构
3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master能够继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。
4.主从复制能够用来提升系统的可伸缩性,咱们能够用多个slave 专门用于client的读请求,好比sort操做可使用slave来处理。也能够用来作简单的数据冗余
5.能够在master禁用数据持久化,只须要注释掉master 配置文件中的全部save配置,而后只在slave上配置数据持久化。
6.能够用于读写分离和容灾恢复。服务器
本次主要介绍一主二仆,和反客为主的操做,薪火相传不作介绍。哨兵模式后面专门写一篇进行介绍!网络
Redis For Windows Download
或者
Redis For Windows GitHub
解压收的目录以下图:
我本身本地修改了名称,复制后文件夹名称显示以下:
Redis-x64-3.2.100-6379 Redis-x64-3.2.100-6380 Redis-x64-3.2.100-6381
6379文件夹,不作修改!
6380文件夹,修改以下:
port 6380 # slaveof <masterip> <masterport> slaveof 127.0.0.1 6379
6381文件夹,修改以下:
port 6381 slaveof 127.0.0.1 6379
我默认你们是知道redis.xx.conf的相关配置的!若是不知道,请看:
Redis学习——redis.conf 配置文件介绍
在对应的redis文件夹下面新建
startRedisServer.bat
脚本的内容为:
@echo off redis-server.exe redis.windows.conf @pause
而后在redis文件夹同级的目录下在新建
start6379.cmd
@echo off cd Redis-x64-3.2.100-6379 startRedisServer.bat
而后6380和6381和上面操做同样,操做完成后以下图:
启动规则:先启动主节点,而后在启动从节点!
进入相应的文件夹目录,使用启动命令:
redis-server.exe
如上面图片,分别执行start6379.cmd,
start6380.cmd,start6381.cmd。
先启动Master。使用客户端登陆,查看信息如图:
而后启动6380和6381,而后能够看到:如图
在此查看6378的主从复制信息:如图
在登陆6380和6381的客户端,查看节点信息:如图
测试读写,【主节点可读可写,从节点只能读不可写】,以下图:
测试当主节点shutdown后,从节点的状态【从节点可读,从节点也不会升级为主节点】:
127.0.0.1:6381> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:15 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6381> 127.0.0.1:6381> get hello "world"
测试当主节点从新启动后,从节点的状态【从节点依然能够链接主节点】:
127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=43,lag=0 slave1:ip=127.0.0.1,port=6381,state=online,offset=43,lag=0 master_repl_offset:43 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:42 127.0.0.1:6379>
小插曲【反客为主】
测试当主节点shutdown后,使用slaveof no one 是的6380成为主节点,可是也只是主节点,没有任何从节点!:如图
127.0.0.1:6381> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_repl_offset:155 master_link_down_since_seconds:jd slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6381> 127.0.0.1:6381> 127.0.0.1:6381> slave no one (error) ERR unknown command 'slave' 127.0.0.1:6381> slaveof no one OK 127.0.0.1:6381> info replication # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6381> set test 11 OK 127.0.0.1:6381> get test "11" 127.0.0.1:6381>
详细能够参考 Redis主从复制 中的内容!
当设置好slave服务器后,slave会创建和master的链接,而后发送sync命令。不管是第一次同步创建的链接仍是链接断开后的从新链接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件 后,master就发送文件给slave,slave将文件保存到磁盘上,而后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命令转发给slave。并且后续master收到的写命令都会经过开始创建的链接发送给slave。从master到slave的同步数据的命令和从 client发送的命令使用相同的协议格式。当master和slave的链接断开时slave能够自动从新创建链接。若是master同时收到多个 slave发来的同步链接命令,只会使用启动一个进程来写数据库镜像,而后发送给全部slave。
图片内容来源网络:
Redis 主从同步有两种方式(或者所两个阶段):全同步和部分同步。
主从刚刚链接的时候,进行全同步;全同步结束后,进行部分同步。固然,若是有须要,Slave 在任什么时候候均可以发起全同步。Redis 策略是,不管如何,首先会尝试进行部分同步,如不成功,要求从机进行全同步,并启动 BGSAVE……BGSAVE 结束后,传输 RDB 文件;若是成功,容许从机进行部分同步,并传输积压空间中的数据。
IO剧增
每次slave断开之后(不管是主动断开,仍是网路故障)再链接master都要将master所有dump出来rdb,在aof,即同步的过程都要从新执行一遍;因此要记住多台slave不要一下都启动起来,不然master可能IO剧增(间隔1-2分)
复制延迟
因为全部的写操做都是先在Master上操做,而后同步更新到Slave上,因此从Master同步到Slave机器有必定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增长也会使这个问题更加严重。
可用性不高
当有主节点发生异常状况,就会致使不能写入,致使业务出错![解决方法是可使用Redis-Sentinel模式,详情见系列文章第二篇]
注意:
Redis 集群不保证数据的强一致性(strong consistency)Redis 集群的一致性保证(guarantee): 在特定条件下, Redis 集群可能会丢失已经被执行过的写命令。
若是想直接使用本篇讲解使用的主从配置!我已经打包好了 点击 下载地址 进行下载!
第一篇:Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
第二篇:Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
欢迎访问个人csdn博客,咱们一同成长!
“无论作什么,只要坚持下去就会看到不同!在路上,不卑不亢!”