CentOS 7下安装 redis 3.0.6并配置集群的过程详解

安装依赖

[root@centos7-1 ~]# yum -y install gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel gcc-c++ automake autoconf

安装 redis

[root@centos7-1 ~]# wget http://download.redis.io/releases/redis-3.0.6.tar.gz
[root@centos7-1 ~]# tar xvf redis-3.0.6.tar.gz
[root@centos7-1 ~]# cd redis-3.0.6/
[root@centos7-1 redis-3.0.6]# make MALLOC=libc
[root@centos7-1 redis-3.0.6]# make install

启动 server

通过命令 redis-server 来启动 redis server。通过下面的输出信息可以看出这次启动并没有指定配置文件,可以使用命令 redis-server /path/to/redis.conf 来指定具体的配置文件启动。

[root@centos7-1 redis-3.0.6]# redis-server
4435:C 25 Jan 11:40:48.816 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
4435:M 25 Jan 11:40:48.817 * Increased maximum number of open files to 10032 (it was originally set to 1024).
    _._
   _.-``__ ''-._
  _.-`` `. `_. ''-._   Redis 3.0.6 (00000000/0) 64 bit
 .-`` .-```. ```\/ _.,_ ''-._
 ( '  ,  .-` | `, )  Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|  Port: 6379
 | `-._ `._ /  _.-' |  PID: 4435
 `-._ `-._ `-./ _.-' _.-'
 |`-._`-._ `-.__.-' _.-'_.-'|
 | `-._`-._  _.-'_.-' |   http://redis.io
 `-._ `-._`-.__.-'_.-' _.-'
 |`-._`-._ `-.__.-' _.-'_.-'|
 | `-._`-._  _.-'_.-' |
 `-._ `-._`-.__.-'_.-' _.-'
  `-._ `-.__.-' _.-'
   `-._  _.-'
    `-.__.-'
4435:M 25 Jan 11:40:48.817 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4435:M 25 Jan 11:40:48.817 # Server started, Redis version 3.0.6
4435:M 25 Jan 11:40:48.817 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
4435:M 25 Jan 11:40:48.817 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
4435:M 25 Jan 11:40:48.817 * DB loaded from disk: 0.000 seconds
4435:M 25 Jan 11:40:48.817 * The server is now ready to accept connections on port 6379

到此,单节点的 Redis server 已经安装完毕,以下进入配置和安装集群的过程。

创建集群中的6个节点

集群配置文件

集群相关的配置文件主要修改 redis.conf 中的一下几个地方,因为都部署在一个服务器上,每个节点的端口不同。

[root@centos7-1 redis-3.0.6]$ vi redis.conf
#修改以下地方
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes

每个节点的配置文件

创建6个文件夹,分别表示一个 redis 节点,文件夹使用 redis 节点的端口号命名,文件里存放每个节点的配置文件。

[root@centos7-1 redis-3.0.6]# mkdir /usr/local/redis-cluster
[root@centos7-1 redis-3.0.6]# cd /usr/local/redis-cluster
[root@centos7-1 redis-cluster]# mkdir 7000 7001 7002 7003 7004 7005

拷贝 redis.conf 拷贝到6个文件夹中

[root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7000
[root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7001
[root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7002
[root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7003
[root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7004
[root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7005

并修改每个配置中的内容为各自节点的端口,注意 port cluster-config-file 的值必须唯一。

分别启动每个节点

[root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7000/redis.conf
[root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7001/redis.conf
[root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7002/redis.conf
[root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7003/redis.conf
[root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7004/redis.conf
[root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7005/redis.conf

启动完成后查看进程

[root@centos7-1 ~]# ps -ef | grep redis
root  4704 2177 0 12:12 pts/0 00:00:07 redis-server *:7000 [cluster]
root  4707 4599 0 12:12 pts/1 00:00:07 redis-server *:7001 [cluster]
root  4710 4638 0 12:12 pts/2 00:00:07 redis-server *:7002 [cluster]
root  4752 4717 0 12:12 pts/3 00:00:07 redis-server *:7003 [cluster]
root  4788 4759 0 12:12 pts/4 00:00:07 redis-server *:7004 [cluster]
root  4824 4795 0 12:13 pts/5 00:00:07 redis-server *:7005 [cluster]
root  9018 8984 0 14:08 pts/6 00:00:00 grep --color=auto redis

建立 Redis 集群

上面的步骤分别创建了6个节点,并已经启动,这里要把这6个节点加入到一个集群里面。redis 已经为我们提供了集群操作的脚本 redis-trib.rb , 操作起来很简单, 继续。

安装 ruby

由于集群操作需要用到 ruby 脚本 redis-trib.rb , 所以要安装 ruby 和 rubygems

[root@centos7-1 ~]# yum -y install ruby rubygems
[root@centos7-1 ~]# gem install redis --version 3.0.6
Fetching: redis-3.0.6.gem (100%)
Successfully installed redis-3.0.6
Parsing documentation for redis-3.0.6
Installing ri documentation for redis-3.0.6
1 gem installed

redis-trib.rb 是一个 ruby 脚本工具,用来建立和管理 redis 集群,因为使用比较频繁,所以拷贝脚本 redis-trib.rb /usr/local/bin/

[root@centos7-1 redis-3.0.6]$ cp src/redis-trib.rb /usr/local/bin/

创建集群

[root@centos7-1 ~]# redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
M: d900d3667196121f95bdbd68ca2317926a6950bc 127.0.0.1:7000
 slots:0-5460 (5461 slots) master
M: b662853288cc89a3b78f70120d57c0a34f6a91d5 127.0.0.1:7001
 slots:5461-10922 (5462 slots) master
M: 6dc5ee101c2432ec4c1d934d54a6a3565116bbff 127.0.0.1:7002
 slots:10923-16383 (5461 slots) master
S: d18e50ac6aff2f612fac43da74a79288aa574c87 127.0.0.1:7003
 replicates d900d3667196121f95bdbd68ca2317926a6950bc
S: 85f6455e14d03ebaefeca3dbe3c78c92f2f76ead 127.0.0.1:7004
 replicates b662853288cc89a3b78f70120d57c0a34f6a91d5
S: 89d792acda7f2c99c95b0d3947572647cf9edc67 127.0.0.1:7005
 replicates 6dc5ee101c2432ec4c1d934d54a6a3565116bbff
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 127.0.0.1:7000)
M: d900d3667196121f95bdbd68ca2317926a6950bc 127.0.0.1:7000
 slots:0-5460 (5461 slots) master
M: b662853288cc89a3b78f70120d57c0a34f6a91d5 127.0.0.1:7001
 slots:5461-10922 (5462 slots) master
M: 6dc5ee101c2432ec4c1d934d54a6a3565116bbff 127.0.0.1:7002
 slots:10923-16383 (5461 slots) master
M: d18e50ac6aff2f612fac43da74a79288aa574c87 127.0.0.1:7003
 slots: (0 slots) master
 replicates d900d3667196121f95bdbd68ca2317926a6950bc
M: 85f6455e14d03ebaefeca3dbe3c78c92f2f76ead 127.0.0.1:7004
 slots: (0 slots) master
 replicates b662853288cc89a3b78f70120d57c0a34f6a91d5
M: 89d792acda7f2c99c95b0d3947572647cf9edc67 127.0.0.1:7005
 slots: (0 slots) master
 replicates 6dc5ee101c2432ec4c1d934d54a6a3565116bbff
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

以上 create 命令创建了集群,选项 –replicas 1 表示每个 Master 都需要一个 Slave。所以结果是集群中创建了3个 Master 节点 和 3个 Slave 节点。

上面信息中 M 表示 Master 节点, S 表示 Slave 节点。

由此可以看出三组 Master Slave 关系如下:

M: d900d3667196121f95bdbd68ca2317926a6950bc -> S: d18e50ac6aff2f612fac43da74a79288aa574c87
M: 6dc5ee101c2432ec4c1d934d54a6a3565116bbff -> S: 89d792acda7f2c99c95b0d3947572647cf9edc67
M: b662853288cc89a3b78f70120d57c0a34f6a91d5 -> S: 85f6455e14d03ebaefeca3dbe3c78c92f2f76ead

检测集群的状态

[root@centos7-1 ~]# redis-trib.rb check 127.0.0.1:7000
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: d900d3667196121f95bdbd68ca2317926a6950bc 127.0.0.1:7000
 slots:0-5460 (5461 slots) master
 1 additional replica(s)
M: 6dc5ee101c2432ec4c1d934d54a6a3565116bbff 127.0.0.1:7002
 slots:10923-16383 (5461 slots) master
 1 additional replica(s)
S: 89d792acda7f2c99c95b0d3947572647cf9edc67 127.0.0.1:7005
 slots: (0 slots) slave
 replicates 6dc5ee101c2432ec4c1d934d54a6a3565116bbff
S: d18e50ac6aff2f612fac43da74a79288aa574c87 127.0.0.1:7003
 slots: (0 slots) slave
 replicates d900d3667196121f95bdbd68ca2317926a6950bc
S: 85f6455e14d03ebaefeca3dbe3c78c92f2f76ead 127.0.0.1:7004
 slots: (0 slots) slave
 replicates b662853288cc89a3b78f70120d57c0a34f6a91d5
M: b662853288cc89a3b78f70120d57c0a34f6a91d5 127.0.0.1:7001
 slots:5461-10922 (5462 slots) master
 1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

测试集群

利用 redis-cli -c -p 端口号 连接集群

[root@centos7-1 ~]# redis-cli -c -p 7000
127.0.0.1:7000> get hello
(nil)
127.0.0.1:7000> set hello "hello world"
OK
127.0.0.1:7000> get hello
"hello world"
127.0.0.1:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001
(nil)
127.0.0.1:7001> set name "redis server"
OK
127.0.0.1:7001> get name
"redis server"

总结

上就是关于在CentOS 7系统下安装redis 3.0.6并配置集群的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

时间: 2017-01-28

Windows环境部署Redis集群

一.准备文件 1.下载Redis for windows 的最新版本 下载地址:https://github.com/MSOpenTech/redis/releases 安装到 c:\Redis 目录下(Redis-x64-3.2.100.msi <Windows服务版>) 2.下载 RubyInstaller 下载地址:http://rubyinstaller.org/downloads/ 安装时,勾选:(所使用版本rubyinstaller-2.3.1-x64.exe) Install T

在redhat6.4安装redis集群【教程】

参考: http://redis.io/topics/cluster-tutorial(主要是Creating a Redis Cluster using the create-cluster script部分) https://ruby.taobao.org/ 安装一款不熟悉的软件前先看INSTALL,README,这是习惯,生产上要建立普通用户并调节适当参数,下面是以root身份安装运行. 下载解压并安装redis make test提示需要更高版本的tcl,跳到安装过程可能遇到的问题 wg

redis集群规范详解

本文档翻译自 http://redis.io/topics/cluster-spec . 引言 这个文档是正在开发中的 Redis 集群功能的规范(specification)文档, 文档分为两个部分: 第一部分介绍目前已经在 unstable 分支中实现了的那些功能. 第二部分介绍目前仍未实现的那些功能. 文档各个部分的内容可能会随着集群功能的设计修改而发生改变, 其中, 未实现功能发生修改的几率比已实现功能发生修改的几率要高. 这个规范包含了编写客户端库(client library)所需的

Redis 集群搭建和简单使用教程

前言 Redis集群搭建的目的其实也就是集群搭建的目的,所有的集群主要都是为了解决一个问题,横向扩展. 在集群的概念出现之前,我们使用的硬件资源都是纵向扩展的,但是纵向扩展很快就会达到一个极限,单台机器的Cpu的处理速度,内存大小,硬盘大小没办法一直满足需求,而且机器纵向扩展的成本是相当高的.集群的出现就是能够让多台机器像一台机器一样工作,实现了资源的横向扩展. Redis是内存型数据库,当我们要存储的数据达到一定程度时,单台机器的内存满足不了我们的需求,搭建集群则是一种很好的解决方案. 介绍安

简单注解实现集群同步锁(spring+redis+注解)

互联网面试的时候,是不是面试官常问一个问题如何保证集群环境下数据操作并发问题,常用的synchronized肯定是无法满足了,或许你可以借助for update对数据加锁.本文的最终解决方式你只要在方法上加一个@P4jSyn注解就能保证集群环境下同synchronized的效果,且锁的key可以任意指定.本注解还支持了锁的超时机制. 本文需要对Redis.spring和spring-data-redis有一定的了解.当然你可以借助本文的思路对通过注解对方法返回数据进行缓存,类似com.googl

浅谈spring 常用注解

我们不妨先将spring常用的注解按照功能进行分类 1 .将普通类加入容器形成Bean的注解 日常开发中主要使用到的定义Bean的注解包括(XML方式配置bean暂不讨论): @Component.@Repository.@Service.@Controller.@Bean 其中@Component.@Repository.@Service.@Controller实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型.当一个组件代表数据访问层(Dao)时,你可以给它加上@Reposit

Spring AOP注解失效的坑及JDK动态代理

@Transactional @Async等注解不起作用 之前很多人在使用Spring中的@Transactional, @Async等注解时,都多少碰到过注解不起作用的情况. 为什么会出现这些情况呢?因为这些注解的功能实际上都是Spring AOP实现的,而其实现原理是通过代理实现的. JDK动态代理 以一个简单的例子理解一下JDK动态代理的基本原理: //目标类接口 public interface JDKProxyTestService { void run(); } //目标类 publ

Spring基于注解整合Redis完整实例

在<Redis之--Spring整合Redis>一文中,向大家介绍了如何将spring与Redis整合起来,但不是基于注解的形式,很多同学都希望能够通过注解的形式来简单的将Spring与Redis整合起来,这样,在使用的时候,只需要在相应的方法上加上注解,便可以使方法轻松的调用Redis的缓存.那么今天就来向大家介绍如何用基于注解的形式来整合Spring与Redis. 一.项目搭建 今天,我们不使用hibernate来操作数据库了,我们今天选择的框架是: Spring4(包括mvc.conte

详解spring mvc(注解)上传文件的简单例子

spring mvc(注解)上传文件的简单例子. 这有几个需要注意的地方 1.form的enctype="multipart/form-data" 这个是上传文件必须的 2.applicationContext.xml中 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 关于

Spring的注解简单介绍

SpringMVC的核心组件 DispatcherServlet-–>控制器,请求入口 HanderMapping--->控制器,请求派发 Controller---->控制器,请求处理流程 ModelAndView---->模型,封装业务处理结果和视图 ViewResolver---->视图,视图显示处理器 处理流程 浏览器向Spting发出请求,请求交给前端控制器DispatcherServlet处理. 控制器通过HanderMapping找到相应的Controller组

spring boot注解方式使用redis缓存操作示例

本文实例讲述了spring boot注解方式使用redis缓存操作.分享给大家供大家参考,具体如下: 引入依赖库 在pom中引入依赖库,如下 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> &l

集成Spring Redis缓存的实现

这里的缓存主要是用于 Service 层的,所以下面的配置,都是针对 service 模块的. 本文来自内部分享,对特殊信息进行了简单处理. 本文都是在以缓存来讲 Redis 的使用,实际上 Redis 不仅仅用于缓存,本身还是 NoSQL 数据库,大家可以自己查找学习 Redis 的常用场景. 一.添加依赖 <!--缓存--> <dependency> <groupId>org.springframework</groupId> <artifactI

Apache shiro的简单介绍与使用教程(与spring整合使用)

apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它相当简单,相比比Spring Security,Shiro可能没有Spring Security那么多强大的功能,但是在实际工作时可能并不需要那么复杂的东西,所以使用简单的Shiro就足够了. 以下是你可以用 Apache Shiro所做的事情: Shiro的4大核心部分--身份验证,授权,会话管理

使用Spring的注解方式实现AOP实例

spring对AOP的实现提供了很好的支持.下面我们就使用Spring的注解来完成AOP做一个例子. 首先,为了使用Spring的AOP注解功能,必须导入如下几个包.aspectjrt.jar,aspectjweaver.jar,cglib-nodep.jar.然后我们写一个接口 package com.bird.service; public interface PersonServer { public void save(String name); public void update(S