Redis哨兵模式部署

root
233
文章
0
评论
2021年3月4日19:03:41 评论 6352字阅读21分10秒

Redis哨兵模式部署

主机宕机

将宕机的master下线

找一个slave作为master

通知所有的slave连接新的master

启动新的master与slave

全量复制*N+部分复制*N

哨兵

哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控。当初夏故障通过投票机制选择新的master并将所有的slave连接到新的master

哨兵的作用

1.监控

  • 不断的检查master和slave是否正常进行
  • master存活检测,master与slave运行情况检查

2.通知(提醒)

  • 当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知)

3.自动故障转移

  • 断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址

注意:

  • 哨兵也是一台redis服务器,只是不提供数据服务
  • 常哨兵配置数量为单数

启动哨兵模式

配置哨兵

  • 配置一拖二的主从结构
  • 配置三个哨兵(配置相同,端口不同)
    • sentinel.conf
  • 启动哨兵
redis-sentinel sentinel-端口号.conf

 

[root@kafka01 redis]# egrep -v "^#|^$" sentinel.conf 
port 26379    //
daemonize no
pidfile /var/run/redis-sentinel.pid
logfile ""
dir /tmp
sentinel monitor mymaster 127.0.0.1 6379 2 //监控的主 2是几个哨兵认定master挂了
sentinel down-after-milliseconds mymaster 30000  毫秒单位(30s)//主连接多长时间没响应就认定挂了
sentinel parallel-syncs mymaster 1    //新的maste上任,开始同步一次有多个开始同步,越小服务器压力越小
sentinel failover-timeout mymaster 180000  //在进行同步多长时间超时 毫秒单位(180s)
sentinel deny-scripts-reconfig yes

 

port 26379 

  • # 哨兵sentinel实例运行的端口 默认26379 port 26379

dir ./   

  • # 哨兵sentinel的工作目录

sentinel monitor mymaster 127.0.0.1 6379 2

  • # 哨兵sentinel监控的redis主节点的 ip port 10
  • # master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。 11
  • # quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了 
  • # sentinel monitor <master-name> <ip> <redis-port> <quorum> 13
  • sentinel monitor mymaster 127.0.0.1 6379 2

sentinel down-after-milliseconds mymaster 30000

  • # 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
  • # sentinel down-after-milliseconds <master-name> <milliseconds>

sentinel parallel-syncs mymaster 1

  • # 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步, 这个数字越小,完成failover所需的时间就越长, 但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
  • 可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
  • # sentinel parallel-syncs <master-name> <numslaves>

sentinel failover-timeout mymaster 180000

  • # 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
  • #1. 同一个sentinel对同一个master两次failover之间的间隔时间。
  • #2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
  • #3.当想要取消一个正在进行的failover所需要的时间。
  • #4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
  • # 默认三分钟 # sentinel failover-timeout <master-name> <milliseconds>

 

[root@kafka01 redis]# mkdir -p conf
[root@kafka01 redis]# egrep -v "^#|^$" sentinel.conf >./conf/sentinel-26379.conf

 

 

Redis集群规划

服务器名称节点类型IP地址端口
kafka01Redis服务1(主节点Master)192.168.1.87000
kfaka02Redis服务2(从节点slave1)192.168.1.97001
kafka03Redis服务3(从节点slave2)192.168.1.107002
Sentinel01哨兵服务1192.168.1.826379
Sentinel02哨兵服务2192.168.1.926380
Sentinel03哨兵服务3192.168.1.1026381

搭建主从模式

主服务器(上图的Node1)配置文件 redis.config 主要配置项:详情请看Redis6-redis.conf配置文件说明

[root@kafka01 redis]# egrep -v "^#|^$" redis.conf > redis-6379.conf

 

初始化环境

 echo '511' > /proc/sys/net/core/somaxconn

 

echo 1 > /proc/sys/vm/overcommit_memory

 

echo madvise > /sys/kernel/mm/transparent_hugepage/enabled

 

Redis配置

master

建立安装Redis时会用到的文件夹

[root@kafka01 redis]# mkdir -p /usr/local/redis/7000/{run,logs,data,conf}

设置redis配置文件

[root@kafka01 redis]# egrep -v "^#|^$" redis.conf > 7000/conf/redis_7000.conf

打开redis_7000.conf文件,添加/修改以下内容:

[root@kafka01 redis]# vim 7000/conf/redis_7000.conf
bind 192.168.1.8   #添加本机的ip
port 7000  #端口  
pidfile /usr/local/redis/7000/run/redis_7000.pid   #pid存储目录
logfile /usr/local/redis/7000/logs/redis_7000.log   #日志存储目录
dir /usr/local/redis/7000/data                #数据存储目录,目录要提前创建好
protected-mode no                              #外部网络直接访问
requirepass 12345678                         #从哨兵连接主的密码
masterauth 12345678                         #master的密码,和哨兵密码一致
appendonly yes  #持久化
daemonize yes   #守护进程

修改sentinel.conf

[root@kafka01 redis]# egrep -v "^#|^$" sentinel.conf > 7000/conf/sentinel_7000.conf
port 26379
daemonize yes  
protected-mode no  
pidfile /usr/local/redis/7000/run/sentinel_7000.pid
logfile /usr/local/redis/7000/logs/sentinel_7000.log
dir /usr/local/redis/7000/data
sentinel monitor mymaster 192.168.1.8 7000 2  #守护主节点
sentinel auth-pass mymaster 12345678          #连接主节点的密码
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

设置192.168.1.9从节点

