前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis单机、主从、哨兵部署 [图文超详细, 内含Java代码 + 详细配置conf]

Redis单机、主从、哨兵部署 [图文超详细, 内含Java代码 + 详细配置conf]

作者头像
天罡gg
发布2022-12-02 15:24:38
6810
发布2022-12-02 15:24:38
举报
文章被收录于专栏:天罡gg天罡gg

前言

本文会在CentOS7上安装Redis-5.0.3, 单机版–>主从架构–>哨兵架构,图文并茂,并配合Jedis代码,保证你快速上手Redis环境搭建!

CentOS7安装教程:https://blog.csdn.net/scm_2008/article/details/127230063

一、单机版

安装gcc和wget 可选

代码语言:javascript
复制
# redis使用c语言编写,所以需要安装gcc,如已安装则忽略. 
# 通过gcc -v检查是否已安装
[root@localhost /]# yum install gcc
# CentOS7本身没有自带wget,如已安装则忽略. 
[root@localhost /]# yum install -y wget

下载+解压+编译

这里单独创建的/app目录, 按照命令一个个执行即可! (我使用的是root用户)

代码语言:javascript
复制
# 创建/app目录
[root@localhost /]# mkdir /app
[root@localhost /]# cd /app
# 下载到/app目录
[root@localhost app]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz -P /app
# 解压
[root@localhost app]# tar xzf redis-5.0.3.tar.gz
# 编译
[root@localhost app]# cd redis-5.0.3
[root@localhost redis-5.0.3]# make

配置

我这里执行vi命令修改配置文件。(也可以使用MobaXterm工具将redis.conf下载到window本地修改)

代码语言:javascript
复制
[root@localhost redis-5.0.3]# vi redis.conf

修改如下两项( vi基本操作点这):

代码语言:javascript
复制
daemonize yes  #后台启动
protected-mode no  #关闭保护模式,开启的话,只有本机才可以访问redis

注释掉bind

代码语言:javascript
复制
#bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)

vi基本操作

  1. 命令行模式 该模式是进入 vi 编辑器后的默认模式。任何时候,不管用户处于何种模式,按下Esc键即可进入命令模式。
  2. 文本输入模式 在命令模式下输入插入命令i可以进入文本输入模式。
  3. 搜索关键字 按Esc键进入命令模式,直接输入/keyword,然后回车,输入n定位到下一处,大写N回到上一个位置
  4. 修改文本 按i键进入文本输入模式,进行修改; 修改完成后,按:wq保存并退出vi编辑状态; 如果不想保存直接按下:q!键,就能直接推出.

启动redis服务

代码语言:javascript
复制
[root@localhost redis-5.0.3]# src/redis-server redis.conf

验证是否成功

代码语言:javascript
复制
ps -ef|grep redis 

进入redis客户端玩玩,详细参见截图:

quit 命令退出客户端, 再用Redis Desktop Manager在window上连接也成功,至此Redis单机版搭建完成!

Jedis连接

pom 依赖

代码语言:javascript
复制
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

测试代码, 循环写入10个key

再到redis里查看一下:

二、主从模式

这里从一主两从入手,一主多从同理,我们这里简单起见,就在一台电脑上搭建了,我们按照下图的端口搭建:

搭建一主

我们上面单机版搭建的6379端口作为主就可以,太方便了! 我们接下来搭建两个从节点

配置6371 从节点

redis.conf拷贝出redis-6371.conf, 修改如下:

代码语言:javascript
复制
port 6371
pidfile /var/run/redis_6371.pid  # 把pid进程号写入pidfile配置的文件
logfile "6371.log"
dir /app/redis-5.0.3/data/6371 # 指定数据存放目录

# 注释bind
# bind 127.0.0.1

# 配置主从复制
replicaof 127.0.0.1 6379   # 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof
replica-read-only yes  # 配置从节点只读

配置6372 从节点

redis-6371.conf拷贝出redis-6372.conf, 将6371修改成6372即可,不做赘述. 最后是这样:

创建data目录

存放两个从节点持久化的rdbaof的目录.

关于Redis持久化点这里:https://blog.csdn.net/scm_2008/article/details/127209438

代码语言:javascript
复制
[root@localhost redis-5.0.3]# mkdir /app/redis-5.0.3/data
[root@localhost redis-5.0.3]# mkdir /app/redis-5.0.3/data/6371
[root@localhost redis-5.0.3]# mkdir /app/redis-5.0.3/data/6372

启动主+从节点

操作和单机版的没什么两样, 只是多启动两个从节点。

