本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

redis6.x哨兵模式安装配置

发布于2021-06-14 01:49     阅读(1033)     评论(0)     点赞(12)     收藏(3)


一、redis安装部署

  • 下载redis最新安装包
wget http://download.redis.io/releases/redis-6.0.6.tar.gz
  • 升级gcc
    centos7 默认的 gcc 默认是4.8.5,版本小于 5.3 无法编译,需要先安装gcc新版才能编译
yum -y install gcc-c++

升级gcc       #这里要升级一下,否则编译时候会报错
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile  
  • 解压、安装
tar -zxvf redis-6.0.6.tar.gz -C /opt/local
cd  /usr/local/redis-6.0.6/
make
cd src/ 
make install 
  • 修改默认配置
cp /usr/local/redis-6.0.0/redis.conf /etc/redis/
# 修改redis配置文件
vi /etc/redis/redis.conf
--------------------------------------------------------------------------------
#不限制远程连接
bind 0.0.0.0
#设置连接密码
requirepass "123456"
#允许后台启动redis
daemonize yes
--------------------------------------------------------------------------------
  • 启动redis服务
 /usr/local/redis-6.0.0/src/redis-server /etc/redis/redis.conf  /etc/redis/redis.conf 
[root@iZ2zejaz33icbod2k4cvy6Z redis-5.0.0]# redis-cli
--------------------------------------------------------------------------------
127.0.0.1:6379> auth 123456
OK
--------------------------------------------------------------------------------

二、redis哨兵集群搭建

2.1 架构

主从结构+哨兵(sentinel),实现容灾的自动切换,如下图所示:
在这里插入图片描述
一个主节点(master)可拥有多个从节点(slave),从节点实现对主节点的复制,保证数据同步。而哨兵(sentinel)则对各节点进行监控,主要包括主节点存活检测、主从运行情况检测等,一旦主节点宕机,哨兵可自动进行故障转移 (failover)、主从切换。接下来就开始搭建这样一个集群,首先是主从结构,然后是哨兵模式。

2.2 主从搭建

  • 文件准备
#存放主节点配置
mkdir -p /etc/redis/master
#存放slave1节点配置
mkdir -p /etc/redis/slave1
#存放slave2节点配置
mkdir -p /etc/redis/slave2
#存储日志
mkdir -p /usr/local/redis-6.0.0/log
cp /etc/redis/redis.conf  /etc/redis/master/
cp /etc/redis/redis.conf  /etc/redis/slave1/
cp /etc/redis/redis.conf  /etc/redis/slave2/
  • 主节点配置文件redis.conf
vi /etc/redis/master/redis.conf 
---------------------------------------------------------------------------------
bind 0.0.0.0
port 6379
daemonize yes
​
requirepass "123456"
​
logfile "/usr/local/redis-6.0.0/log/redis1.log"
dbfilename "master.rdb"
appendonly yes
appendfilename "master.aof"
masterauth "123456"
--------------------------------------------------------------------------------
  • slave1节点配置文件redis.conf
vi /etc/redis/slave1/redis.conf 
---------------------------------------------------------------------------------
bind 0.0.0.0
port 6380
daemonize yes
​
requirepass "123456"
​
logfile "/usr/local/redis-6.0.0/log/redis2.log"
dbfilename "slave1.rdb"
appendonly yes
appendfilename "slave1.aof"
replicaof 47.91.232.xxx 6379
masterauth "123456"
--------------------------------------------------------------------------------
  • slave2节点配置文件redis.conf
vi /etc/redis/slave2/redis.conf 
---------------------------------------------------------------------------------
bind 0.0.0.0
port 6381
daemonize yes
​
requirepass "123456"
​
logfile "/usr/local/redis-6.0.0/log/redis3.log"
dbfilename "slave2.rdb"
appendonly yes
appendfilename "slave2.aof"
replicaof 47.91.232.xxx 6379
masterauth "123456"
--------------------------------------------------------------------------------
  • 启动服务
/usr/local/redis-6.0.0/src/redis-server /etc/redis/master/redis.conf 
/usr/local/redis-6.0.0/src/redis-server /etc/redis/slave1/redis.conf 
/usr/local/redis-6.0.0/src/redis-server /etc/redis/slave2/redis.conf 

2.3 验证

  • 主节点info replication 查看状态
/usr/local/redis-6.0.0/src/redis-cli -p 6379
------------------------------------------------------------------------------------
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master					#角色:主节点
connected_slaves:2   		#两个从节点链接上来了
slave0:ip=47.91.232.223,port=6380,state=online,offset=266,lag=1		#从节点1信息
slave1:ip=47.91.232.223,port=6381,state=online,offset=266,lag=1		#从节点2信息
master_failover_state:no-failover
master_replid:3eeab8b1fff922f61ea0cb259d830128ba53b0e2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:266
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:266
----------------------------------------------------------------------------------
  • 数据同步验证
    主节点set数据
    在这里插入图片描述
    slave1节点查看数据同步情况
    在这里插入图片描述
    slave2节点查看数据同步情况
    在这里插入图片描述

2.4 Redis6.X主从复制-读写分离原理解析**

