百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis 单机、哨兵、集群搭建(redis 哨兵模式搭建)

mhr18 2024-10-27 10:54 21 浏览 0 评论

1. Redis 单机搭建(以 6.0.6 版本为例)


1. 安装 gcc 套装。

yum install cpp
yum install binutils
yum install glibc
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make

2. 升级 gcc。

yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash

3. 使 scl 长期有效。

echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile

4. 下载redis。

wget http://download.redis.io/releases/redis-6.0.6.tar.gz

5. 解压。

tar vxf redis-6.0.6.tar.gz

6. 编译,安装。

cd redis-6.0.6/
make
make PREFIX=/usr/local/redis install

7. 创建配置文件、数据目录,并且将配置文件复制到目录中。

mkdir /usr/local/redis/conf
mkdir /usr/local/redis/data
cp ${REDIS_SRC_HOME}/redis.conf /usr/local/redis/conf/

8. 修改配置文件conf/redis.conf。

  • 修改其中对应的内容。
# 后台启动的意思
daemonize yes 
# IP绑定,redis不建议对公网开放,直接绑定 0.0.0.0 没毛病
bind 0.0.0.0
# redis数据文件存放的目录
dir /usr/local/redis/data
# 开启AOF
appendonly yes

9. 启动 redis。

cd /usr/local/redis
./bin/redis-server ./conf/redis.conf

10. 测试。

./bin/redis-cli
  • 也可以通过客户端连接。

2. Redis 哨兵高可用搭建


目前为了方便演示,在一台机器上以不同的端口启动 3 个服务。

进行之前,先进行单节点上的前 8 个步骤。

1. 复制出 3 份配置文件。

cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6380.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6381.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6382.conf

2. 分别修改 3 个文件redis-6380.conf、redis-6381.conf、redis-6382.conf,修改其中对应的端口及 pid 对应的保存文件(注意:三个文件都需要修改)。

# 端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 6380
# 这个文件会自动生成(如果同一台服务器上启动,注意要修改为不同的端口)
pidfile /var/run/redis_6380.pid

3. 启动 3 个 redis。

/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6382.conf

4. 配置为 1 主 2 从

/usr/local/redis/bin/redis-cli -p 6381 slaveof 127.0.0.1 6380
/usr/local/redis/bin/redis-cli -p 6382 slaveof 127.0.0.1 6380

5. 检查集群。

/usr/local/redis/bin/redis-cli -p 6380 info Replication

6. 准备哨兵配置文件。

cp ${REDIS_SRC_HOME}/sentinel.conf /usr/local/redis/conf/

cp /usr/local/redis/conf/sentinel.conf /usr/local/redis/conf/sentinel-26380.conf
cp /usr/local/redis/conf/sentinel.conf /usr/local/redis/conf/sentinel-26381.conf
cp /usr/local/redis/conf/sentinel.conf /usr/local/redis/conf/sentinel-26382.conf

7. 分别修改 3 个文件sentinel-26380.conf、sentinel-26381.conf、sentinel-26382.conf(注意:三个文件都需要修改)。

# 绑定IP
bind 0.0.0.0
# 后台运行
daemonize yes
# 默认yes,没指定密码或者指定IP的情况下,外网无法访问
protected-mode no
# 哨兵的端口,客户端通过这个端口来发现redis
port 26380
# 这个文件会自动生成(如果同一台服务器上启动,注意要修改为不同的端口)
pidfile /var/run/redis-sentinel-26380.pid
# sentinel监控的master的名字叫做mymaster,初始地址为 127.0.0.1 6380,2代表两个及以上哨兵认定为死亡,才认为是真的死亡
sentinel monitor mymaster 127.0.0.1 6380 2

8. 启动哨兵集群。

/usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26380.conf --sentinel
/usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26381.conf --sentinel
/usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26382.conf --sentinel

9. 检测。

  • 停掉 master 进程,可以看到,会从其他两台 slave 中选择一台,变成 master。

3. Redis 集群搭建


目前为了方便演示,在一台机器上以不同的端口启动 6 个服务。

进行之前,先进行单节点上的前 8 个步骤。

1. 集群搭建

1. 准备 6 份配置文件。

cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6381.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6382.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6383.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6384.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6385.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6386.conf

2. 分别修改redis-6381.conf、redis-6382.conf、redis-6383.conf、redis-6384.conf、redis-6385.conf、redis-6386.conf文件中的以下内容。

# 端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 6381
# 开启集群
cluster-enabled yes
# 会自动生成在上面配置的dir目录下(如果同一台服务器上启动,注意要修改为不同的端口)
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000
# 这个文件会自动生成(如果同一台服务器上启动,注意要修改为不同的端口)
pidfile /var/run/redis_6381.pid 
  • 注意:假如设置 requirepass 的话,同时要设置 masterpass

5. 启动 6 个 redis 实例。

/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6382.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6383.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6384.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6385.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6386.conf

6. 创建 cluster。

/usr/local/redis/bin/redis-cli --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 --cluster-replicas 1

