1、安装从服务器
a)、找到redis实例,直接复制一份出来,如下图
b)、修改从库端口号,打开从库文件夹找到redis.windows.conf和redis.windows-service.conf文件,修改端口
修改完成之后,cd到从库安装目录,使用cmd就可以连接从库了。
但是这也样每次都需要cd到文件夹进行启动,需要设置成服务,命令如下:
redis-server --service-install redis.windows.conf --maxmemory 200m --service-name redis6380
2、配置主从
a)、可以使用 SLAVEOF 命令, master 会开启一个跟 slave 间的同步,如果当前从服务器已经依赖了其他主服务器,那么会丢失掉旧主服务器的数据,对新主服务器进行数据同步, 如果想把从服务器升级为主服务器,使用SLAVEOF NO ONE就可以把从服务器升级成主服务器,这个命令不会丢失掉以前主从同步的数据。
b)、配置永久复制
打开redis.windows.conf文件,找到# slaveof <masterip> <masterport>这个地方,添加slaveof ip地址 端口
测试
3、主从同步的工作原理
每一个 Redis master 都有一个 replication ID :这是一个较大的伪随机字符串,标记了一个给定的数据集。每个 master 也持有一个偏移量,master 将自己产生的复制流发送给 slave 时,发送多少个字节的数据,自身的偏移量就会增加多少,目的是当有新的操作修改自己的数据集时,它可以以此更新 slave 的状态。复制偏移量即使在没有一个 slave 连接到 master 时,也会自增,所以基本上每一对给定的
Replication ID, offset
都会标识一个 master 数据集的确切版本。
当 slave 连接到 master 时,它们使用 PSYNC 命令来发送它们记录的旧的 master replication ID 和它们至今为止处理的偏移量。通过这种方式, master 能够仅发送 slave 所需的增量部分。但是如果 master 的缓冲区中没有足够的命令积压缓冲记录,或者如果 slave 引用了不再知道的历史记录(replication ID),则会转而进行一个全量重同步:在这种情况下, slave 会得到一个完整的数据集副本,从头开始。
无需磁盘参与的复制
正常情况下,一个全量重同步要求在磁盘上创建一个 RDB 文件,然后将它从磁盘加载进内存,然后 slave以此进行数据同步。
如果磁盘性能很低的话,这对 master 是一个压力很大的操作。Redis 2.8.18 是第一个支持无磁盘复制的版本。在此设置中,子进程直接发送 RDB 文件给 slave,无需使用磁盘作为中间储存介质。
无磁盘复制可以使用 repl-diskless-sync 配置参数。repl-diskless-sync-delay 参数可以延迟启动数据传输
安全性问题
如果开启了主从复制,一定要开启主从服务器的持久化,如果不开启持久化并且主服务器又是配置的默认自动启动,那么当主服务器挂了,然后在重新启动主服务器的时候,因为没有配置持久化,那么这个时候主服务器就是空数据集合,这个时候从服务器去复制主服务器的数据,发现主服务器是空的,那么会销毁从服务器自身的数据。这是非常危险的。所以如果没有开启持久化,那么自动启动这项服务应该要禁用