网站改用绝对地址的好处,知名企业愿景,网站建设后台管理登陆代码,哪个网站上可以做代打目录 一、主从复制简介
二、配置主从服务器
2.1使用配置文件的形式来主从复制
2.2使用纯代码的方式来进行主从复制#xff1b;
2.3脱离主服务器
三、一些注意事项 一、主从复制简介 主从复制#xff0c;是指将一台Redis服务器的数据#xff0c;复制到其他的Redis服务器…目录 一、主从复制简介
二、配置主从服务器
2.1使用配置文件的形式来主从复制
2.2使用纯代码的方式来进行主从复制
2.3脱离主服务器
三、一些注意事项 一、主从复制简介 主从复制是指将一台Redis服务器的数据复制到其他的Redis服务器。前者称为主节点(master)后者称为从节点(slave)数据的复制是单向的只能由主节点到从节点。 从 Redis 2.6 开始 从服务器支持只读模式 并且该模式为从服务器的默认模式。只读模式由 redis.conf 文件中的 slave-read-only 选项控制 也可以通过 CONFIG SET parameter value (opens new window)命令来开启或关闭这个模式。只读从服务器会拒绝执行任何写命令 所以不会出现因为操作失误而将数据不小心写入到了从服务器的情况。 一个主服务器可以有多个从服务器一个从服务器只能有一个主服务器并且不支持主主复制。 不仅主服务器可以有从服务器从服务器也可以有自己的从服务器 多个从服务器之间可以构成一个主从链。 确认了主从关系之后主服务器可以读也可以写但是从服务器就只能读了。从服务器一旦确认主服务器那么在第一次启动时会复制主服务上的所有数据并且这个从服务器上之前的数据会全部丢失。 参考资料Redis 复制 | DB-TUTORIAL
二、配置主从服务器
我本次创建三个redis服务一个主服务两个从服务。主服务在Linux上运行两个从服务使用docker容器来创建三个redis的版本都是7.0.10
2.1使用配置文件的形式来主从复制
注意要修改redis.conf配置文件的几个主要参数
# 修改配置
daemonize no #后台启动(注意这里要改为no即非后台启动因为会和docker run -d 冲突)# 关闭保护模式开启的话只有本机才可以访问redis
protected-mode no # 需要注释掉bind
#bind 127.0.0.1bind绑定的是自己机器网卡的ip如果有多块网卡可以配多个ip代表允许客户端通过机器的哪些网卡ip去访问内网一般可以不配置bind注释掉即可# 设置登录密码
requirepass 123456# 开启aof持久化
appendonly yes
使用docker创建两个从服务
由于dockerhub中redis官方给的镜像里面没有redis.conf文件Redis官方发布的官方镜像是按照最小化配置进行的以保持镜像的轻量级和通用性。为了方便以后更改配置需要自己手动创建配置文件
我现在本地的Linux文件中创建了一个redis.conf文件这个文件是redis官方提供的初始redis配置文件并在这个初始文件的基础上进行一些小小的改动。
redis官方的配置文件地址redis/redis.conf at 7.0.10 · redis/redis · GitHub
# 修改配置
daemonize no #后台启动(注意这里要改为no即非后台启动因为会和docker run -d 冲突)# 关闭保护模式开启的话只有本机才可以访问redis
protected-mode no # 需要注释掉bind
#bind 127.0.0.1bind绑定的是自己机器网卡的ip如果有多块网卡可以配多个ip代表允许客户端通过机器的哪些网卡ip去访问内网一般可以不配置bind注释掉即可# 设置登录密码
requirepass 123456# 开启aof持久化
appendonly yes#用来指定主机slaveof 主机ip 端口
slaveof 192.168.231.110 6379
#主机的密码
masterauth 123456
修改其中相应的配置配置主从关系时只需要在从服务的配置文件中修改就行了主服务器不变
使用docker容器创建俩个redis服务并在创建的容器的时候进行一些挂载
docker run --name myredis01 \-v /usr/dockerMount/myredis01/redis_config/redis.conf:/etc/redis.conf \-v /usr/dockerMount/myredis01/redis_data:/data \-p 6380:6379 \-d redis:7.0.10 redis-server /etc/redis.conf
解释 -v /usr/dockerMount/myredis01/redis_config/redis.conf:/etc/redis.conf 容器启动的时候将本机目录下面的redis.conf映射到容器中去 -v /usr/dockerMount/myredis01/redis_data:/data 映射数据存储的路径 -d redis:7.0.10 redis-server /etc/redis.conf 后台启动redis-server并且指定配置文件启动
创建这个容器之后我们可以进入到这个redis内部由于我们已经在myredis01的配置文件中写上了主服务器的地址那么启动这个服务之后就会自动拉取redis主服务器中的内容了
docker exec -it myredis01 redis-cli -a 123456运行这个命令可以进入redis的客户端
使用 docker exec -it 命令来执行 Docker 容器内的操作
直接查看我们所拥有的键
keys * 可以看到我们的从服务能正确拉取到我们主服务中的数据
查看主机信息info Replication 查看从机信息info Replication 能清晰的看到主机和从机的关系
再新建一个从服务myredis02同样的创建容器操作
docker run --name myredis02 \-v /usr/dockerMount/myredis01/redis_config/redis.conf:/etc/redis.conf \-v /usr/dockerMount/myredis01/redis_data:/data \-p 6381:6379 \-d redis:7.0.10 redis-server /etc/redis.conf
再进入到这个容器的内部能看到也同样拉取了我们主服务器中的数据 至此我们使用redis.conf配置文件的方式来配置主从复制就完成了也就是配置一个redis.conf配置文件并挂载到容器内部。
注意使用配置文件的方式即使从服务掉线那么再次连接时也会重新读取主服务的数据
2.2使用纯代码的方式来进行主从复制
在新建一个redis容器不进行任何的挂载
docker run --name myredis03 -p 6382:6379 -d redis:7.0.10
这个容器是新建的它现在应该能读也能写。
slaveof 192.168.231.110 6379 config set masterauth 123456运行这两个命令就可以使这个redis服务器变为从服务器了。这种方式可能会有一些延迟但是这种通过命令行的方式进行的主从关系是很脆弱的一旦从服务器就行重启那么这段主从关系就会消失。适合短暂的进行数据库数据的同步。
2.3脱离主服务器 slaveof no one这个命令可以使从服务器脱离主从关系的绑定。使从服务器重新变为能读能写的redis服务。但是这个命令有一点鸡肋。它不是永久的。 服务器停止复制后不会清空数据库而是会保留之前复制产生的数据。
如果你的主从关系绑定在从服务器的redis.conf配置文件中那么即使你在从服务器中运行了这个脱离命令暂时的拥有了读写功能但是从服务器一重启那么就会重新绑定主从关系。
如果主从关系是靠命令来进行绑定的那么重启从服务器后自动就会脱离主从关系了。所以这个命令还是有一点鸡肋的。
三、一些注意事项
master主服务器会每个10秒去发一次心跳包以此来检测从服务器是否还存活。
即使主服务器断线那么从服务器也会等待主服务器重启而不能选择新的主服务器。但是可以使用redis的哨兵监控来指定新的主服务器。
从节点会努力追赶主节点最终从节点的状态会和主节点的状态将保持一致。如果网络断开了主从节点的数据将会出现大量不一致一旦网络恢复从节点会采用多种策略努力追赶上落后的数据继续尽力保持和主节点一致。
redis如何实现的数据同步
1、slave启动成功连接到master后会给master发送数据同步消息发送sync命令 2、master接收到slave发来的数据同步消息后把主服务器的数据进行持久化到rdb文件同时会收集接收到的用于修改数据的命令master将传rdb文件发送给你slave完成一次完全同步 3、全量复制而slave服务在接收到master发来的rdb文件后将其存盘并加载到内存 4、增量复制master继续将收集到的修改命令依次传给slave完成同步 但是只要重新连接master一次完全同步全量复制将会被自动执行