Redis构建缓存服务器

环境信息:
redis-master----192.168.12.135
redis-slave-1-----192.168.12.136
redis-slave-2-----192.168.12.137

单机版Redis

安装Redis

yum install -y gcc make jemalloc jemalloc-devel gcc-c++ wget tcl
yum groupinstall -y "Development Tools"
wget http://download.redis.io/releases/redis-8.0.2.tar.gz
tar xzf redis-8.0.2.tar.gz -C /usr/local/
mv /usr/local/redis-8.0.2  /usr/local/redis
cd /usr/local/redis
mkdir /usr/local/redis/data
vim redis.conf
#找到以下内容进行修改
bind 0.0.0.0    #监听ip地址
protected-mode no    #关闭保护模式
daemonize yes    #后台运行
logfile "/var/log/redis.log"   #日志存放位置
save 3600 1 300 100 60 10000    #RDB持久化触发设置
dir /usr/local/redis/data    #持久化生成文件存放位置
appendonly yes    #开启AOF持久化make MALLOC=libc
make MALLOC=libc install

编写使用system管理

vim /lib/systemd/system/redis.service    #编写使用system管理
[Unit]
Description=Redis
After=network.target[Service]
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf  --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown[Install]
WantedBy=multi-user.target

连接数据库

systemctl daemon-reload    #重新加载system
systemctl start redis    #启动redis
systemctl status redis    #查看redis是否启动
netstat -tnlp    #查看6379端口是否监听
cd /usr/local/redis/src/
./redis-cli -h 192.168.12.135 -p 6379    #连接数据库
#输入ping,返回pong测试连接成功

Redis主从

设置主从

从节点根据单机版先进行安装redis

#以下操作在两个从节点进行操作
cd /usr/local/redis/
vim redis.conf
replicaof 192.168.12.135 6379    #添加主节点ip及端口号
protected-mode no    #关闭保护模式
#保护模式单节点部署已经关闭systemctl restart redis.service

测试主从

#主节点
cd /usr/local/redis/src/
./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name Disallow
OK
127.0.0.1:6379> get name
"Disallow"
#从节点
127.0.0.1:6379> get name
"Disallow"

查看复制状态

#主节点
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.12.137,port=6379,state=online,offset=1469,lag=0
slave1:ip=192.168.12.136,port=6379,state=online,offset=1469,lag=0
master_failover_state:no-failover
master_replid:a737b93a8106e8505a1ed2e92435e5cc6977a0f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1469
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1455#从节点
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.12.135
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_read_repl_offset:1469
slave_repl_offset:1469
replica_full_sync_buffer_size:0
replica_full_sync_buffer_peak:0
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a737b93a8106e8505a1ed2e92435e5cc6977a0f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1469
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1455

Redis哨兵

设置哨兵

#三台机器都操作
cd /usr/local/redis/
vim sentinel.conf
daemonize yes    #设置哨兵放后台运行
logfile "/var/log/sentinel.log"    #设置哨兵日志
sentinel monitor mymaster 192.168.12.135 6379 2    #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000    #单位毫秒,默认是30000,根据自己需求修改
sentinel failover-timeout mymaster 10000    ##若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败
protected-mode no    #关闭加密模式--新添加到sentinel配置文件中  ----老版本中需需要添加./src/redis-sentinel sentinel.conf    #运行redis 
#老版本:./src/redis-sentinel sentinel.conf & 

测试哨兵

#主节点停止redis
systemctl stop redis.service    
#从节点登录数据库查看主从状态
cd /usr/local/redis/src
./redis-cli
127.0.0.1:6379> info replication

Redis集群搭建

本次搭建使用3台机器搭建,每台机器上面两个redis实例,一个master一个slave,第一列做主库,第二列做备库。
redis-cluster1 192.168.12.135 7000、7001
redis-cluster2 192.168.12.136 7002、7003
redis-cluster3 192.168.12.137 7004、7005

Redis安装及配置文件修改

三台机器Redis安装按照单机版先进行按照

