中山 网站建设一条龙全包,怎么注册建设银行网站,org域名注册,全球速卖通的特点Redis的主从复制和哨兵模式 Redis集群搭建#xff08;一主二从#xff09;replication 主从复制配置文件 redis.confRedis主从复制工作原理全量复制增量复制redis主从复制策略 搭建集群 #xff08;主从复制引入#xff09; 哨兵模式概念哨兵配置文件 sentinel.conf哨兵配置… Redis的主从复制和哨兵模式 Redis集群搭建一主二从replication 主从复制配置文件 redis.confRedis主从复制工作原理全量复制增量复制redis主从复制策略 搭建集群 主从复制引入 哨兵模式概念哨兵配置文件 sentinel.conf哨兵配置文件模板【入门】 配置哨兵模式一主二从三哨兵① 先配置redis的主从服务器② 配置哨兵③ 启动服务④ 访问验证⑤ 主从服务器数据插入验证⑥ 验证主节点宕机集群故障自动转移 Redis集群搭建一主二从 replication 主从复制配置文件 redis.conf
主从复制相关的配置项在redis.conf中的replication一栏中
以下是与 Redis 复制相关的配置项及其解释
replicaof masterip masterport :
这个配置项用于设置 Redis 服务器作为从服务器slave并指定其主服务器master的 IP 地址和端口。例如replicaof 192.168.1.100 6379 意味着这台 Redis 服务器将从 IP 地址为 192.168.1.100端口为 6379 的 Redis 服务器复制数据。
masterauth masterr-password:
如果主服务器设置了密码那么从服务器需要使用这个配置项来提供密码以便能够连接到主服务器并进行数据复制。例如masterauth mysecretpassword 将会设置从服务器的主服务器密码为 mysecretpassword。
repl-ping-slave-period :
从服务器会每隔指定的秒数向主服务器发送一个 PING用于确保连接是活动的。默认值是 10 秒。你可以通过调整这个值来平衡网络流量和确保连接的稳定性。
repl-timeout :
这是一个超时时间用于定义从服务器等待主服务器的响应的最长时间。如果在这个时间内没有收到响应从服务器将断开连接。默认值是 60 秒。如果网络不稳定或主服务器负载很高可能需要增加这个值。
repl-disable-tcp-nodelay:
这个选项控制 TCP NoDelay 选项是否应用于从服务器与主服务器之间的连接。默认情况下该选项是关闭的这意味着 TCP NoDelay 是启用的。启用 TCP NoDelay 可以减少网络延迟但可能会增加 CPU 使用率。在某些情况下禁用 TCP NoDelay 可能会提高性能尤其是在高延迟的网络环境中。
repl-backlog-size :
这个配置项设置了复制积压缓冲区的大小。复制积压是一个缓冲区用于保存最近被主服务器写入的数据以便从服务器可以进行部分同步。默认值是 1MB。如果你的数据集很大或者从服务器经常断开连接并重新连接可能需要增加这个值。
repl-backlog-ttl :
这个配置项设置了复制积压缓冲区的存活时间。当缓冲区中的数据超过这个指定的秒数没有被从服务器取走时这些数据将被移除。默认值是 3600 秒1 小时。如果网络环境不稳定或者从服务器经常离线可能需要减少这个值。
Redis主从复制工作原理
Redis的主从复制可以根据是否是全量分为全量复制和增量复制。
全量复制
Redis的全量复制发生在Slave从节点初始化阶段此时slave需要将master主机上的所有数据都复制一份。
从服务器连接主服务器发送SYNC同步命令主服务器收到sync同步命令后开始执行bgsave命令生成.rdb文件并使用缓冲区记录此后执行的所有写命令。主服务器bgsave执行完成之后向所有从服务器发送快照并在发送快照期间继续记录被执行的写命令。从服务器收到快照文件后丢弃所有的旧数据载入收到的快照主服务器快照发送完毕之后开始向从服务器发送缓冲区中的写命令从服务器完成对快照的载入开始接收命令请求并执行来着主服务器缓冲区的写命令。 下面是从网上拿来的两张图可以更清晰的了解主从复制原理及流程 增量复制
redis的增量复制发生在slave从节点初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
增量复制主服务器每执行一个写命令就会向从服务器发送一个相同的写命令从服务器接收并执行收到的写命令。
redis主从复制策略
主从刚刚连接的时候进行全量同步全同步结束后进行增量同步。当然如果有需要slave 在任何时候都可以发起全量同步。
redis 策略是无论如何首先会尝试进行增量同步如不成功要求从机进行全量同步。
搭建集群 主从复制引入
步骤如下
拷贝redis.conf配置文件我们一共需要三台redis-server所以拷贝三份即可。修改配置文件因为每个redis-server都是不同的实例所以需要修改配置文件 修改port端口修改pidfile文件名后台启动服务修改rdb或者aof文件存放位置具体看你的持久化使用的是rdb还是aof修改logfile文件存放位置修改replication中的配置 replicaof masterip masterport(配置文件是永久有效命令是临时有效 slaveof masterip masterport) 启动每个服务并且查看不同redis-server的配置信息info replication 开始搭建集群6379为主节点其余6380,6381为从节点。 cp redis7.conf redis6379.conf
cp redis7.conf redis6380.conf
cp redis7.conf redis6381.conf主节点6379
vim redis6379.conf# 改动内容如下
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6379 # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6379.pid # 指定pidfile文件
logfile /myredis/redis6379.log # 指定Logfile文件
dbfilename dump6379.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
requirepass robin # 设定redis服务器的密码# 保存退出
ESC shift: wq从节点6380
vim redis6380.conf# 改动内容如下
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6380 # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6380.pid # 指定pidfile文件
logfile /myredis/redis6380.log # 指定Logfile文件
dbfilename dump6380.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
replicaof 127.0.0.1 6379 # 指定从机的主机
masterauth robin # 从机的主机的密码验证requirepass robin # 设定redis服务器的密码# 保存退出
ESC shift: wq从节点6381
vim redis6381.conf# 改动内容如下
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6381 # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6381.pid # 指定pidfile文件
logfile /myredis/redis6381.log # 指定Logfile文件
dbfilename dump6381.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
replicaof 127.0.0.1 6379 # 指定从机的主机
masterauth robin # 从机的主机的密码验证requirepass robin # 设定redis服务器的密码# 保存退出
ESC shift: wq启动三个服务
# redis-server redis配置文件路径
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf使用ps -ef | grep redis查看一下进程
登录到三台服务器上观察下
# 开启三个窗口然后进行不同服务器的登录redis-cli -a robin -p 6379redis-cli -a robin -p 6380redis-cli -a robin -p 6381 测试一下基础的操作把主节点用于写数据从节点用于读数据不能写数据。 至此一主二从的主从复制已经搭建完毕但是正常业务中并不是这么简单的。 当前我们只有一台主节点那当我们的主节点意外宕机断开连接怎么办难道我们要一直等着主节点启动吗当然不是这个时候就需要哨兵模式来完成了当然手动也可以但是比较繁琐而且真实情况下也没人会用手动切换主从当我们的主节点意外断开连接宕机我们应该在剩下的从节点中选出一台服务器作为主节点
哨兵模式
概念
哨兵模式是一种特殊的模式redis提供了哨兵的命令redis-sentinel**哨兵是一个独立的进程即独立运行。哨兵模式的原理哨兵通过发送命令等待redis服务器响应从而监控多个redis实例。哨兵通过发送命令监控主从服务器的运行状态当哨兵检测到master宕机时会自动将slave切换成master(根据哨兵的配置去切换)然后通过发布订阅模式publish和subcribe通知其他的从服务器修改配置文件让它们切换主机。
哨兵配置文件 sentinel.conf
下面是redis提供的哨兵配置文件例子 在redis的安装目录下sentinel.confsentinel.conf 是 Redis Sentinel 的配置文件用于配置和管理 Sentinel 系统。 Sentinel 是 Redis 的一个高可用性解决方案它可以监视任意多个 Redis 主服务器以及这些主服务器属下的所有从服务器并在被监视的主服务器进入下线状态时自动将下线主服务器属下的某个从服务器升级为新的主服务器代替已下线的主服务器继续处理请求。 以下是 sentinel.conf 文件中一些常见的配置项及其解释
sentinel monitor master-name ip port quorum
master-name主服务器的名称用于在 Sentinel 集群中唯一标识一个主服务器。ip 和 port主服务器的 IP 地址和端口号。quorum判断主服务器是否下线的最小 Sentinel 数量。
**sentinel down-after-milliseconds **
设置判断主服务器是否下线的超时时间。如果在指定的毫秒数内Sentinel 没有收到主服务器的有效回复则认为该主服务器已下线。
**sentinel failover-timeout **
设置故障转移的超时时间。如果在指定的毫秒数内Sentinel 没有完成故障转移的操作则放弃故障转移。
**sentinel parallel-syncs **
设置在进行故障转移时可以有多少个从服务器同时对新的主服务器进行同步。
sentinel can-failover yes|no
设置 Sentinel 是否可以对指定的主服务器进行故障转移。
sentinel deny-scripts-reconfig yes|no
设置是否允许通过 SENTINEL RECONFIGURE 命令来修改 Sentinel 的配置。
**sentinel auth-pass **
设置与 Redis 主服务器进行通信时所使用的密码。
**sentinel announcement-ip **
设置 Sentinel 公告的 IP 地址。当 Sentinel 与其他 Sentinel 或 Redis 服务器通信时将使用这个 IP 地址。
**sentinel down-after-script **
设置一个自定义的脚本当 Sentinel 检测到主服务器下线时会执行该脚本。
哨兵配置文件模板【入门】
# 设置sentinel的工作目录注意这个路径必须是存在的
dir /tmp # 哨兵的默认端口为26379 我们配置多个哨兵就需要改成不同的端口
port 26379# 和redis-server一样。哨兵也需要维护唯一的pidfile
pidfile /var/run/redis-sentinel.pid# 6379表示要监听的服务器的端口 2 表示当两个哨兵认为master不可达时才会发生故障转移
sentinel monitor mymaster 127.0.0.1 6379 2 # 设置判定主服务器下线的超时时间默认是30秒
sentinel down-after-milliseconds mymaster 30000 # 如果在指定时间内未能完成故障转移则认为故障转移失败
sentinel failover-timeout mymaster 180000 # 设置在故障转移时最多可以有多少个从服务器同时对新的主服务器进行同步默认是1
sentinel parallel-syncs mymaster 1 # 设置密码如果你的redis主服务器设置了密码这里也需要设置
sentinel auth-pass mymaster yourpassword # 允许通过SENTINEL RECONFIGURE命令来修改Sentinel的配置默认为no
sentinel deny-scripts-reconfig yes # Sentinel公告的IP地址当Sentinel与其他Sentinel或Redis服务器通信时将使用这个IP地址
# 如果未设置将使用Sentinel绑定的IP地址
# sentinel announcement-ip ip # 当Sentinel检测到主服务器下线时会执行该脚本
# sentinel down-after-script mymaster /path/to/your/script.sh # 其他配置项...配置哨兵模式一主二从三哨兵 ① 先配置redis的主从服务器
步骤如下
拷贝redis.conf配置文件我们一共需要三台redis-server所以拷贝三份即可。修改配置文件因为每个redis-server都是不同的实例所以需要修改配置文件 修改port端口修改pidfile文件名后台启动服务修改rdb或者aof文件存放位置具体看你的持久化使用的是rdb还是aof修改logfile文件存放位置修改replication中的配置 replicaof masterip masterport(配置文件是永久有效命令是临时有效 slaveof masterip masterport) 启动每个服务并且查看不同redis-server的配置信息info replication 拷贝redis.conf配置文件 cp redis7.conf redis6379.conf
cp redis7.conf redis6380.conf
cp redis7.conf redis6381.conf主节点6379 vim redis6379.conf# 改动内容如下
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6379 # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6379.pid # 指定pidfile文件
logfile /myredis/redis6379.log # 指定Logfile文件
dbfilename dump6379.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
requirepass robin # 设定redis服务器的密码# 保存退出
ESC shift: wq从节点6380 vim redis6380.conf# 改动内容如下
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6380 # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6380.pid # 指定pidfile文件
logfile /myredis/redis6380.log # 指定Logfile文件
dbfilename dump6380.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
replicaof 127.0.0.1 6379 # 指定从机的主机
masterauth robin # 从机的主机的密码验证requirepass robin # 设定redis服务器的密码# 保存退出
ESC shift: wq从节点6381 vim redis6381.conf# 改动内容如下
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6381 # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6381.pid # 指定pidfile文件
logfile /myredis/redis6381.log # 指定Logfile文件
dbfilename dump6381.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
replicaof 127.0.0.1 6379 # 指定从机的主机
masterauth robin # 从机的主机的密码验证requirepass robin # 设定redis服务器的密码# 保存退出
ESC shift: wq② 配置哨兵 拷贝redis安装目录下的sentinel.conf cp /opt/redis-7.2.4/sentinel.conf /myredis/sentinel1.conf
cp /opt/redis-7.2.4/sentinel.conf /myredis/sentinel2.conf
cp /opt/redis-7.2.4/sentinel.conf /myredis/sentinel3.conf接下来的步骤基本相同每个哨兵的配置文件改动基本都是一致的
禁止保护模式配置哨兵启动端口不同哨兵的端口不同 26379 26380 26381配置哨兵后台启动配置logfile为了方便log配置要监听的主服务器配置要监听的主服务器的密码有则配置没密码不用配置配置哨兵的工作目录为了方便演示观察改动一下… 其他配置 修改sentinel1.conf的配置 protected-mode noport 26379daemonize yeslogfile /myredis/sentinel.logdir /myredis/sentinel monitor mymaster 127.0.0.1 6379 2sentinel auth-pass mymaster robin③ 启动服务
启动主从服务器
# redis-server redis配置文件路径
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf启动三个哨兵
# redis-sentinel sentinel配置文件路径
redis-sentinel sentinel1.conf
redis-sentinel sentinel2.conf
redis-sentinel sentinel3.conf 查看一下进程 ps -ef | grep redis
④ 访问验证
创建三个远程终端分别连接不同的redis-server
redis-cli -a robin -p 6379 redis-cli -a robin -p 6380redis-cli -a robin -p 6381⑤ 主从服务器数据插入验证
# master 6379
flushdb # 先清空一下数据
set k1 v1# slave 6380
get k1 # v1# slave 6381
get k1 # v1⑥ 验证主节点宕机集群故障自动转移
我们手动的停止掉master 6379主服务器看哨兵是否会从salve6380和slave6381中选择出一台新的服务器 查看sentinel.log日志日志显示当前6379宕机了6381变成了新的master主机 去分别查看一下6380和6381的主从状态 查看下redis.conf配置文件 6381
6380 至此哨兵模式已经ok啦最后再次测试一下当我们的6379重新上线时master会是谁 答案master仍然是6381 那么启动6379的服务再次连接客户端查看一下把
redis-server redis6379.confredis-cli -a robin -p 6379如有错误请各位同学指正