目录
Redis单机安装
Redis主从架构安装
Redis单机安装 上传redis安装包解压缩tar -xzf redis-6.2.4.tar.gz进入redis目录cd redis-6.2.4运行编译命令make &&make install
如果没有出错应该就安装成功了。
然后修改redis.conf文件中的一些配置?
# 绑定地址默认是127.0.0.1会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问bind 0.0.0.0# 保护模式关闭保护模式protected-mode no# 数据库数量设置为1databases 1# 后台启动设置daemonize no改成yes# 修改redis.conf(128行)文件将里面的daemonize no 改成 yes让服务在后台启动# 设置redis访问密码requirepass 123456
启动Redis
redis-server redis.conf
停止redis服务
redis-cli shutdown Redis主从架构安装?
1.创建三个文件夹名字分别叫7001、7002、7003
2.mkdir 7001 7002 7003
3.将redis-6.2.4/redis.conf文件拷贝到三个目录中
# 方式一逐个拷贝cp redis-6.2.4/redis.conf 7001cp redis-6.2.4/redis.conf 7002cp redis-6.2.4/redis.conf 7003# 方式二管道组合命令一键拷贝echo 700170027003| xargs -t -n 1cp redis-6.2.4/redis.conf
4.修改每个实例的端口、工作目录可以在文件中手动修改也可以使用命令修改
sed -i -e s/6379/7001/g-e s/dir .\//dir \/tmp\/7001\//g7001/redis.confsed -i -e s/6379/7002/g-e s/dir .\//dir \/tmp\/7002\//g7002/redis.confsed -i -e s/63美国高防vps79/7003/g-e s/dir .\//dir \/tmp\/7003\//g7003/redis.conf
5.启动
# 第1个redis-server 7001/redis.conf# 第2个redis-server 7002/redis.conf# 第3个redis-server 7003/redis.conf
6.开启主从关系
修改配置文件永久生效在redis.conf中添加一行配置slaveof <masterip> <masterport>使用redis-cli客户端连接到redis服务执行slaveof命令重启后失效slaveof <masterip> <masterport>如果redis设置了密码需配置主redis密码masterauth 123456通过redis-cli命令连接7001执行下面命令redis-cli -p 7001#查看状态info replication 数据同步原理
1. 主从第一次同步是全量同步
master如何判断slave是不是第一次来同步数据这里会用到两个很重要的概念
Replication id简称replid是数据集的标记id一致则说明是同一数据集。每一个master都有唯一的replidslave则会继承master节点的replidoffset偏移量随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset说明slave数据落后于master需要更新。
因此slave做数据同步必须向master声明自己的replication id和offsetmaster才可以判断到底需要同步哪些数据.
简述全量同步的流程
slave节点请求增量同步master节点判断replid发现不一致拒绝增量同步master将完整内存数据生成rdb发送rdb到slaveslave清空本地数据加载master的rdbmaster将rdb期间的命令记录在repl_baklog并持续将log中的命令发送给slave
2. 主从第一次同步是全量同步但如果slave重启后同步则执行增量同步
注意
repl_baklog大小有上限写满后会覆盖最早的数据。如果slave断开时间过久导致尚未备份的数据被覆盖则无法基于log做增量同步只能再次全量同步。
repl_baklog大小有上限写满后会覆盖最早的数据。如果slave断开时间过久导致数据被覆盖则无法实现增量同步只能再次全量同步。
可以从以下几个方面来优化redis主从集群
在master中配置repl-diskkless-sync yes启用无磁盘复制避免全量同步时的磁盘IO
使用场景磁盘比较慢网络非常快时
提高全量同步性能
redis单节点上的内存占用不要太大减少RDB导致的过多磁盘IO
提高全量同步性能
适当提高repl_baklog的大小发现slave宕机时尽快实现故障恢复尽可能避免全量同步限制一个master上的slave节点数量如果实在是太多slave则可以采用主-从-从链式结构减少master压力
简述全量同步和增量同步区别
1全量同步master将完整内存数据生成rdb发送rdb到slave后续命令则记录在repl_baklog逐个发送给slave。
2增量同步slave提交自己的offset到mastermaster获取repl_baklog中从offset之后的命令给slave。
什么时候执行全量同步
1slave节点第一次连接master节点时
2slave节点断开时间太久repl_baklog中的offset已经被覆盖时
什么时候执行增量同步
slave节点断开又恢复并且在repl_baklog中能找到offset时
49286388