#分别在三台机器创建集群目录、持久化目录、配置文件及修改配置文件
#redis-cluster1
mkdir -p /usr/local/redis/cluster/{7000,7001}
mkdir -p /usr/local/redis/data/{7000,7001}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7000
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7001
vim /usr/local/redis/data/7000/redis.conf
bind 192.168.12.135    #每个实例的配置文件修改为对应节点的ip地址
port 7000
daemonize yes
pidfile /var/run/redis_7000.pid    #pid文件,运行多个实例时,需要指定不同的pid文件
logfile /var/log/redis_7000.log    #日志文件位置,运行多实例时,需要将文件修改的不同。
dir /usr/local/redis/data/7000
appendonly yes    #开启AOF持久化
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes    #启用集群
cluster-config-file nodes-7000.conf    #集群配置文件,由redis自动更新,不需要手动配置,运行多实例时请注修改为对应端口
cluster-node-timeout 15000    #单位毫秒。集群节点超时时间,即集群中主从节点断开连接时间阈值,超过该值则认为主节点不可以,从节点将有可能转为master
cluster-replica-validity-factor 10    #在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。
cluster-migration-barrier 1    #一个主机将保持连接的最小数量的从机,以便另一个从机迁移到不再被任何从机覆盖的主机
cluster-require-full-coverage yes  #集群中的所有slot(16384个)全部覆盖,才能提供服务#7001配置文件将7000内的所有7000更换成7001即可#redis-cluster2
mkdir -p /usr/local/redis/cluster/{7002,7003}
mkdir -p /usr/local/redis/data/{7002,7003}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7002
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7003#7002配置文件将7000内配置文件bind改为‘redis-cluster2’机器的ip,同时将配置文件内7000改为7002即可,7003同理#redis-cluster3
mkdir -p /usr/local/redis/cluster/{7004,7005}
mkdir -p /usr/local/redis/data/{7004,7005}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7004
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7005#7004配置文件将7000内配置文件bind改为‘redis-cluster3’机器的ip,同时将配置文件内7000改为7004即可,7005同理

Redis启动及集群创建

#启动三台机器上面的每个节点
#redis-cluster1
cd /usr/local/redis/src/
./redis-server ../cluster/7000/redis.conf 
./redis-server ../cluster/7001/redis.conf#redis-cluster2
cd /usr/local/redis/src/
./redis-server ../cluster/7002/redis.conf 
./redis-server ../cluster/7003/redis.conf#redis-cluster3cd /usr/local/redis/src/
./redis-server ../cluster/7004/redis.conf 
./redis-server ../cluster/7005/redis.conf#创建集群:在其中一个节点操作就可以
#redis节点搭建起来后,需要完成redis cluster集群搭建,搭建集群过程中,需要保证6个redis实例都是运行状态。Redis是根据IP和Port的顺序,确定master和slave的,所以要排好序,再执行。
cd /usr/local/redis/src/
./redis-cli --cluster create --cluster-replicas 1 192.168.12.135:7000 192.168.12.135:7001 192.168.12.136:7002 192.168.12.136:7003 192.168.12.137:7004 192.168.12.137:7005
#--cluster-replicas 1:表示为集群中的每个主节点创建一个从节点.书写流程:主节点ip+port 对应一个从节点ip+port(正常是前面三个节点为主节点,后面的为从节点)

查看Redis集群状态

cd /usr/local/redis/src/
./redis-cli --cluster create --cluster-replicas 1 192.168.12.135:7000 192.168.12.135:7001 192.168.12.136:7002 192.168.12.136:7003 192.168.12.137:7004 192.168.12.137:7005

执行完这个显示类似如下内容则集群部署成功,中途需要输入yes确认

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.12.136:7003 to 192.168.12.135:7000
Adding replica 192.168.12.137:7005 to 192.168.12.136:7002
Adding replica 192.168.12.135:7001 to 192.168.12.137:7004
M: de5b4b2f6a559362ed56d4de1e3994fd529917b5 192.168.12.135:7000slots:[0-5460] (5461 slots) master
S: 2e8c1caa63ac4a1b9a6eea4f0fd5eab4c6b73c21 192.168.12.135:7001replicates 60e3755761c9cbdacb183f59e3d6205da5335e86
M: e0370608cd33ddf5bb6de48b5627799e181de3b6 192.168.12.136:7002slots:[5461-10922] (5462 slots) master
S: 4035841f20f07674671e6bff5d4c6db99c00626b 192.168.12.136:7003replicates de5b4b2f6a559362ed56d4de1e3994fd529917b5
M: 60e3755761c9cbdacb183f59e3d6205da5335e86 192.168.12.137:7004slots:[10923-16383] (5461 slots) master
S: e200afc33b10bd6975160bfeda7277d02371981a 192.168.12.137:7005replicates e0370608cd33ddf5bb6de48b5627799e181de3b6
Can I set the above configuration? (type 'yes' to accept): yes  #写yes同意
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.12.135:7000)
M: de5b4b2f6a559362ed56d4de1e3994fd529917b5 192.168.12.135:7000slots:[0-5460] (5461 slots) master1 additional replica(s)
M: e0370608cd33ddf5bb6de48b5627799e181de3b6 192.168.12.136:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 2e8c1caa63ac4a1b9a6eea4f0fd5eab4c6b73c21 192.168.12.135:7001slots: (0 slots) slavereplicates 60e3755761c9cbdacb183f59e3d6205da5335e86
M: 60e3755761c9cbdacb183f59e3d6205da5335e86 192.168.12.137:7004slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 4035841f20f07674671e6bff5d4c6db99c00626b 192.168.12.136:7003slots: (0 slots) slavereplicates de5b4b2f6a559362ed56d4de1e3994fd529917b5
S: e200afc33b10bd6975160bfeda7277d02371981a 192.168.12.137:7005slots: (0 slots) slavereplicates e0370608cd33ddf5bb6de48b5627799e181de3b6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看集群状态可连接集群中的任一节点,此处连接了集群中的节点192.168.12.135:7000