主从复制分两种(主从刚连接的时候,进行全量同步;全同步结束后,进行增量同步)

  • 全量复制
    1、master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件
    2、主服务器会缓存所有接收到的来自客户端的写命令,当后台保存进程 处理完毕后,会将该rdb文件传递给slave服务器
    3、slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存
    在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器
    4、然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性

  • 增量复制
    1、Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程
    2、服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令

  • 特点
    1、主从复制对于 主/从 redis服务器来说是非阻塞的,所以同步期间都可以正常处理外界请求
    2、一个主redis可以含有多个从redis,每个从redis可以接收来自其他从redis服务器的连接
    3、从节点不会让key过期,而是主节点的key过期删除后,成为del命令传输到从节点进行删除

  • 加速复制
    1、完全重新同步需要在磁盘上创建一个RDB文件,然后加载这个文件以便为从服务器发送数据
    2、在比较低速的磁盘,这种操作会给主服务器带来较大的压力
    3、新版支持无磁盘的复制,子进程直接将RDB通过网络发送给从服务器,不使用磁盘作为中间存储
    4、repl-diskless-sync yes (默认是no)

  • 主从断开重连
    1、如果遭遇连接断开,重新连接之后可以从中断处继续进行复制,而不必重新同步
    2、2.8版本后 部分重新同步这个新特性内部使用PSYNC命令,旧的实现中使用SYNC命令

在这里插入图片描述
在这里插入图片描述

三、哨兵模式搭建

3.1 概览

背景

  • 前面搭建了主从,当主服务器宕机后,需要手动把一台从服务器切换为主服务器,人工干预费事费力,还会造成一段时间内服务不可用

哨兵模式介绍

  • Redis提供了哨兵的命令,是一个独立的进程
  • 原理 哨兵通过发送命令给多个节点,等待Redis服务器响应,从而监控运行的多个Redis实例的运行情况
  • 当哨兵监测到master宕机,会自动将slave切换成master,通过通知其他的从服务器,修改配置文件切换主机

Sentinel三大工作任务

  • 监控(Monitoring)
    Sentinel 会不断地检查你的主服务器和从服务器是否运作正常

  • 提醒(Notification)
    当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知

  • 自动故障迁移(Automatic failover)
    当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器
    当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器

核心流程

  • 每秒ping,超过时间不响应 则认为主观下线
  • 满足多个,则认为是客观下线
  • 投票选择主节点
  • 如果没有足够的节点同意master下线,则状态会被移除

3.2 安装配置

配置3个哨兵,每个哨兵的配置都是一样的

  • 环境准备
mkdir -p /var/log/redis
mkdir -p /etc/redis/sentinel
  • 在目录下创建3个文件sentinel-1.conf、sentinel-2.conf、sentinel-3.conf
port 26379
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel-1.pid"
logfile "/var/log/redis/sentinel_26379.log"
dir "/tmp"
sentinel monitor mymaster 47.91.232.xxx 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 30000
port 26380
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel-2.pid"
logfile "/var/log/redis/sentinel_26380.log"
dir "/tmp"
sentinel monitor mymaster 47.91.232.xxx 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 30000
port 26381
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel-3.pid"
logfile "/var/log/redis/sentinel_26381.log"
dir "/tmp"
sentinel monitor mymaster 47.91.232.xxx 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 30000
  • 启动哨兵
/usr/local/redis-6.0.0/src/redis-server /etc/redis/sentinel/sentinel-1.conf --sentinel
/usr/local/redis-6.0.0/src/redis-server /etc/redis/sentinel/sentinel-2.conf --sentinel
/usr/local/redis-6.0.0/src/redis-server /etc/redis/sentinel/sentinel-3.conf --sentinel
[root@nodec sentinel]# ps -ef|grep redis
---------------------------------------------------------------------------------
root      9593     1  0 16:16 ?        00:00:00 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:26379 [sentinel]
root      9685     1  0 16:16 ?        00:00:00 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:26380 [sentinel]
root      9691     1  0 16:16 ?        00:00:00 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:26381 [sentinel]
root      9697  5569  0 16:16 pts/0    00:00:00 grep --color=auto redis
root     24717     1  0 14:29 ?        00:00:12 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:6379
root     24889     1  0 14:30 ?        00:00:11 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:6380
root     24979     1  0 14:30 ?        00:00:11 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:6381
----------------------------------------------------------------------------------------
  • 哨兵日志信息查看
    tail -fn 300 /var/log/redis/sentinel_26380.log
    在这里插入图片描述
  • 验证
[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-cli -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1		# 1主
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=47.91.232.223:6379,slaves=2,sentinels=3 # 主节点地址,从节点数量、哨兵数量等信息
  • 验证(主从切换)
#杀死主节点
[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-cli -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> shutdown
not connected> 

sentinel日志信息查看
在这里插入图片描述
6380节点查看集群信息

[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-cli -p 6380
127.0.0.1:6380> auth 123456
OK
127.0.0.1:6380> info replication
# Replication
role:master					#6380变成主节点
connected_slaves:1			#从节点还剩一个
slave0:ip=47.91.232.223,port=6381,state=online,offset=235362,lag=1  #从节点信息
master_failover_state:no-failover		
master_replid:7388cf73f23fe27959694460831602caf8aadde2
master_replid2:3eeab8b1fff922f61ea0cb259d830128ba53b0e2
master_repl_offset:235517
second_repl_offset:167212
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:235517

重启6379节点,查看节点信息

[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-server /etc/redis/master/redis.conf 
[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-cli -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:slave					#6379变成从节点
master_host:47.91.232.223
master_port:6380			#6380是主节点
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:284084
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:7388cf73f23fe27959694460831602caf8aadde2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:284084
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:279522
repl_backlog_histlen:4563

至此,测试完成。

原文链接:https://blog.csdn.net/han949417140/article/details/117811078



所属网站分类: 技术文章 > 博客

作者:天上飘来一个字

链接:http://www.phpheidong.com/blog/article/96564/60834d7eff7a49c816b5/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)