Redis从单机到集群,一步步教你环境部署以及使用

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

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

使用Jedis API访问Redis Cluster

首先在pom.xml中引入Jedis的jar包:

<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
   <version>2.9.0</version>
</dependency>

然后测试一下:

public class JedisTest {
    public static void main(String[] args) {
        Jedis redis = new Jedis("10.10.10.104",6379);
        String foo = redis.get("foo");
        System.out.println(foo);
    }
}

使用JedisCluster访问Redis Cluster

参考下这片文章就行,试验过了可用的:
http://www.cnblogs.com/shihaiming/p/5953956.html

参考

1 安装redis经常遇到的问题:http://www.cnblogs.com/HKUI/p/4439575.html
2 make的时候error: jemalloc/jemalloc.h报错:http://openskill.cn/article/151
3 linux常用目录介绍:http://www.linuxidc.com/Linux/2016-08/134701.htm
4 redis集群环境搭建:http://www.cnblogs.com/wuxl360/p/5920330.html
5 redis安装:http://www.runoob.com/redis/redis-install.html
6 redis官方文档:https://redis.io/download
7 redis client官方文档:https://github.com/uglide/RedisDesktopManager
8 redis desktop windows下载:https://redisdesktop.com/download

本文转自博客园xingoo的博客,原文链接:Redis从单机到集群,一步步教你环境部署以及使用,如需转载请自行联系原博主。

时间: 2024-11-02 13:37:43

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

Zookeeper单机伪集群

Zookeeper单机伪集群 1.配置 zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.4.3.tar.gz,解压得到文件夹zookeeper-3.4.3 在主文件夹下建立一个zookeeper文件夹,在zookeeper文件夹里建立三个目录server1,server2,server3: mkdir -p server1 server2 server3 然后每

Redis 3.0 Cluster集群配置

Redis 3.0 Cluster集群配置 安装环境依赖 安装gcc:yum install gcc 安装zlib:yum install zib 安装ruby:yum install ruby 安装rubygems:yum install rubygems 安装ruby的redis驱动:gem install redis 安装redis 参考:http://www.cnblogs.com/rwxwsblog/p/5285732.html 修改配置文件 vi 6379.conf port=637

Nginx + Shiro + Redis 实现负载均衡集群(成绩报告查询系统升级篇)

写在开始 上一篇讲到使用Ehcache实现分布式缓存,尽管其直接操作JVM内存,速度快,效率高,但是缓存同步麻烦,分布式集群配置不方便,如果应用服务器重启会丢失缓存数据. 下面来分析一下Redis做系统session缓存实现. Redis介绍 Redis是一个key-value存储系统.和Memcached类似, 它的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它支持存储的value类型相对更多,包括string(字符串

Docker部署Redis cluster3.2.5集群的例子

和之前一样,使用alpine的版本,redis 是3.2.5稳定版本 [root@LinuxEA redis1]# cat Dockerfile FROM alpineMAINTAINER wwww.111cn.net for markRUN apk update \        && apk --no-cache add curl \        && curl -sO http://download.redis.io/releases/redis-3.2.5.tar

Redis 自动故障转移 集群 解决方案

问题描述 实在无奈,研究不出可行的方案,所以来求助大家.问题:两台服务器,部署redis,一主一从,(主为a1,从为a2)客户端访问redis服务器,如果a1服务器意外关闭,则客户端直接访问a2服务器上的redis,这个需要怎么配置?或者需要什么解决方案.(windows服务器上的) 解决方案 解决方案二:不就是a1连不上,连a2的节奏吗?解决方案三:客户端要连哪个服务器,应该由你的程序来控制,而不是依靠什么"配置"吧?解决方案四:引用2楼rocmemory的回复: 客户端要连哪个服务

Redis 一二事 - 在spring中使用jedis 连接调试单机redis以及集群redis

Redis真是好,其中的键值用起来真心强大啊有木有, 之前的文章讲过搭建了redis集群 那么咋们该如何调用单机版的redis以及集群版的redis来使用缓存服务呢? 先讲讲单机版的,单机版redis安装非常简单,不多说了,直接使用命令:  1 [root@nginx bin]# ./redis-server redis.conf  启动就行 在sprig文件中配置如下 1 <!-- 2 TODO: 3 开发环境使用单机版 4 生产环境务必切换成集群 5 --> 6 <!-- 配置red

redis高可用性集群方案及应急维护技巧

前提:现在有主从结构,主库没有配置持久化,从库配置AOF.(主库用来备份和写服务,从库用来提供读服务) 场景:哪天主库突然宕了,怎么办? 方法:连上从库,做save操作.将会在从库的data目录保存一份从库最新的dump.rdb文件.将这份dump.rdb文件拷贝到主库的data目录下.再重启主库. 就因为这个我想到了用集群的方案,但是redis官方没有mysql那样的master- master的模式~   这样的情况下,只能咱们自己想办法了~ 实现的原理~ 当 Master 与 Slave

这可能是最全的 Redis 集群方案介绍了

由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以达到100GB.200GB的规模,但是单实例模式限制了Redis没法满足业务的需求(例如新浪微博就曾经用Redis存储了超过1TB的数据).Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正式版.各大企业在3.0版本还没发布前为了解决Redis的存储瓶颈,纷纷推出了各自的Redis集群方案.

从单机到集群会话的管理之集群模式二(更大的集群)

<从单机到集群会话的管理之集群模式一>中讲到的全节点复制的网络流量随节点数量增加呈平方趋势增长,也正是因为这个因素导致无法构建较大规模的集群,为了使集群节点能更加大,首要解决的就是数据复制时流量增长的问题,下面将介绍另外一种会话管理方式,每个会话只会有一个备份,它使会话备份的网络流量随节点数量的增加呈线性趋势增长,大大减少了网络流量和逻辑操作,可构建较大的集群. 下面看看这种方式具体的工作机制,集群一般是通过负载均衡对外提供整体服务,所有节点被隐藏在后端组成一个整体.前面各种模式的实现都无需负