[root@redis-cluster1 src]# ./redis-cli -h 192.168.12.135 -c -p 7000
192.168.12.135:7000> ping
PONG
192.168.12.136:7002> cluster info  #查看集群信息
cluster_state:ok  #集群状态
cluster_slots_assigned:16384 #分配的槽
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6 #集群实例数
......192.168.12.135:7000> cluster nodes  #查看集群实例

集群操作

客户端登陆–测试链接redis,存取数据(链接集群中任意一台机器就可以。)

[root@redis-cluster1 src]# ./redis-cli -h 192.168.12.135 -c -p 7000
192.168.12.135:7000> ping
PONG
192.168.12.135:7000> set name qianfeng
-> Redirected to slot [5798] located at 192.168.12.136:7002
OK
192.168.12.136:7002>[root@redis-cluster3 src]# ./redis-cli -h 192.168.12.136 -c -p 7002
192.168.12.136:7002> ping 
PONG
192.168.12.136:7002> get name
"qianfeng"
192.168.12.136:7002> exists name  #查看某一个key是否存在
(integer) 1

主从切换

将节点内主节点关闭,登录从节点查看执行CLUSTER nodes查看是否主从切换成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88053.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode python debugger关闭编辑器内的变量值自动显示

vscode 的python debugger调试器的最新版本2025.8.0, 会默认把变量的值显示出来, 如下图所示关闭的方法: 打开vscode的settings.json, 左下角点击齿轮按钮, 选择setting(设置), 然后在右上角三个按钮最中间的那个(open setting json), 输入 "debug.inlineValues": &q…

App爬虫工具篇-appium配置

接着上篇文章App爬虫工具篇-Appium安装,安装好了之后,还是不够的,要让其能够驱动手机端,还需要配置。这节课就深入说说如何配置Appium。 安卓手机 如果我们要使用 Android 设备做 App 抓取的话,还需要下载和配置 Android SDK,这里推荐直接安装 Android Studio,其下载地…

SpringAI系列 - 基于Spring AI 1.0.0 的AI助手实现示例

目录 一、基于 Spring AI 1.0.0 的AI助手实现示例二、AI助手架构设计2.1 系统范围与上下文 C12.2 容器图 C22.3 AI助手组件图 C3三、注意事项四、快速启动五、如何启用MCP一、基于 Spring AI 1.0.0 的AI助手实现示例 结合前文系列的介绍,本专栏提供了一个基于Spring AI 1.0.0…

电池预测 | 第33讲 Matlab基于CNN-LSTM-Attention的锂电池剩余寿命预测,附锂电池最新文章汇集

电池预测 | 第33讲 Matlab基于CNN-LSTM-Attention的锂电池剩余寿命预测,附锂电池最新文章汇集 目录电池预测 | 第33讲 Matlab基于CNN-LSTM-Attention的锂电池剩余寿命预测,附锂电池最新文章汇集预测效果基本描述程序设计参考资料源码地址: 电…

软考(软件设计师)数据库原理-SQL

一、SQL基本数据类型 SQL 数据类型速查表类别数据类型说明范围/示例适用场景整数类型INT / INTEGER标准整数类型-2 到 2-1 (-2,147,483,648 到 2,147,483,647)ID、年龄、数量等SMALLINT小范围整数-32,768 到 32,767小范围数值BIGINT大范围整数-2⁶ 到 2⁶-1大额订单号、时间戳T…

docker 安装数据集成平台 Apache SeaTunnel 服务

获取官方镜像 从 Docker Hub 上拉取最新的 Apache SeaTunnel 镜像: docker pull apache/seatunnel:latest创建目录 sudo mkdir -p /data/{conf,logs} # 需要 root 权限创建 /data 目录 sudo chown -R $USER:$USER /data # 将目录权限给当前用户(可选&a…

数据结构:数组:线性查找(Linear Search)

目录 什么是线性查找? 时间复杂度分析 🧠 线性查找的优化 方法一:Move to Front(哨兵) 方法二:Transportation(向前交换一步) 什么是线性查找? 我们先问&#xf…

石子入水波纹效果:UV扰动着色器实现