redis.conf添加

bind 192.168.1.9 #添加本机的ip 
port 7001 #端口   
pidfile /usr/local/redis/7001/run/redis_7001.pid #pid存储目录 
logfile /usr/local/redis/7001/logs/redis_7001.log #日志存储目录 
dir /usr/local/redis/7001/data #数据存储目录,目录要提前创建好 
protected-mode no #外部网络直接访问 
requirepass 12345678 #从哨兵连接主的密码 
masterauth 12345678  #slave连接master的密码
appendonly yes #持久化 
daemonize yes #守护进程
slaveof 192.168.1.8 7000 #从节点
slave-read-only yes #从节点只读不写入

修改sentinel.conf

port 26380
daemonize yes 
protected-mode no 
pidfile /usr/local/redis/7001/run/sentinel_7001.pid 
logfile /usr/local/redis/7001/logs/sentinel_7001.logs
dir /usr/local/redis/7001/data
sentinel monitor mymaster 192.168.1.8 7000 2 #守护主节点 
sentinel auth-pass mymaster 12345678 #连接主节点的密码 
sentinel down-after-milliseconds mymaster 30000 
sentinel parallel-syncs mymaster 1 
sentinel failover-timeout mymaster 180000 
sentinel deny-scripts-reconfig yes

设置192.168.1.10从节点

redis.conf添加

bind 192.168.1.10 #添加本机的ip 
port 7002 #端口   
pidfile /usr/local/redis/7002/run/redis_7002.pid #pid存储目录
logfile /usr/local/redis/7002/logs/redis_7002.log  #日志存储目录
dir /usr/local/redis/7002/data   #数据存储目录,目录要提前创建好 
protected-mode no          #外部网络直接访问 
requirepass 12345678      #从哨兵连接主的密码 
masterauth 12345678       #slave连接master的密码
appendonly yes                #持久化 
daemonize yes                 #守护进程
slaveof 192.168.1.8 7000  #从节点
slave-read-only yes          #从节点只读不写入

修改sentinel.conf

port 26381
daemonize yes 
protected-mode no 
pidfile /usr/local/redis/7002/run/sentinel_7002.pid 
logfile /usr/local/redis/7002/logs/sentinel_7002.log
dir /usr/local/redis/7002/data 
sentinel monitor mymaster 192.168.1.8 7000 2 #守护主节点 
sentinel auth-pass mymaster 12345678 #连接主节点的密码 
sentinel down-after-milliseconds mymaster 30000 
sentinel parallel-syncs mymaster 1 
sentinel failover-timeout mymaster 180000 
sentinel deny-scripts-reconfig yes

 

启动主节点

[root@kafka01 redis]# ./bin/redis-server ./7000/conf/redis_7000.conf

启动从节点

[root@kafka02 redis]# ./bin/redis-server ./7001/conf/redis_7001.conf
[root@kafka03 redis]# ./bin/redis-server ./7002/conf/redis_7002.conf

启动主节点哨兵

[root@kafka01 redis]# ./bin/redis-sentinel ./7000/conf/sentinel_7000.conf

启动从节点哨兵

[root@kafka02 redis]# ./bin/redis-sentinel ./7001/conf/sentinel_7001.conf
[root@kafka03 redis]# ./bin/redis-sentinel ./7002/conf/sentinel_7002.conf

 

连接节点查看配置

master

[root@kafka01 redis]# redis-cli -h 192.168.1.8 -p 7000 -a 12345678

slave1

[root@kafka02 redis]# redis-cli -h 192.168.1.9 -p 7001 -a 12345678

slave2

[root@kafka03 redis]# redis-cli -h 192.168.1.10 -p 7002 -a 12345678

 

停止master测试哨兵

[root@kafka01 redis]# ps -ef|grep redis
root      37200      1  0 16:59 ?        00:00:02 ./bin/redis-server 192.168.1.8:7000
root      37233      1  0 17:03 ?        00:00:01 ./bin/redis-sentinel *:26379 [sentinel]
root      37259  36496  0 17:19 pts/1    00:00:00 grep --color=auto redis

[root@kafka01 redis]# kill -9 37200

[root@kafka01 redis]# ps -ef|grep redis
root      37233      1  0 17:03 ?        00:00:01 ./bin/redis-sentinel *:26379 [sentinel]
root      37267  36496  0 17:20 pts/1    00:00:00 grep --color=auto redis

查看从节点是否成为master,192.168.1.9已经成为了master

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年3月4日19:03:41
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Redis6-redis.conf配置文件说明 Redis

Redis6-redis.conf配置文件说明

Redis6-redis.conf配置文件说明 ###NETWORK(网络)###(需记) bind 默认配置项:bind 127.0.0.1 说明:Redis服务监听地址,用于Redis客户端连接,...
Redis持久化 Redis

Redis持久化

Redis持久化   什么是持久化 利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化   为什么要进行持久化 防止数据的意外丢失,确保数据安全...
Redis 的基本操作 Redis

Redis 的基本操作

Redis 的基本操作 作为缓存使用 原yun始业务功能设计 秒杀 618活动 春节买票 运营平台监控到的突发高频访问数据 突发时政要闻,被强势关注 高频,复杂的统计数据 在线人数   ke...
Redis安装 Redis

Redis安装

Redis安装 Redis的应用 为热点数据加速查询(主要场景),如热点商品,热点新闻,热点资讯,推广类等高访问量信息等 任务队列,如秒杀,抢购,购票排队等 及时信息查询,如各位排行榜,各类网站访问统...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: