Redis作为缓存系统来说还是很有价值的,在大数据方向里,也是需要有缓存系统的。一般可以考虑tachyon或者redis,由于redis安装以及使用更简单,所以还是优先考虑了它。那么在一些场景下为了保证数据的可靠性,就需要采用集群的模式部署,因此本篇文章就基于Redis Cluster的背景讲解下部署以及后期的使用。

大致会包括下面的内容:

  • Redis单机版的安装以及验证
  • Redis集群版的安装以及验证
  • 使用图形化工具访问Redis
  • 使用Jedis访问Redis
  • 使用JedisCluster访问Redis Cluster

之后会介绍一下,如何在Spark中使用redis,敬请期待。

Redis单机版安装

1.1 下载

首先去官网下载想要的版本:

https://redis.io/download

我这里选了一个版本没那么高的,省的变化太大,各种软件兼容不了。于是挑个之前的稳定版本下载,下载redis-3.2.10.tar.gz拷贝到目标机器。

1.2 安装

把压缩文件拷贝到指定的服务器上,执行解压命令:

tar -zxvf redis-3.2.10.tar.gz

安装前需要先安装必要的包,yum -y install gcc gcc-c++ tcl,这里安装的都是一般遇到的错误所需要安装的库。

安装完后,进入redis-3.2.10目录,执行编译命令:make MALLOC=libc,这样就安装完了

1.3 测试

安装完可以直接启动测试一下:

  • 启动服务器,执行下面的命令:./src/redis-server redis.conf
  • 启动客户端,执行下面的命令:./src/redis-cli

在控制台中,输入下面命令:

set foo bar
get foo

看看是否正常

redis集群安装

按照上面的方式,在每台机器上面都装一下redis。由于redis cluster集群必须要三个master,如果做一个备份的话,就需要6个节点。所以我这里在三台机器上,安装redis,然后每台机器上启动两个redis即可。一会会说一下,如何在一台机器上,启动两个redis。

2.1 安装

首先安装一下ruby,因为集群的脚本是ruby版的

yum -y install ruby ruby-devel rubygems rpm-build

然后执行:

gem install redis

然后把redis-trip.rb拷贝到/usr/local/bin下,这样就可以在任何目录执行redis-trip命令了。

cp src/redis-trip.rb /usr/local/bin

2.2 修改配置

接下来需要根据集群的情况,创建server启动的配置了,先创建redis_cluster目录,拷贝redis.conf

[root@localnode7 redis-3.2.10]# mkdir redis_cluster
[root@localnode7 redis-3.2.10]# cp redis.conf ./redis_cluster/redis.conf

然后修改redis.conf

[root@localnode7 redis-3.2.10]# vi ./redis_cluster/redis.conf

修改的内容有:

bind 0.0.0.0 //为了别人能访问,这里暴力的监听了所有的地址
port 6379
daemonize yes //redis后台运行
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_6379.conf //集群的配置 配置文件首次启动自动生成
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //这里跟redis持久化的机制有关系,有兴趣可以多关注一下redis的日志记录机制

PS:因为redis.conf配置文件比较大,内容很多。因此大家在修改配置的时候可以使用vi的快捷键/想要搜索的内容,然后按enter,可以快速定位到想要修改的配置上,如果有多个,可以再用n键跳转到下一个匹配结果。

2.3 启动服务器

接下来就可以启动redis服务器

[root@localnode7 redis-3.2.10]# ./src/redis-server redis_cluster/redis.conf
[root@localnode7 redis-3.2.10]# ps -aux | grep redis
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 29361 0.0 0.0 130436 2452 ? Ssl 13:21 0:00 ./src/redis-server 127.0.0.1:6379 [cluster]
root 29381 0.0 0.0 103464 1080 pts/0 R+ 13:21 0:00 grep redis
[root@localnode7 redis-3.2.10]#

2.4 单个机器启动多个server

如果想要在一台机器上同时启动多个redis,可以直接再拷贝一份redis.conf,命名成redis2.conf,修改里面的port参数和cluster-config-file参数即可。

比如上面的配置修改成:

bind 0.0.0.0
port 6380 // <----只有这里发生变化
daemonize yes
cluster-enabled yes
cluster-config-file nodes_6380.conf // <--只有这里发生变化
cluster-node-timeout 15000
appendonly yes

然后启动的时候,指定为这个conf即可:

./src/redis-server redis_cluster/redis2.conf

再次查询启动进程:

[root@localnode4 redis-3.2.10]# ps -aux | grep redis
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 7452 0.0 0.0 131892 2984 ? Ssl 15:59 0:08 ./src/redis-server 0.0.0.0:6379 [cluster]
root 9337 0.0 0.0 130564 2744 ? Ssl 16:00 0:08 ./src/redis-server 0.0.0.0:6380 [cluster]
root 32298 0.0 0.0 103464 1084 pts/0 S+ 19:27 0:00 grep redis
[root@localnode4 redis-3.2.10]#

2.5 创建集群

注意:

  • 想要搭建集群,至少6个节点,不然执行下面的命令会报错的
  • 在创建集群时,只能用ip地址,不能用主机名,不然会连接不上...不知道为啥...

执行下面的命令启动集群创建:

[root@localnode6 redis-3.2.10]# redis-trib.rb  create  --replicas 1 10.10.10.104:6379 10.10.10.106:6379 10.10.10.107:6379 10.10.10.104:6380 10.
10.10.106:6380 10.10.10.107:6380
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.10.10.107:6379
10.10.10.106:6379
10.10.10.104:6379
Adding replica 10.10.10.106:6380 to 10.10.10.107:6379
Adding replica 10.10.10.107:6380 to 10.10.10.106:6379
Adding replica 10.10.10.104:6380 to 10.10.10.104:6379
M: e59449112f33dcb2dfad7a1ec32920470f589c32 10.10.10.104:6379
slots:10923-16383 (5461 slots) master
M: 566762510d6b7b2e1b361a8a8d44e4a9d788a92f 10.10.10.106:6379
slots:5461-10922 (5462 slots) master
M: 8984e7d3e53ddcec5dd59684f69a1976a4db33ef 10.10.10.107:6379
slots:0-5460 (5461 slots) master
S: 8e222ceb6ad4a9ca48566bd467b0e1b6573c2fc0 10.10.10.104:6380
replicates e59449112f33dcb2dfad7a1ec32920470f589c32
S: 0c9e17b5955be559a7edf2853bff02d7415ea72f 10.10.10.106:6380
replicates 8984e7d3e53ddcec5dd59684f69a1976a4db33ef
S: a8e54df5776b412de65b904ac3928d0d308fdc15 10.10.10.107:6380
replicates 566762510d6b7b2e1b361a8a8d44e4a9d788a92f
Can I set the above configuration? (type 'yes' to accept): 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 10.10.10.104:6379)
M: e59449112f33dcb2dfad7a1ec32920470f589c32 10.10.10.104:6379
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 8984e7d3e53ddcec5dd59684f69a1976a4db33ef 10.10.10.107:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: a8e54df5776b412de65b904ac3928d0d308fdc15 10.10.10.107:6380
slots: (0 slots) slave
replicates 566762510d6b7b2e1b361a8a8d44e4a9d788a92f
M: 566762510d6b7b2e1b361a8a8d44e4a9d788a92f 10.10.10.106:6379
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 0c9e17b5955be559a7edf2853bff02d7415ea72f 10.10.10.106:6380
slots: (0 slots) slave
replicates 8984e7d3e53ddcec5dd59684f69a1976a4db33ef
S: 8e222ceb6ad4a9ca48566bd467b0e1b6573c2fc0 10.10.10.104:6380
slots: (0 slots) slave
replicates e59449112f33dcb2dfad7a1ec32920470f589c32
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

中间需要我们输入一个yes确定主从的分配。通过日志就可以看到master和slave的一个分配情况,以及slot的分配。那个slots是跟存储的时候hash有关的,即一个字符串先要经过哈希,知道他应该存储到那个节点上,然后才会存储到对应的server中。当我们用普通的api去查询的时候,需要查那个真正存储的机器,才能读取到数据。当然使用cluster api就不会有这个问题了。

2.6 集群环境验证

下面我们验证下集群的效果:

首先查看一下集群的状态,然后创建一个key,再换另一个节点登录,看看能否查询到。

[root@localnode6 redis-3.2.10]# ./src/redis-cli -h 10.10.10.104 -c -p 6379
10.10.10.104:6379> 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
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:86
cluster_stats_messages_received:86
10.10.10.104:6379> get foo
(nil)
10.10.10.104:6379> set foo bar
OK
10.10.10.104:6379> get foo
"bar"
10.10.10.104:6379>
[root@localnode6 redis-3.2.10]# ./src/redis-cli -h 10.10.10.106 -c -p 6379
10.10.10.106:6379> get foo
-> Redirected to slot [12182] located at 10.10.10.104:6379
"bar"
10.10.10.104:6379>

这样我们的集群环境就搭建完了。

万里长征又多走了一步~

安装监控软件

如果用windows办公,还是有不少图形化的工具,可以连接redis的,比如redis desktop:

首先可以去下面网址去下载对应的版本:

https://redisdesktop.com/download

然后就是无脑安装了,安装完登录到对应的机器上即可。不过貌似是单节点登录,即你看不到集群的数据。可能是我不会用

Redis从单机到集群,一步步教你环境部署以及使用的更多相关文章

  1. spring集成Redis(单机、集群)

    一.单机redis配置 1. 配置redis连接池 <bean id="jedisPoolConfig" class="redis.clients.jedis.Je ...

  2. Centos7下安装redis实战(单机版以及集群)

    一.背景 因项目需要,要引入redis做缓存,就在centos7下亲自安装了一遍redis,刚好趁着这个机会就来把redis的概念以及单机版和集群版redis安装步骤记录下来,在此和大家一起分享. 二 ...

  3. Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置

    0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...

  4. redis在Windows下以后台服务一键搭建集群(单机--伪集群)

    redis在Windows下以后台服务一键搭建集群(单机--伪集群) 一.概述 此教程介绍如何在windows系统中同一台机器上布置redis伪集群,同时要以后台服务的模式运行.布置以脚本的形式,一键 ...

  5. 通过jedis连接redis单机成功,使用redis客户端可以连接集群,但使用JedisCluster连接redis集群一直报Could not get a resource from the pool

    一,问题描述: (如题目)通过jedis连接redis单机成功,使用JedisCluster连接redis集群一直报Could not get a resource from the pool 但是使 ...

  6. Redis 5.0.7 讲解,单机、集群模式搭建

    Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...

  7. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  8. redis + 主从 + 持久化 + 分片 + 集群 + spring集成

    Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...

  9. 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

随机推荐

  1. gdb常用命令及使用gdb调试多进程多线程程序

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

  2. 修改phpstorm的字体样式和大小

    默认的字体实在太小,也太丑,必须修改下.就是强迫症,没错.下面截图配文字说明下 方法/步骤   首先进入设置,不解释   先设置软件界面上的字体.进入设置之后,选择(外观)Appearance.之后软 ...

  3. [leetcode-611-Valid Triangle Number]

    Given an array consists of non-negative integers, your task is to count the number of triplets chose ...

  4. 【Android Developers Training】 105. 显示一个位置地址

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. 如何连接远程redis,并且选择某个库进行操作

    public static Jedis getJedis(){ Jedis jedis = new Jedis("222.201.145.215"); jedis.select(1 ...

  6. Unity 游戏框架搭建 (五) 简易消息机制

    什么是消息机制? 23333333,让我先笑一会. 为什么用消息机制?   三个字,解!!!!耦!!!!合!!!!. 我的框架中的消息机制用例: 1.接收者 ``` using UnityEngine ...

  7. 关于rem单位

    CSS3的出现,他同时引进了一些新的属性,包括我们今天所说的rem.在W3C官网上是这样描述rem的——“font size of the root element” . em单位是相对于父节点的fo ...

  8. python编程快速上手之第8章实践项目参考答案

    第8章实践项目之疯狂填词 创建一个一个疯狂填词(Mad Libs),程序,它将读入文本文件,并让用户在该文本文件中出现 ADJECTIVE,NOUN,VERB等单词的地方,加上他们自己的文本. 首先准 ...

  9. 面向对象15.3String类-常见功能-获取-2

    public class String_APImethod {/* * 1.4获取字符串中的一部分字符串,也叫字符串 * String substring(int beginIndex, int en ...

  10. Luogu T7152 细胞(递推,矩阵乘法,快速幂)

    Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...