利用UV坐标扰动来模拟水面是一种常见且有效的技术手段,上述效果主要通过对水面纹理的UV坐标进行动态偏移或扰动,从而模拟水波的流动和波纹效果。资源下载具体实现和原理如下: 基本思路:通过对水面纹理的UV坐标加上时间相关的扰动函数(如正弦波、余弦波、噪声函数等),使纹…

Java Lambda 类型推断详解:filter() 方法与 Predicate<? super T>

一、问题核心解析1. 代码示例分析List<String> strings Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered strings.stream().filter(string -> !str…

XSS:xss.haozi.me靶场练习

超链接:alert(1) 知识点: html <&#xff01;--被注释的内容--> <&#xff01;--被注释的内容!--> php /*被注释的内容*/ //被注释的内容 javascript /*被注释的内容*/ //被注释的内容 MySQL …

ubuntu 20.04 安装中文输入法 (sougou pin yin)

安装搜狗输入法包 参照官方指南完成 如果提示没有找到相关依赖&#xff0c;添加一下源&#xff1a; sudo add-apt-repository universe sudo apt update重启。

(DETR)End-to-End Object Detection with Transformers论文精读(逐段解析)

(DETR)End-to-End Object Detection with Transformers论文精读&#xff08;逐段解析&#xff09; 论文地址&#xff1a;https://arxiv.org/abs/2005.12872 CVPR 2020 Facebook AI 发布 Abstract. We present a new method that views object detection as a direct set pred…

[linux][shell]通过分析 Nginx 的访问日志,检测异常 IP 地址并使用iptables 将其封禁

这段脚本的作用是通过分析 Nginx 的访问日志&#xff0c;检测异常的 IP 地址&#xff0c;并使用 iptables 封禁这些 IP。#!/bin/bash# 配置变量 LOG_FILE"/usr/local/nginx/logs/access.log" THRESHOLD10 DROP_LOG_FILE"/tmp/drop_ip.log" DATE$(date &quo…

stm32cube ide如何将工具链替换成arm-none-eabi-gcc

在 STM32Cube IDE 中替换工具链为GNU Arm Embedded Toolchain (arm-none-eabi-gcc)&#xff0c;可按以下步骤操作&#xff1a; 1. 检查是否已安装工具链 首先确认系统中是否已安装 arm-none-eabi-gcc&#xff1a; Windows&#xff1a;检查环境变量 PATH 中是否包含工具链路径…

Linux 系统 /etc/ 配置

在Linux系统中&#xff0c;/etc/ 目录是系统配置文件的核心存放位置&#xff0c;包含了各种系统服务、应用程序和硬件的配置信息。以下是该目录下常见的重要配置文件和子目录&#xff1a; 核心系统配置文件 /etc/hostname 系统主机名配置&#xff0c;直接决定当前系统的名称。/…

【跟着PMP学习项目管理】项目管理 之 成本管理知识点

目录 一、估算成本 1、知识点汇总 2、输入 3、工具 4、输出 二、预算成本 1、知识点汇总 2、输入 3、工具 4、输出 三、控制成本 1、知识点汇总 2、输入 3、工具 4、输出 一、估算成本 1、知识点汇总 1) 估算工具的用法 2、输入 范围基准、人力资源计划、项…

TCP相关实验

目录 TCP相关实验 理解CLOSE_WAIT状态 理解​​​TIME_WAIT状态 解决TIME_WAIT状态引起的bind失败的方法 理解listen的第二个参数 ​编辑 使用Wireshark分析TCP通信流程 TCP与UDP TCP与UDP对比 用UDP实现可靠传输&#xff08;经典面试题&#xff09; TCP相关实验 理解…

Spring Boot项目初始化:官方与阿里云服务地址对比指南

服务提供商 官方&#xff08;start.spring.io Spring&#xff09; 官方提供的服务&#xff0c;由Pivotal&#xff08;VMware&#xff09;维护&#xff0c;是标准的初始化工具。 阿里云&#xff08;start.aliyun.com&#xff09; 阿里云提供的国内镜像服务&#xff0c;针对中国开…

创客匠人创始人IP案例:从个人品牌到企业增长的全链路拆解

认知破局&#xff1a;为什么创客匠人创始人IP能撬动企业增长&#xff1f;在知识付费工具竞争同质化的当下&#xff0c;创客匠人创始人老蒋以“IP变现领军人”的IP形象&#xff0c;为企业打开了差异化增长通道。当同行还在比拼“功能数量”时&#xff0c;老蒋通过《领导者请停止…

UVC(USB Video Class,USB 视频类)协议

UVC&#xff08;USB Video Class&#xff0c;USB 视频类&#xff09;协议并非专门仅用于相机&#xff0c;但其核心应用场景集中在视频采集设备&#xff0c;相机是最典型的代表。其适用设备除了常见的 USB 相机&#xff08;包括 webcam、工业相机、监控摄像头等&#xff09;&…