7. 集群检验和测试。

# 检查集群,查看所有节点信息
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6381 cluster nodes

# 执行后的信息(节点id ip+端口 角色 masterid 处理的ping数量 最后一个pong时间 节点配置版本 节点连接状态 slot槽分配情况)
386bfa4ad82ecf67800fb957899e6c0621cb73a6 127.0.0.1:6386@16386 slave 5352c77a1245f67f89bfaeb47caa04eb534e6724 0 1597911585458 1 connected
21a8ab725f458901e2d23781a9757b8ada023af1 127.0.0.1:6385@16385 slave 103e8326a6d583064a4d4448d285343536490659 0 1597911586000 3 connected
5352c77a1245f67f89bfaeb47caa04eb534e6724 127.0.0.1:6381@16381 myself,master - 0 1597911583000 1 connected 0-5460
103e8326a6d583064a4d4448d285343536490659 127.0.0.1:6383@16383 master - 0 1597911585052 3 connected 10923-16383
2d40bdd3bc9b01d67362110217123debb6f780cf 127.0.0.1:6384@16384 slave 2cd4da5b1a6d361216f620a21ec4e50da21a2e8a 0 1597911586582 2 connected
2cd4da5b1a6d361216f620a21ec4e50da21a2e8a 127.0.0.1:6382@16382 master - 0 1597911586479 2 connected 5461-10922

# 测试 Redis Cluster 的一种简单方法是使用 redis-cli 命令行实用程序。
# -c 是支持cluster重定向。
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6381
# 然后执行一些命令,例如:
> set a 1

# 查看一个 key a 属于哪一个槽位
> cluster keyslot 

2. 集群 slot 数量整理 reshard。

  • /usr/local/redis/bin/redis-cli --cluster help 可以查看所有这个命令和子命令的帮助信息。
  • 默认是 master 平均分了 0-16383 的所有虚拟 slot。可以进行调整,部分节点放多一点 slot (槽或者位置)。
/usr/local/redis/bin/redis-cli --cluster reshard <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes
  • 重新检查集群。
/usr/local/redis/bin/redis-cli --cluster check 127.0.0.1:6381

3. 测试自动故障转移。

  • cluster 集群不保证数据一致,数据也可能丢失。
  • 首先是运行客户端不断地写入或读取数据,以便能够发现问题。
  • 然后是模拟节点故障:找一个主节点关闭,主从故障切换的过程中,这个时间段的操作,客户端而言,只能是失败。
  • 官方描述 https://redis.io/topics/cluster-spec,There is always a window of time when it is possible to lose writes during partitions.(分区的时间窗口内总是有可能丢失写操作) 。

4. 手动故障转移。

  • 可能某个节点需要维护(机器下线、硬件升级、系统版本调整等等场景),需要手动地实现转移。
  • 在 slave 节点上执行命令。CLUSTER FAILOVER
  • 注:CLUSTER help 可以看到帮助文档和简介。 相对安全的做法。

5. 扩容。

# 1、 启动新节点
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6387.conf

# 2、 加入到已经存在的集群作为master
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6382
# 本质就是发送一个新节点通过 CLUSTER MEET 命令加入集群
# 新节点没有分配 hash 槽

# 3、 加入到已经存在的集群作为 slave
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6382 --cluster-slave
# 可以手工指定 master,否则就是选择一个 slave 数量较少的master 
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6382 --cluster-slave --cluster-master-id <node-id>
# 还可以将空 master,转换为 slave(终端操作)。
cluster replicate <master-node-id>

# 4、 检查集群
/usr/local/redis/bin/redis-cli --cluster check 127.0.0.1:6382

6. 缩容(删除节点)。

# 注意:删除 master 的时候要把数据清空或者分配给其他主节点
/usr/local/redis/bin/redis-cli --cluster del-node 127.0.0.1:6381 <node-id>

相关推荐

如何检查 Linux 服务器是物理服务器还是虚拟服务器?

在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...

第四节 Windows 系统 Docker 安装全指南

一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...

C++ std:shared_ptr自定义allocator引入内存池

当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...

Activiti 8.0.0 发布,业务流程管理与工作流系统

Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...

MyBatis动态SQL的5种高级玩法,90%的人只用过3种

MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...

Springboot数据访问(整合Mybatis Plus)

Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...

盘点金州勇士在奥克兰13年的13大球星 满满的全是...

见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...

Mybatis入门看这一篇就够了(mybatis快速入门)

什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...

Springboot数据访问(整合druid数据源)

Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...

Linux 中的 &quot;/etc/profile.d&quot; 目录有什么作用 ?

什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...

企业数据库安全管理规范(企业数据库安全管理规范最新版)

1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...

Oracle 伪列!这些隐藏用法你都知道吗?

在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...

Oracle 高效处理数据的隐藏神器:临时表妙用

各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...

Oracle 数据库查询:多表查询(oracle多表关联查询)

一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...

一文掌握怎么利用Shell+Python实现多数据源的异地备份程序

简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...

取消回复欢迎 发表评论: