前言
本文会在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
下载 解压 编译
代码语言:javascript复制这里单独创建的/app目录, 按照命令一个个执行即可! (我使用的是root用户)
# 创建/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本地修改)
[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基本操作
- 命令行模式
该模式是进入 vi 编辑器后的默认模式。任何时候,不管用户处于何种模式,按下
Esc
键即可进入命令模式。 - 文本输入模式
在命令模式下输入插入命令
i
可以进入文本输入模式。 - 搜索关键字
按
Esc
键进入命令模式,直接输入/keyword
,然后回车
,输入n
定位到下一处,大写N
回到上一个位置 - 修改文本
按
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
, 修改如下:
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目录
存放两个从节点持久化的rdb
或aof
的目录.
关于Redis持久化
点这里:https://blog.csdn.net/scm_2008/article/details/127209438
[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连接主从
与连接单机相同,不做赘述.
主从模式优缺点
- 优点: 主从结构具有
读写分离
,提高效率、数据备份,提供多个副本等优点。 - 不足: 最大的不足就是主从模式不具备自动容错和恢复功能,主节点故障,集群则无法进行工作,
可用性比较低
,从节点升主节点需要人工手动干预。
三、哨兵模式
sentinel哨兵是特殊的redis服务,不提供读写服务
,主要用来监控
redis实例节点。
哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis主节点通知给client端(这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)
所以我们在主从模式的基础上,按上图的端口搭建哨兵模式,这里哨兵节点不是固定的,1个,3个,5个等等,为什么不推荐2个4个,是因为半数以上选举算法,偶数并没有提高可用性,反而浪费了机器。
配置哨兵节点
从sentinel.conf
拷贝出sentinel-26379.conf
, 修改如下:
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.conf
和sentinel-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全都写入了!
哨兵模式优缺点
- 优点:哨兵模式是
基于主从模式
的,解决可主从模式中master故障不可以自动切换
故障的问题。 - 不足:
(1)是一种中心化的集群实现方案:始终只有
一个
Redis主机来接收和处理写请求
,写操作受单机瓶颈影响 (2)集群里所有节点保存的都是全量数据
,浪费内存空间,没有真正实现分布式存储。数据量过大时,主从同步严重影响master的性能 (3)主机宕机后,在选举出新主机之前无法进行工作
四、源码下载(内含conf配置文件)
https://download.csdn.net/download/scm_2008/86746871
温馨提示
:请务必
修改如下图的ip地址