本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws

一.基础安装

wget http://download.redis.io/releases/redis-4.0.0.tar.gz

tar xzf redis-4.0..tar.gz

cd redis-4.0.

cd src

make

make test    //有问题可参考 http://www.cnblogs.com/tdws/p/6360024.html

./redis-server ../redis.conf

ps -ef |grep redis  查看redis进程
netstat -lntp | grep 查询指定端口监听 kill - 进程id 强制杀死redis进程

二. 4.0版本初步了解

Redis4.0中增加了UNLINK 命令(替换del命令),这个命令在删除体积较大的键时,命令在后台线程里面执行,还有异步的flushdb和flushall命令分别是

flushdb async

flushall async

尽可能的避免了服务器阻塞。

增加了交换数据库命令,比如SWAPDB 0 1 ,交换0库和1库

增加了memory命令,可以视察内存使用情况,通过help命令可以看到

127.0.0.1:6379> memory help

1) "MEMORY USAGE <key> [SAMPLES <count>] - Estimate memory usage of key"

2) "MEMORY STATS - Show memory usage details"

3) "MEMORY PURGE - Ask the allocator to release memory"

4) "MEMORY MALLOC-STATS - Show allocator internal stats"

MEMORY USAGE <key> 预估指定key所需内存

MEMORY STATS 视察内存使用详情

MEMORY PURGE 向分配器索要释放更多内存

MEMORY MALLOC-STATS 视察分配器内部状态

另外还有一系列优化比如 LRU和PSYNC,还有模块系统。

三.Cluster

虽然一主一从加哨兵可以解决普通场景下服务可用的问题,但是两个节点分别存储所有的缓存数据,这不仅导致容量受限,更是让我们受限于机器配置最差的那一台,这就是木桶效应。硬件垂直扩容并不能解决日益庞大的缓存数据量和提供能搞得可用性。

在古老的Redis版本中,水平扩容的能力来自于发送命令的客户端,由客户端路由不同的key给到不同的节点,下次读取的时候,也按照相同方式路由key到指定节点拿到数据。如果接下来还希望增加扩容节点的话,就要对历史缓存数据做迁移,迁移过程中为保证数据一致性也要付出一定代价。为了解决节点的不断扩容,设计初期可以预先设置很多节点,以备日后使用,所有设计的节点都参与到分片当中,鉴于初期数据较少,可单台服务器多个节点,在日后数据增多的情况下,只需要迁移节点到新的服务器。而不需要对数据进行重新分配等操作。但是这种做法依然让我们觉得难维护,难迁移,难应对故障,迁移过程中也很难保证数据一致性,比如50个节点,任意一个节点想要停止并迁移服务器,都会引发数据不一致或者出现故障,只能停止集群,等待迁移完成后,集群上线。

Redis3.0提供了Cluster集群。这个集群的概念和前面提到的集群有所不同。前面的集群仅代表,多个节点间没有相互的关系,只是根据客户端路由分配key到不同的节点,所有节点共同分配所有数据。3.0的Cluster功能,拥有和单机实例相同的性能,几乎支持所有命令,对于涉及多个键的命令,比如MGET,如果每一个键都在同一个节点则可以正常返回数据,否则提示错误。另外集群中限制了0号数据库,如果切换数据库则会提示错误。

哨兵和集群是两个独立的功能,但从特性来看哨兵可以视为集群的子集。当不需要数据分片或者已经利用客户端分片的场景下哨兵已经足够使用,如果需要水平扩容,Cluster是非常好的选择。

每个集群至少三台主节点。

到redis-4.0.0目录下 修改redis.conf

修改所有redis.conf文件 在GENERAL一般设置中找到daemonize 将其设置为yes 我们将后台运行redis

protect mode为no

bind ip为0.0.0.0

集群搭建成功前不要设置连接密码。

设置maxmemory 100m

cluster-enabled设置为yes

注意cluster-config-file配置不同的名称。我刚开始给每个节点都配置nodes.conf , 结果弄了几个小时都不行,一直在waiting claster join. WTF??? 工作目录明明都是自己的文件夹呀,后来在stackoverflow上 看到有人相同情况,我就改下配置文件名试了一下,还真可以了....

把redis-4.0.0文件夹复制6份

我准备了两台服务器,当然一台服务器也是可以玩转的。

六个节点分别启动,此时集群是不能正常工作的,因为他们还是六个独立的节点。下面我们要使用src目录下的redis-trib.rb来将他们加入到同一个集群当中。但是.rb由Ruby编写,我们需要安装环境,还需要gem redis包。yum install ruby下载的是2.0版本,并且得不到升级, 我们需要ruby2.2+,所以我们不使用。ruby安装指南http://blog.csdn.net/lixwjava/article/details/49231899

wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.7.tar.gz
tar -zxvf ruby-2.2..tar.gz  
cd  ruby-2.2.
./configure  
make  
make test
make install  
如果顺利的话就安装完ruby了
如果没有zlib 先安装一下
yum install zlib-devel
yum install zlib
接下来进入ruby文件夹下ext/zlib中 安装ruby自身提供的zlib包
cd ext/zlib
ruby ./extconf.rb
make
make install

另外需要安装openssl (不装也行) http://blog.csdn.net/yangxuan0261/article/details/52065158  如果没装,更换gem镜像为非ssl的中国ruby镜像https://ruby.taobao.org/

gem sources --add http://gems.ruby-china.org/ --remove https://rubygems.org/
gem sources -l
gem install redis

