1.主从复制
redis配置文件redis.conf
master机器:IP 192.168.1.5 ,端口 6379
设置配置参数
daemonize yes
#bind 127.0.0.1 -::1
protected-mode no
port 6379
dbfilename "dump.rdb"
dir "/root/redis/my_redis_conf/dumpdir"
logfile "/tmp/redis6379.log"
requirepass "root"
# 下面是发开AOF持久化,不配置也没关系
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
slaver1机器:IP 192.168.1.6 ,端口 6379
设置配置参数
daemonize yes
#bind 127.0.0.1 -::1
protected-mode no
port 6379
dbfilename "dump.rdb"
dir "/root/redis/my_redis_conf/dumpdir"
logfile "/tmp/redis6379.log"
requirepass "root"
masterauth root
replicaof 192.168.1.5 6379
# 下面是发开AOF持久化,不配置也没关系
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
slaver2机器:IP 192.168.1.7 ,端口 6379
设置配置参数
daemonize yes
#bind 127.0.0.1 -::1
protected-mode no
port 6379
dbfilename "dump.rdb"
dir "/root/redis/my_redis_conf/dumpdir"
logfile "/tmp/redis6379.log"
requirepass "root"
masterauth root
replicaof 192.168.1.5 6379
# 下面是发开AOF持久化,不配置也没关系
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
测试一下主从复制
先开启master,再开启两个slaver
开启redis命令:redis-server ./redis.conf
连接redis命令:redis-cli -a root
-a 后接的是密码,密码是配置文件requirepass字段指定
master机器,客户端连接redis,输入命令 info replication查看信息
slaver机器的日志文件
主从复制的共同工作流程
1.slave启动,同步请求
slave启动后会发送一个sync命令给master
2.首次连接,全量复制
master收到sync命令后,会一次完全同步(全量复制)自身数据到slave,slave自身原有数据会被master数据覆盖清除
3.心跳持续,保持通信
master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,master将RDB快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步
而slave服务在接收到数据后,将其存盘加载到内存中,从而完成复制初始化
4.进入平稳增量复制
master继续将新的所有收集的修改命令自动一次传给slave,完成同步
5.从机下线,重连续传
master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId,offset是保存在backlog中的。master只会把已经复制的offset后面的数据复制给slave,类似断点续传
2.给主从复制增加哨兵
三个哨兵将都在master机器 192.168.1.5,上增加和启动
(1)复制一份redis配置文件中的哨兵配置文件【sentinel.conf】为【sentinel26379.conf】
protected-mode no
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel26379.pid"
logfile "/tmp/sentinel26379.log"
dir "/tmp"
sentinel monitor mymaster 192.168.1.5 6379 2
sentinel auth-pass mymaster root
(2)复制一份redis配置文件中的哨兵配置文件【sentinel.conf】为【sentinel26380.conf】
protected-mode no
port 26380
daemonize yes
pidfile "/var/run/redis-sentinel26380.pid"
logfile "/tmp/sentinel26380.log"
dir "/tmp"
sentinel monitor mymaster 192.168.1.5 6379 2
sentinel auth-pass mymaster root
(3)复制一份redis配置文件中的哨兵配置文件【sentinel.conf】为【sentinel26381.conf】
protected-mode no
port 26381
daemonize yes
pidfile "/var/run/redis-sentinel26381.pid"
logfile "/tmp/sentinel26381.log"
dir "/tmp"
sentinel monitor mymaster 192.168.1.5 6379 2
sentinel auth-pass mymaster root
启动哨兵
redis-sentinel sentinel26379.conf --sentinel
redis-sentinel sentinel26380.conf --sentinel
redis-sentinel sentinel26381.conf --sentinel
查看哨兵是否启动
查看哨兵日志
/tmp/sentinel26379.log,/tmp/sentinel26380.log,/tmp/sentinel26381.log
验证
断开master
投票给192.168.1.6,到192.168.1.6查看是不是新的master,可以看到192.168.1.6成为新的master