代码语言:javascript
复制
# 启动主节点
[root@localhost redis-5.0.3]# src/redis-server redis.conf
# 启动6371从节点
[root@localhost redis-5.0.3]# src/redis-server redis-6371.conf
# 启动6372从节点
[root@localhost redis-5.0.3]# src/redis-server redis-6372.conf
# 验证是否成功
[root@localhost redis-5.0.3]# ps -ef|grep redis

测试6379上写数据,6371和6372是否能及时同步

启动多个客户端,分别连接6379, 6371, 6372

代码语言:javascript
复制
[root@localhost redis-5.0.3]# src/redis-cli
[root@localhost redis-5.0.3]# src/redis-cli -p 6371
[root@localhost redis-5.0.3]# src/redis-cli -p 6372

测试成功,已同步,如下图:

Jedis连接主从

与连接单机相同,不做赘述.

主从模式优缺点

  1. 优点: 主从结构具有读写分离,提高效率、数据备份,提供多个副本等优点。
  2. 不足: 最大的不足就是主从模式不具备自动容错和恢复功能,主节点故障,集群则无法进行工作,可用性比较低,从节点升主节点需要人工手动干预。

三、哨兵模式

sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。

哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis主节点通知给client端(这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)

所以我们在主从模式的基础上,按上图的端口搭建哨兵模式,这里哨兵节点不是固定的,1个,3个,5个等等,为什么不推荐2个4个,是因为半数以上选举算法,偶数并没有提高可用性,反而浪费了机器。

配置哨兵节点

sentinel.conf拷贝出sentinel-26379.conf, 修改如下:

代码语言:javascript
复制
port 26379
daemonize yes
pidfile /var/run/redis-sentinel-26379.pid
logfile "26372.log"
dir /app/redis-5.0.3/data/26379
# 最后的2指当有多少个sentinel认为一个master失效时有效。一般推荐:sentinel总数/2 + 1
sentinel monitor mymaster 127.0.0.1 6379 2

再从sentinel-26379.conf拷贝出sentinel-26371.confsentinel-26372.conf, 将26379修改成26371和26372即可,不做赘述. 最后是这样:

创建data目录

存放log文件,因为哨兵实例不存储实际数据!

代码语言:javascript
复制
[root@localhost redis-5.0.3]# mkdir /app/redis-5.0.3/data/26379
[root@localhost redis-5.0.3]# mkdir /app/redis-5.0.3/data/26371
[root@localhost redis-5.0.3]# mkdir /app/redis-5.0.3/data/26372

启动sentinel哨兵实例

代码语言:javascript
复制
# 启动3个哨兵节点
[root@localhost redis-5.0.3]# src/redis-sentinel sentinel-26379.conf
[root@localhost redis-5.0.3]# src/redis-sentinel sentinel-26371.conf
[root@localhost redis-5.0.3]# src/redis-sentinel sentinel-26372.conf
# 验证是否成功
[root@localhost redis-5.0.3]# ps -ef|grep sentinel

Jedis连接哨兵

与连接单机/主从的区别:用JedisSentinelPool代替JedisPool

我们分别连接到6379、6371、6372主从节点验证一下,10个mm全都写入了!

哨兵模式优缺点

  1. 优点:哨兵模式是基于主从模式的,解决可主从模式中master故障不可以自动切换故障的问题。
  2. 不足: (1)是一种中心化的集群实现方案:始终只有一个Redis主机来接收和处理写请求,写操作受单机瓶颈影响 (2)集群里所有节点保存的都是全量数据,浪费内存空间,没有真正实现分布式存储。数据量过大时,主从同步严重影响master的性能 (3)主机宕机后,在选举出新主机之前无法进行工作

四、源码下载(内含conf配置文件)

https://download.csdn.net/download/scm_2008/86746871

温馨提示:请务必修改如下图的ip地址

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、单机版
    • 安装gcc和wget 可选
      • 下载+解压+编译
        • 配置
          • vi基本操作
            • 启动redis服务
              • Jedis连接
              • 二、主从模式
                • 搭建一主
                  • 配置6371 从节点
                    • 配置6372 从节点
                      • 创建data目录
                        • 启动主+从节点
                          • 测试6379上写数据,6371和6372是否能及时同步
                            • Jedis连接主从
                              • 主从模式优缺点
                              • 三、哨兵模式
                                • 配置哨兵节点
                                  • 创建data目录
                                    • 启动sentinel哨兵实例
                                      • Jedis连接哨兵
                                        • 哨兵模式优缺点
                                        • 四、源码下载(内含conf配置文件)
                                        相关产品与服务
                                        云数据库 Redis
                                        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档