Redis 的主从复制配置

Redis 的主从复制配置首先要理解Redis主从结构的特性。html


  1. Redis master能够链接多个Slave,一个Slave能够拥有master身份被多个slave连接,也就是说,redis每一个节点的角色能够同时是master和slave。java

  2. redis 复制在 slave 这一端也是非阻塞的。在配置文件里面有 slave-serve-stale-data 这一项,若是它为 yes ,slave 在执行同步时,它可使用老版本的数据来处理查询请求,若是是 no ,slave 将返回一个错误。在完成同步后,slave 须要删除老数据,加载新数据,在这个阶段,slave 会阻止链接进来。redis

  3. 使用复制能够避免 master 由于须要把所有的数据集写入磁盘而形成的开销,所以能够把 master 中 save 配置项所有注释掉,不让它进行保存,而后配置 slave ,让 slave 保存。虽然有这个特性,可是咱们好像通常不这么作。数据库


关于基本配置项工具

redis.conf配置详细解析

redis配置认证密码

daemonize no 
说明:是否把redis-server启动在后台,默认是“否”。若改为yes,会生成一个pid文件。
pidfile /var/run/redis.pid
说明:redis-server的pid文件。
port 6379
说明:redis-server的端口号
dbfilename dump.rdb
说明:数据库文件的位置,最好添加绝对路径,若不添加时在启动用户的home目录下。
loglevel verbose
说明:日志级别,有四种,debug,verbose,notice,warning。
logfile stdout
说明:日志的输出文件,默认是标准输出。例如:logfile /tmp/redis.log


咱们这里使用进程来模拟上台主机
ui

主机1:127.0.0.1:9001 (master)spa

主机2:127.0.0.1:9002 (slave1).net

主机3:127.0.0.1:9003 (slave2)命令行

打开每一个redis的redis.conf,主要修改以下几项,如下除了端口不一致,其余的都相同debug

port 9001   --端口
min-slaves-to-write 3 --用于报告master被报告超过3个slave报告宕机时触发sentinel去调整集群
masterauth  pass123456789  --密码,在主从复制中开启密码
requirepass pass123456789  --master密码,配置成同样的,便于管理
slave-read-only no         --设置为no,不然只能单向复制(master->slave)

而后按照命令启动各自的redis-server

redis-server redis.conf

接下来使用终端命令行工具,登陆启动每一个redis-server

redis-cli -h 127.0.0.1 -p 9001 -a pass123456789
redis-cli -h 127.0.0.1 -p 9002 -a pass123456789
redis-cli -h 127.0.0.1 -p 9003 -a pass123456789

而后让9001做为9002和9003的master

在9002和9003客户端执行

slaveof 127.0.0.1 9001

经过9001验证命令

set testKey1 '1234'

而后再9002,9003执行以下命令,获得的值和 “1234”同样,那么意味着配置成功

get testKey1


但问题来了,master能够闲slave写数据,但slave写的数据没法同步到master,目前只实现了单向同步,对于双向同步,如何解决呢?

答案是让master委屈求全和slave作朋友,做为一种平等的关系,这种关系的判断是,双方你情我愿同样,互相是对方的slave,同时也是对方的master。

咱们让master成为slave的朋友,很简单.

master执行以下命令

exit
redis-cli -h 127.0.0.1 -p 9001 -a pass123456789
slaveof 127.0.0.1 9002
slaveof 127.0.0.1 9003

之因此重启master,主要问题是master可能会遭遇一些意想不到的问题。


以上即可实现主从双向同步复制。

相关文章
相关标签/搜索