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

2022-12-02 15:24:38 浏览数 (1)

前言

本文会在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地址

0 人点赞