主从复制介绍
主机数据更新后,根据配置和策略自动同步到备机的机制,即master/slaver机制
Master以写为主,Slave以读为主
- 读写分离,性能扩展
- 容灾快速恢复
搭建主从复制(一主二仆)
ps:本示例因为资源关系,仅做学习过程,因此是在同一台主机上搭建1个主服务,2个从服务,以不同端口来区分。但是在实际场景中,一般在不同的主机服务器中部署主从,主从实例端口保持一致,以ip来区分。
IP | 端口 |
---|---|
127.0.0.1 | 主:6379 |
127.0.0.1 | 从:6381 |
127.0.0.1 | 从:6382 |
启动三个redis服务
在redis安装目录
/usr/local/redis-6.2.7/
中,编辑conf/redis.conf
基础信息daemonize yes dir /usr/local/redis-6.2.7/data
在conf目录内,创建3个redis服务的配置文件
创建
redis_6379.conf
include /usr/local/redis-6.2.7/conf/redis.conf port 6379 pidfile /usr/local/redis-6.2.7/pid/redis_6379.pid logfile "/usr/local/redis-6.2.7/logs/redis_6379.log" dbfilename dump_6379.rdb
复制
redis_6379.conf
为redis_6381.conf
,redis_6382.conf
,替换内容中的端口号cp redis_6379.conf redis_6381.conf cp redis_6379.conf redis_6382.conf sed -i 's/6379/6381/g' redis_6381.conf sed -i 's/6379/6382/g' redis_6382.conf
启动3个redis服务
注意:进入到bin目录下执行启动命令
# 启动前,先kill掉已有的redis服务 [root@izwz9f92w7soch5m251ghgz bin]# ./redis-server ../conf/redis_6379.conf [root@izwz9f92w7soch5m251ghgz bin]# ./redis-server ../conf/redis_6381.conf [root@izwz9f92w7soch5m251ghgz bin]# ./redis-server ../conf/redis_6382.conf [root@izwz9f92w7soch5m251ghgz bin]# [root@izwz9f92w7soch5m251ghgz bin]# [root@izwz9f92w7soch5m251ghgz bin]# ps -ef | grep redis root 9892 1 0 14:00 ? 00:00:00 ./redis-server 127.0.0.1:6379 root 9899 1 0 14:01 ? 00:00:00 ./redis-server 127.0.0.1:6381 root 9917 1 0 14:01 ? 00:00:00 ./redis-server 127.0.0.1:6382 root 9924 9715 0 14:01 pts/1 00:00:00 grep --color=auto redis
配置三个redis服务的主从关系
前面步骤3中将3个redis服务已经启起来,但是3者之间并没有主从配对关系,可通过info replication
查看主从配对关系如下
配从(库)不配主(库)
slaveof <主库ip> <主库port>
成为某个实例的从服务器
slaveof no one
将从机变为主机
分别在从库6381,6382中执行:slaveof 127.0.0.1 6379
,然后查看其主从配对关系
至此,我们已经成功配对主从关系,其中6379实例为master,6381,6382 为slave
主从复制验证
在主机上写,在从机上读
主机重启后,依然为主机
主机挂掉后,从机依然可提供读服务
从机重启后,需重新配对成为从机
主从复制原理
- Slave启动成功连接到Master后,会发送一个sync命令
- Master接收到sync命令后,启动后台的存盘进程,存盘完毕后将整个数据文件传输给Slave,完成一次完全同步。
- 全量复制:Slave服务在接收到数据库文件后,将其存盘并加载到内存中
- 增量复制:Master继续将新收集到的修改命令依次传给Slave,完成同步
- Slave只要重新连接Master,将会完成一次完全同步
哨兵模式
哨兵是一个独立的进程,作为进程,它会独立运行。哨兵模式能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
配置哨兵
- 前提:已经成功按照上面的步骤,搭建好一主二仆
在
conf
目录下创建名字为sentinel.conf
文件,内容如下:sentinel monitor mymaster 127.0.0.1 6379 1
其中
mymaster
为监控对象起的服务器名称,1为至少有多少个哨兵同意转移的数量
启动哨兵
./redis-sentinel ../conf/sentinel.conf
将哨兵设置成后台运行,可修改conf/sentinel.conf
配置,添加内容如下:
# 后台运行
daemonize yes
# 日志
logfile "/usr/local/redis-6.2.7/logs/sentinel_log.log"
主机挂掉,从机选举新主机
哪个从机会被选举成主机呢?
- 选择优先级靠前的从机:
replica-priority 100
,值越小优先级越高。 - 选择偏移量最大的从机
- 选择runid最小的从机
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。