【部署篇】Redis-04哨兵模式部署(源码方式安装)

devtools/2024/10/22 4:19:19/
htmledit_views">

 一、准备主机 

Redis的哨兵模式是生产环境中常用的部署模式之一,解决数据容灾和单点故障问题,实现主从自动切换;生产环境中建议让sentinel(哨兵)单独部署,如果资源有限可以和数据节点部署在同一主机。

主机IP角色说明
192.168.128.31master+sentinel,主节点可读写。
192.168.128.32slave+sentinel,从节点只读,同步主节点数据。
192.168.128.33slave+sentinel,从节点只读,同步主节点数据。

二、下载Redis

进入官网找到下载地址 Downloads - Redis

wget https://download.redis.io/releases/redis-7.0.15.tar.gz

三、Linux源码部署

1、安装依赖

# 安装redis编译依赖,所有主机都执行
yum install -y gcc tcl

 2、安装Redis

## 以下为安装redis服务,所有主机都执行# 解压
tar -zxvf redis-7.0.15.tar.gz# 移动redis目录
mv redis-7.0.15 /usr/local/redis# 编译
cd /usr/local/redis
make# 安装
make install

3、修改配置

1)、配置master节点

# 修改配置文件以符合你的需求(更多参数可参考Redis-01介绍)# 启用守护进程
sed -i 's/^daemonize no/daemonize yes/' /usr/local/redis/redis.conf# 绑定所有本机IP地址
sed -i 's/^bind .*/bind 0.0.0.0/' /usr/local/redis/redis.conf# 设置认证密码
sed -i 's/# requirepass .*/requirepass 123456/' /usr/local/redis/redis.conf

2)、配置slave节点

默认配置replica-read-only yes及从机为只读,不用修改;这里是新版本的参数配置,老版本对应的是slaveof 和slave-read-only yes。


# 修改配置文件以符合你的需求(更多参数可参考Redis-01介绍)# 启用守护进程
sed -i 's/^daemonize no/daemonize yes/' /usr/local/redis/redis.conf# 绑定所有本机IP地址
sed -i 's/^bind .*/bind 0.0.0.0/' /usr/local/redis/redis.conf# 设置认证密码
sed -i 's/# requirepass .*/requirepass 123456/' /usr/local/redis/redis.conf# 配置主节点IP和端口
echo "replicaof 192.168.128.31 6379" >> /usr/local/redis/redis.conf# 配置主节点认证密码
echo "masterauth 123456" >> /usr/local/redis/redis.conf

3)、配置哨兵配置文件

#是否已后台daemon方式启动
sed -i 's/^daemonize no/daemonize yes/' /usr/local/redis/sentinel.conf#设置要监控的master服务器,quorum表示最少有几个哨兵认可客观下线,同意故障迁移的法定票数
sed -i 's/^sentinel monitor .*/sentinel monitor mymaster 192.168.128.31 6379 2/' /usr/local/redis/sentinel.conf#master设置了密码,连接master服务的密码
echo "sentinel auth-pass mymaster 123456" >> /usr/local/redis/sentinel.conf

其他哨兵配置(默认及可)

#安全保护模式
protected-mode no#哨兵端口
port 26379#pid文件路径
pidfile /var/run/redis-sentine.pid#工作目录
dir /tmp#指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线
sentinel down-after-milliseconds <master-name> <milliseconds>:#表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据
sentinel parallel-syncs <master-name> <nums>:#故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败
sentinel failover-timeout <master-name> <milliseconds>:#配置当某一事件发生时所需要执行的脚本
sentinel notification-script <master-name> <script-path> :#客户端重新配置主节点参数脚本
sentinel client-reconfig-script <master-name> <script-path>:

4、启动服务

# 主从服务器都执行以下命令启动Redis服务
redis-server /usr/local/redis/redis.conf# 所有节点运行以下命令启动哨兵服务
redis-server /usr/local/redis/sentinel.conf --sentinel

5、关闭防火墙

## 这里直接关闭防火墙,也可以在防火墙中放天6379端口 # 关闭防火墙
systemctl stop firewalld

6、主从状态

 1)、查看主节点主从状态

role:master,表示当前节点为主节点,connected_slaves:1表是有一个从节点在线。

# 连接到主节点
redis-cli -h 192.168.128.31# 密码认证
> auth 123456# 查看主从同步状态
> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.128.32,port=6379,state=online,offset=42,lag=0
master_failover_state:no-failover
master_replid:835b68d4267a5b50be60493529b9c052d430e83e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42

 2)、查看从节点主从状态

role:slave,表示当前节点为从节点,master_failover_state:no-failover表示主从同步状态无错误,状态正常。

redis-cli
127.0.0.1:6379> info replication
NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.128.31
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_read_repl_offset:252
slave_repl_offset:252
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:835b68d4267a5b50be60493529b9c052d430e83e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:252
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:252