在执行create cluster之前 请保证每个node的0库不包含任何key.如果有key 就对不纯洁的节点执行flushall和cluster reset 。每个Node都有一个特定的TCP端口,用来接收其他nodes的链接;此端口号为面向Client的端口号 + 10000,比如果客户端端口号为6379,那么次node的BUS端口号为16379,客户端端口号可以在配置文件中声明。由此可见,nodes之间的交互通讯是通过Bus端口进行,使用了特定的二进制协议,此端口通常应该只对nodes可用,可以借助防火墙技术来屏蔽其他非法访问。所以注意我们的所有节点端口+10000 也要保持开放

./redis-trib.rb create --replicas  47.92.93.157: 47.92.93.157: 47.92.93.157: 47.92.93.157: 47.92.93.157: 47.92.93.157:

启动redis-cli 使用-c参数 连接集群,将会为我们做一些自动重定向工作。

设置集群密码:

config set masterauth abc
config set requirepass abc
上面的配置 一定要每一个节点都配置执行一遍哦
config rewrite

Redis4.0 Cluster — Centos7的更多相关文章

  1. redis4.0 cluster搭建

    cd /root/tools wget http://pnxcvm0bq.bkt.clouddn.com/redis-4.0.9.tar.gz tar -zxvf redis-4.0.9.tar.gz ...

  2. redis-4.0.14 cluster 配置实战

    1.操作系统配置 切换到root用户修改配置sysctl.conf vim /etc/sysctl.conf # 添加配置: vm.max_map_count= vm.overcommit_memor ...

  3. CentOS7.6搭建redis4.0.1 cluster集群

    1. 操作系统信息: $ uname -a Linux iZbp11d57wmumnwuihb2czZ -.el7.x86_64 # SMP Fri Feb :: UTC x86_64 x86_64 ...

  4. CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务

    环境 VMware版本号:12.0.0 CentOS版本:CentOS 7.3.1611 三台虚拟机(IP):192.168.252.101,192.168.102..102,192.168.252. ...

  5. centos7/rhel7下安装redis4.0集群

    相关介绍:Redis从3.0版本开始支持集群! 集群一般由多个节点组成,节点数量至少6个才能保证组成完整高可用的集群. 每个节点需要开启配置文件中的cluster-enabled yes,让Redis ...

  6. Redis(二)CentOS7安装Redis4.0.10与集群搭建

    一 Redis单机安装 1 Redis下载安装 1.1 检查依赖环境(Redis是C语言开发,编译依赖gcc环境) [root@node21 redis-]$ gcc -v -bash: gcc: c ...

  7. centos7安装redis-4.0.1集群

    试验机操作系统:CentOS Linux release 7.2.1511 (Core) 本文的目的是教会大家快速搭建redis集群,完了再深入学习. 试问如果不上手试验,看的资料再多有个毛用? 下载 ...

  8. Redis(1.11)Redis4.0.11 cluster 分布式集群搭建

    概念与了解:Redis(1.7)Redis高可用架构(理论篇) [0]试验环境 结构图如下: (这里试验没有那么多机器,就用3台机器搭建试验) redis1是redis集群的一个节点A,上面运行了两个 ...

  9. Redis4.0.0 安装及配置 (Linux — Centos7)

    本文中的两个配置文件可在这里找到 操作系统:Linux Linux发行版:Centos7 安装 下载地址,点这里Redis4.0.0.tar.gz 或者使用命令: wget http://downlo ...

随机推荐

  1. 【ANT】java项目生成文件示例

    <?xml version="1.0" ?> <project default="dist"> <property name=&q ...

  2. bzoj 2726: [SDOI2012]任务安排

    Description 机 器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的 若干任务.从时刻0开始,这 ...

  3. 实体框架(Entity Frmaework)简介

    l简称EF  NH l与Asp.Net MVC关系与ADO.NET关系 lADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapp ...

  4. win10大水牛主机插入耳机没有声音

    主机:大水牛,技嘉主板 操作系统:win10 问题:主机前面插入耳机,没有声音,扬声器图标出错 解决 一..插入耳机 二..Realtek高清晰音频管理器 1.打开音频管理器,点击右下角的设置 2.点 ...

  5. vue监听scroll使用报错的解决办法

    错误说明:在切换路由以后,依旧在其他页面触发了scroll有关的函数, 错误原因:在spa项目中,window对象是不变的,所以每次使用后需要销毁. 解决办法:vue的生命周期destroyed中销毁 ...

  6. 轻量级quill富文本编辑器

    因为公司产品需要在移动端编辑文本,所以发现了这个轻量级的好东西,网上也没找到比较好的案例,就自己总结了下,有兴趣的直接复制代码运行看看就知道啦! 下面是quill.js的CDN加速地址: <!- ...

  7. ThreadLocal 线程本地变量 及 源码分析

    ■ ThreadLocal 定义 ThreadLocal通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量 ...

  8. C++ qsort

    使用qsort 需要包含头文件#include<algorithm> 例子: class Wooden{ public: int weight; int length; bool flag ...

  9. 教你如何安装配置Windows7系统 IIS IIS7.5本地浏览测试网站 完整版介绍

    大家都知道网站建设前期测试于浏览网站都喜欢用iis本地浏览来操作 那么为了方便大家自己来安装和配置Internet信息服务 相信大家,对于Windows 7有了相应的了解,从操作上,使用上,内置功能上 ...

  10. 关于oracle数据库 跨表查询建立 视图的方法

    工作中很多时候都会遇到需要将两个不同的表空间甚至数据库的表进行联合查询或者建立视图的情况. 不同的表空间查询我们可以通过在将要查询的表前面加上 表空间的对应的用户名来实现,如有两个表空间分别对应两个用 ...