docker 搭建简单的Redis哨兵模式(接redis主从复制)

接上篇文章,解决主从复制后,主机宕机,主备不自动切换--哨兵模式

docker 搭建简单的Redis 主从复制(slaveof)并且连接Laravel

搭建哨兵有两种方式

  • 哨兵服务和主从机在同一机器上
  • 哨兵服务单独开一个redis服务器

一、主机和哨兵在同一台机器上

首先创建哨兵所需配置文件sentinel.conf,在m1、s1、s2文件下分别创建。

image.png

启动redis容器,并且配置主从

注意这里如果直接挂载目录,会有一个错误,产生这个错误的原因就是目录挂载问题
因为Sentinel会在启动后向自己的配置文件中追加内容,它采用的是先创建一个临时配置文件,然后使用它替换掉原来的配置文件的方式。
WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy

运行容器、并且配置主从

docker run --name m1 -p 6379:6379 -v  E:/Docker/redis/monitor/m1/:/data -d redis     
docker run --name s1 -p 6380:6380 -v  E:/Docker/redis/monitor/s1/:/data  -d redis       
docker run --name s2 -p 6381:6381 -v  E:/Docker/redis/monitor/s2/:/data -d redis   

配置主从,语法:slaveof <host> <port>host为主机 m1 地址,可以通过 docker inspect m1查看

// s1
docker exec -it s1 redis-cli
slaveof 172.17.0.6 6379

// s2
docker exec -it s2 redis-cli
slaveof 172.17.0.6 6379

编写sentinel.conf配置文件,配置文件详解

<port> => 哨兵默认监听端口
<dir> => 指定哨兵工作目录
<daemonize> => 是否以守护进程方式启动,默认为否,你可以进行删除或者设置成no
<sentinel monitor mymaster <host> <port> <num>> 声明了要监控的主节点信息。你需要将<host><port> 替换为实际的主节点的IP 地址主机名端口号,并设置 <num> 为希望达到的哨兵数量
sentinel down-after-milliseconds mymaster 5000 设置哨兵判断主节点不可用的时间阈值为 5000 毫秒(即 5 秒)。如果哨兵在指定的时间内无法与主节点通信,将判断主节点不可用。
sentinel failover-timeout mymaster 10000设置故障转移的超时时间为 10000 毫秒(即 10 秒)。如果主节点在超过指定时间后仍然不可用,哨兵将启动故障转移操作。
<示例> => sentinel monitor mymaster 172.17.0.6 6379 2

port 26379
dir /data
daemonize yes
sentinel monitor mymaster <host> <port> <num>
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000

分别进入容器,启动哨兵服务

// m1
docker exec -it m1 bash
redis-sentinel sentinel-conf

// s1
docker exec -it s1 bash
redis-sentinel sentinel-conf

// s2
docker exec -it s2 bash
redis-sentinel sentinel-conf

主从配置完成后

image.png

启动哨兵服务完成后

image.png

查看哨兵状态

image.png

停止主机m1

查看 主从信息 info replication

1686735629183.jpg
选择完成再次查看 info replication
image.png

重新启动 m1 后,成为 s2 的从机

image.png

二、哨兵和主从分别在不同的服务器上,需要提前创建目录

docker run -d --name sentinel0 -p 26379:26379 -v  E:/Docker/redis/sentinel/m1/:/data redis    
docker run -d --name sentinel1 -p 26380:26380 -v  E:/Docker/redis/sentinel/s1/:/data redis      
docker run -d --name sentinel2 -p 26381:26381 -v  E:/Docker/redis/sentinel/s2/:/data redis    

E:/Docker/redis/sentinel/m1 、s1、s2 下分别创建 sentinel.conf文件,并写入配置

port 26379
dir /data
daemonize yes
sentinel monitor mymaster 172.17.0.6 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000

分别进入sentinel0 、sentinel1、sentinel2 容器启动哨兵服务

docker exec -it sentinel0 bash
reids-sentinel sentinel.conf

停止掉主机 m1 后,会自动选择一个从机升级为主机,实现故障自动转移

sentinel.conf也可以如下配置

// 版本一
port 26379
dir /data
daemonize yes
sentinel monitor mymaster 172.17.0.6 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel known-slave mymaster 172.17.0.7 6380
sentinel known-slave mymaster 172.17.0.8 6381
// 版本二
port 26379
dir /data
daemonize yes
sentinel monitor mymaster 172.17.0.6 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel known-slave mymaster 172.17.0.7 6380
sentinel known-slave mymaster 172.17.0.8 6381
sentinel known-sentinel mymaster 172.17.0.9 26379
// 版本三
port 26379
dir /data
daemonize yes
sentinel monitor mymaster 172.17.0.6 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000

上述配置文件主要的区别是:

  • 第一个配置文件:除了配置了主节点的监控信息外,还列出了两个从节点的信息。
  • 第二个配置文件:除了配置了主节点的监控信息外,还列出了两个从节点和一个已知的哨兵节点的信息。
  • 第三个配置文件:仅配置了主节点的监控信息,没有列出任何从节点或其他哨兵节点的信息。
  • 因此,第三个配置文件只关注主节点的监控和故障转移,而忽略了从节点和其他哨兵节点的配置。这意味着在故障转移时,没有指定的从节点或其他哨兵节点来协助决策和执行故障转移操作。
  • 如果你只关注主节点的故障转移,并且不需要从节点或其他哨兵节点的协助,那么这个简化的配置文件足够了。但是,如果你希望实现完整的哨兵机制,包括从节点和多个哨兵节点的协作,那么你需要在配置文件中添加相应的信息

Raft 算法简单的剖析

Raft主要有三个角色:领导者、追随者、候选者

  • 初始状态下,所有哨兵节点都是追随者,当一个节点成为领导者时,它负责处理客户端请求和复制日志给其他节点。如果当前的领导者失去联系或发生故障,其他节点会发起选举来选择新的领导者。
  • 如果一个哨兵节点在一段时间内无法与其他节点通信,它会尝试成为领导者,当多个哨兵节点都尝试成为领导者时,它们会进行选举,即从跟随者转变成为候选者,然后它会向其他节点发送选举请求,求请求他们投票,节点可以投给自己或其他节点,当一个节点收到了大多数节点的投票时(一般是超过半数),它将成为新的领导者
  • 成为领导者的哨兵节点会向其他节点发送心跳信号来维持其领导地位
  • 如果一个追随者在一段时间内没有收到领导者的心跳信号,它会尝试成为领导者
  • 领导者负责监控主节点的健康状态,并在需要时执行故障转移操作
  • 当主节点出现故障时,领导者会通知其他节点进行故障转移,选出新的主节点
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容