3)、查看哨兵状态

哨兵运行成功后,会在配置文件的尾首生成如下信息。

# 查看哨兵运行信息,在文件尾首
cat /usr/local/redis/sentinel.conf# Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
user default on nopass ~* &* +@all
sentinel myid ee369693cdcda3b20c693d2818d3d4fa9f369a0c
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0sentinel known-replica mymaster 192.168.128.32 6379sentinel known-sentinel mymaster 192.168.128.31 26379 128b00eba59d102e298ae587c254b0a9bbe53ef1

7、停止服务

redis-cli shutdown

四、卸载redis

  1. 查找Redis安装路径‌:

    • 使用命令which redis-server查找Redis可执行文件的路径。
  2. 使用CMake卸载Redis‌:

    • 进入最初构建Redis的源代码目录。
    • 执行命令make uninstall进行卸载。
  3. 手动删除残余文件‌:

    • 使用命令find /usr/local/bin -name "redis*" -exec rm -rf {} \;找到并删除Redis相关的残余文件。
  4. 验证卸载是否成功‌:

    • 执行命令redis-server --version,若卸载成功,终端应显示“command not found”或类似信息。

五、安装常见问题

1、编译环境错误

    在未安装gcc、tcl前进行了make,编译报如下错误;安装后,再次make还是报如下错误,这时需要先进行清理再进行编译:make distclean && make。

In file included from adlist.c:34:0:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory#include <jemalloc/jemalloc.h>^
compilation terminated.

 六、更多Redis文章跟篇

【部署篇】Redis-01介绍
【部署篇】Redis-02单机模式部署(源码方式安装)
【部署篇】Redis-03主从模式部署(源码方式安装)
【部署篇】Redis-04哨兵模式部署(源码方式安装)


http://www.ppmy.cn/devtools/125544.html

相关文章

Java:数据结构-LinkedList和链表(2)

一 LinkedList LinkedList的方法的实现 1.头插法 public class MyLinkedList implements IList{static class ListNode{public int val;public ListNode next;public ListNode prev;public ListNode(int val){this.valval;}}public ListNode head;public ListNode last;Overr…

neovim ubuntu中WARNING No clipboard tool found

我在vnc远程的ubuntu中做个临时开发&#xff0c;发现neovim无法复制文字&#xff0c;于是我:checkhealth查看了一下&#xff0c;测试结果如下&#xff1a; WARNING No clipboard tool found. Clipboard registers (" and "*) will not work.ADVICE::help clipboard …

flask项目框架搭建

目录结构 blueprints python包&#xff0c;蓝图文件&#xff0c;相当于路由组的概念,方便模块化开发 例如auth.py文件 from flask import Blueprint, render_templatebp Blueprint("auth", __name__, url_prefix"/auth")bp.route("/login") d…

R语言:ERGM指数随机图模型4:缺失值处理

文章目录 缺失数据可用的ERGM变量缺失数据 区分没有联系和不知道是否存在联系(即数据缺失Missing data)这两种情况是很重要的。前者是观察到的零,而后者是未被观察到的。我们不应该将这两种情况都编码为“0”。只要我们将数据识别为缺失数据,“ergm”包就能适当地识别并处…

Vue环境安装以及配置

这里写目录标题 前言一、前置要求1.安装Node.js2. 安装VScode 二、创建全局安装目录和缓存日志目录三、配置环境变量四、权限五、配置镜像六、vscode插件1. Vue-Offical2. Vue 3 Snippets3. Path Intellisense4. Auto Import5. Auto Close Tag6. Auto Rename Tag7.GitLens总结 …

基于PHP+uniapp的民宿预订系统的微信小程序设计与实现 ea9i3

目录 项目介绍技术栈和环境说明具体实现截图php技术介绍文件解析微信开发者工具HBuilderXuniapp开发技术简介解决的思路性能/安全/负载方面数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 项目介绍 总体上看&#xff0c;Android的民宿预订系统…

<Linux> 线程安全

目录 文章目录 一、Linux线程互斥 1. 进程线程间的互斥相关背景概念 2. 互斥量mutex 3. 互斥量接口 初始化互斥量 动静态分配 销毁互斥量 互斥量加锁 互斥量解锁 4. 互斥量实现原理 5. 简单封装互斥量 二、可重入与线程安全 1. 概念 1.1 可重入 1.2 线程安全 2. 常见的线程不…

Linux系统和数据库常用的命令2

Linux系统和数据库常用的命令2 1、两台Linux机器ssh免密登录 client端登录server端需要免密&#xff0c;只需把公钥发送到server就可&#xff0c;会在server端生成一个authorized_keys文件 # 108机器上[rootclient ~]# ssh-keygen -t rsa // 非对称算法 Generating public/…