【04】Redis for OPS:主从复制
写在前面的话
Redis 的主从其实和 MySQL 类似,更多的还是作为备份的功能存在,在复杂的 Rediis 集群架构中,主从也是不可或缺的。
主从复制
主从复制原理:
1. 从库通过命令连接到主库,并发送 SYNC 给主库。
2. 主库接受到从库的 SYNC 后触发 BGSAVE,后台持久化 RDB,并发送给从库。
3. 从库收到 RDB 后开始恢复其中的数据。
4. 主库陆续将新生成的数据发送给从库。
5. 当从库发生故障,但是未造成数据损坏,那么下去重启后会自动重连主库,主库陆续将从库缺失部分发送过来。
关于主从的配置项,有以下一些,一般选择默认的就足够我们使用:
# 从库配置主库的IP端口 # slaveof <masterip> <masterport> # 主库有密码的时候配置密码 # masterauth <master-password> # 当slave与master断开或者正在同步的时候,设置yes返回的数据可能是旧的,设置no直接返回正在同步的错误 slave-serve-stale-data yes # 设置从库只读 slave-read-only yes # 主从是否使用无硬盘复制,即主不通过RDB文件直接传数据给从 repl-diskless-sync no # 选择无硬盘备份时,需要等待多久才传数据 repl-diskless-sync-delay 5 # 从向主周期性发送ping包时间 # repl-ping-slave-period 10 # 备份超时时间 # repl-timeout 60 # 是否禁用从的CTP_NODELAY,如果yes主从会有一点延时 repl-disable-tcp-nodelay no # 备份缓冲区,从库失联后会短暂的帮从库接受数据 # repl-backlog-size 1mb # 主多长时间没有和从连接就释放缓冲区 # repl-backlog-ttl 3600 # 从优先级,用于sentinel选主时使用,数字越小越高,但是0就不参与选举 slave-priority 100 # 主停止接受写请求,当从在线小于3个,滞后10秒时 # min-slaves-to-write 3 # min-slaves-max-lag 10 # Redis master能够通过不通方式列出从的地址和端口 # slave-announce-ip 5.5.5.5 # slave-announce-port 1234
搭建主从环境
在日常工作中,如果是简单的应用不那么重要,可能这种服务就只有一个机器,但为了更好的使用,这里还是使用三个虚拟机来配合搭建:
192.168.200.101 / 17000 作为默认主
192.168.200.102 / 17000 作为默认从
192.168.200.103 / 17000 作为默认从
1. 给 101 / 102 / 103 安装 redis:
mkdir -p /data/{backup,data,logs,packages,services} /data/packages tar -zxf redis-4.0.14.tar.gz cd redis-4.0.14/ make make PREFIX=/data/services/redis-master-slave-17000 install cd /data/services/redis-master-slave-17000 mkdir data logs conf
2. 添加配置文件 /data/services/redis-master-slave-17000/conf/redis-17000.conf:
################################################################################################# # Redis 配置文件 ################################################################################################# ################################################################################################# # 基础配置 ################################################################################################# protected-mode yes bind 0.0.0.0 requirepass helloworld port 17000 tcp-backlog 2048 timeout 0 tcp-keepalive 300 daemonize yes supervised no pidfile /data/services/redis-master-slave-17000/logs/redis-17000.pid loglevel notice logfile "/data/services/redis-master-slave-17000/logs/redis-17000.log" databases 16 always-show-logo yes ################################################################################################# # RDB持久化配置 ################################################################################################# dbfilename dump-17000.rdb dir "/data/services/redis-master-slave-17000/data" save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes ################################################################################################# # AOF持久化配置 ################################################################################################# appendonly yes appendfilename "appendonly-17000.aof" appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble no ################################################################################################# # 主从配置 ################################################################################################# # slaveof <masterip> <masterport> masterauth helloworld slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-ping-slave-period 10 repl-timeout 60 repl-disable-tcp-nodelay no repl-backlog-size 1mb repl-backlog-ttl 3600 slave-priority 100 min-slaves-to-write 1 min-slaves-max-lag 10 # slave-announce-ip 5.5.5.5 # slave-announce-port 1234
注意红色部分的配置需要根据实际情况进行修改!
3. 启动 Redis:
/data/services/redis-master-slave-17000/bin/redis-server /data/services/redis-master-slave-17000/conf/redis-17000.conf
4. 在 102 / 103 上面指定主库:
/data/services/redis-master-slave-17000/bin/redis-cli -p 17000 -a helloworld slaveof 192.168.200.101 17000
会和 MySQL 一样提示你在命令行使用密码不安全:
5. 查看主从状态:
/data/services/redis-master-slave-17000/bin/redis-cli -p 17000 -a helloworld info replication
主库查看到结果:
从库上查看结果:
6. 测试,所有节点都连接上:
在主上面 set key:
在从上面 get key:
7. 至此,简单的主从搭建完成,但是在日常工作中,主从只是基础,一般不会单独使用,更多的还是后面根据主从演变出来的环境。
原文地址:https://www.cnblogs.com/Dy1an/p/11812046.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法