redis主从复制简介:
1 2 3 |
mysql是从库拉取主库的binlog实现主从复制 redis是主库推送到从库rdb文件实现主从复制 |
redis主从复制原理:
1 2 3 4 5 6 7 8 9 10 11 |
1)从库向主库发送sync命令。 2)主库接收到sync命令会调用bgsave命令,创建一个RDB文件,并使用缓冲区记录接下来执行的所有写命令 3)当主库执行完bgsave命令时,它会向从库发送RDB文件,而从库则接收RDB文件并载入RDB文件 4)主库将缓冲区储存的所有写命令发送给从库执行 -------------------------------------------------------------------- 1)在开启主从复制的时候,使用的RDB方式同步主从数据的 2)同步开始后,主库通过传送命令到从库的方式实现主从复制 3)2.8版本以后实现psync的机制,实现断线重连 |
redis主从复制实战
准备环境
主机 | 内网 | 外网 | 身份 |
---|---|---|---|
redis01 | 172.16.1.81 | 10.0.0.81 | master |
redis02 | 172.16.1.82 | 10.0.0.82 | slave |
redis03 | 172.16.1.83 | 10.0.0.83 | slave |
配置hosts文件:(所有节点)
1 2 3 4 5 |
cat >>/etc/hosts<<EOF 172.16.1.81 redis01 172.16.1.82 redis02 172.16.1.83 redis03 EOF |
配置:(所有节点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
[root@redis01 ~]# vim /usr/local/redis/etc/redis.conf daemonize yes #后台运行 port 6379 #指定监听端口 logfile /usr/local/redis/data/redis_6379.log #日志文件存放路径 bind 172.16.1.81 127.0.0.1 #指定监听两个IP地址 requirepass 1 #指定认证密码为redhat dir /usr/local/redis/data #持久化数据存放目录 dbfilename dump.rdb #RBD持久化数据文件 save 900 1 #15分钟内有一个数据变化就save持久化 save 300 10 #5分钟内有10个数据变化就save持久化 save 60 10000 #60秒内有10000个数据变化就save持久化 appendonly yes #打开AOF持久化功能 appendfsync always #每执行一个写操作语句,就会持久化一次 [root@redis02 ~]# vim /usr/local/redis/etc/redis.conf daemonize yes port 6379 logfile /usr/local/redis/data/redis_6379.log bind 172.16.1.82 127.0.0.1 requirepass 1 dir /usr/local/redis/data dbfilename dump.rdb save 900 1 save 300 10 save 60 10000 appendonly yes appendfsync always [root@redis03 ~]# vim /usr/local/redis/etc/redis.conf daemonize yes port 6379 logfile /usr/local/redis/data/redis_6379.log bind 172.16.1.83 127.0.0.1 requirepass 1 dir /usr/local/redis/data dbfilename dump.rdb save 900 1 save 300 10 save 60 10000 appendonly yes appendfsync always |
创建工作目录 (所有节点)
1 2 3 4 |
[root@redis01 ~]# mkdir /usr/local/redis/data [root@redis02 ~]# mkdir /usr/local/redis/data [root@redis03 ~]# mkdir /usr/local/redis/data |
配置从库master认证:(所有节点)
1 2 3 4 5 6 7 8 9 10 |
#以下参数是告诉从库,主库的认证密码是1 [root@redis02 ~]# vim /usr/local/redis/etc/redis.conf ······ masterauth 1 [root@redis02 ~]# vim /usr/local/redis/etc/redis.conf ······ masterauth 1 [root@redis03 ~]# vim /usr/local/redis/etc/redis.conf ······ masterauth 1 |
开启主从:(redis-02节点 与 redis-03节点)
1 2 3 4 5 6 7 |
# redis-02执行 172.16.1.82:6379> slaveof 172.16.1.81 6379 # redis-03执行 172.16.1.82:6379> slaveof 172.16.1.81 6379 |
重启所有节点的Redis服务
查看主从状态:(redis-01节点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@redis01 ~]# redis-cli -h 172.16.1.81 -p 6379 -a redhat 10.0.0.81:6379> INFO replication # Replication role:master connected_slaves:2 slave0:ip=172.16.1.83,port=6379,state=online,offset=4676,lag=0 slave1:ip=172.1.16.82,port=6379,state=online,offset=4676,lag=0 master_replid:f84b9e7ef358901545e70a345b431268785aa75d master_replid2:0000000000000000000000000000000000000000 master_repl_offset:4676 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:4676 |
数据同步测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#redis01节点 [root@redis01 ~]# redis-cli -h 172.16.1.81 -p 6379 -a 123 set name clf Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. OK #redis02节点查看 [root@redis02 ~]# redis-cli -h 172.16.1.82 -p 6379 -a 123 get name Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. "clf" #redis03节点查看 [root@redis03 ~]# redis-cli -h 172.16.1.82 -p 6379 -a 123 get name Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. "clf" |
关闭复制:
1 |
slave no one |