redis3.0版本之后支持Cluster,具体介绍redis集群我就不多说,了解请看redis中文简介

首先,直接访问redis.io官网,下载redis.tar.gz,现在版本3.0.3,我下面已经在虚拟机启动了两个linux来部署redis。

1. 下载和解包

cd /usr/local/

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

tar -zxvf redis-3.0.3.tar.gz

mv redis-3.0.3  redis

2. 编译安装

cd redis

make && make install

有些人在这里可能会碰到一个错误导致编译不过(如下)

make[]: Entering directory `/redis/src'
CC adlist.o
In file included from adlist.c::
zmalloc.h::: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h::: error: #error "Newer version of jemalloc required"
make[]: *** [adlist.o] Error
make[]: Leaving directory `/redis/src'
make: *** [all] Error

原因是没有安装jemalloc内存分配器,可以安装jemalloc 或 直接 输入make MALLOC=libc  && make install

3. 创建redis节点

我们将在两台Server上创建六个节点,每台3个,3主3从。

1)Server1

cd /usr/local/

mkdir redis_cluster   //创建集群目录

mkdir 7000 7001 7002   //分别代表三个节点    其对应端口 7000 7001 7002

创建7000节点为例,

cd ./7000

cp /usr/local/redis/redis.conf   ./    //拷贝到当前7000目录

vi redis.conf    //编辑配置  主要修改一下几个参数

daemonize    yes                          //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000
port //端口7000
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes.conf //集群的配置 配置文件首次启动自动生成
cluster-node-timeout //请求超时 设置5秒够了
appendonly on //aof日志开启 有需要就开启,它会每次写操作都记录一条日志 (全持久化)
#save 900 1
#save 300 10 //注释掉这几个,这是写磁盘的配置,我只是做缓存,不需要写磁盘 (半持久化)
#save 60 10000 //开启的话,在启动节点后,会生成相应的dump.rdb

配置好了,就相应地把这个修改后的配置文件拷贝到 7001  7002目录,注意要修改监听端口port 7001 7002.

接下来,启动服务,进入节点目录

依次执行  redis-server   redis.conf

可以看到生成了appendonly.aof  nodes.conf

ps -ef | grep redis 查看是否启动成功

root 885 0.8 0.2 129452 2620 ? Ssl 20:10 0:21 redis-server *:7000 [cluster]
       root 887 0.8 0.2 129452 2616 ? Ssl 20:10 0:21 redis-server *:7001 [cluster]
       root 893 0.8 0.2 128356 2612 ? Ssl 20:10 0:21 redis-server *:7002 [cluster]

netstat -tnlp | grep redis 可以看到redis监听端口

tcp 0 0 0.0.0.0:7000 0.0.0.0:* LISTEN 885/redis-server *
       tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 887/redis-server *
       tcp 0 0 0.0.0.0:7002 0.0.0.0:* LISTEN 893/redis-server *
       tcp 0 0 0.0.0.0:17000 0.0.0.0:* LISTEN 885/redis-server *
       tcp 0 0 0.0.0.0:17001 0.0.0.0:* LISTEN 887/redis-server *
       tcp 0 0 0.0.0.0:17002 0.0.0.0:* LISTEN 893/redis-server *

我们除了看到 配置文件中设置的端口700*    还有700*+10000  (1700*), 前者是客户端访问的, 后者是集群内部节点之间访问的.

注意,在多台Server间搭建集群,如果开了防火墙的,需要设置iptables开放上面所有端口.

2) Server2

步骤和Server1一样, 设置端口  7003  7004  7005

 4. 创建集群

   前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具:redis-trib.rb  (/usr/local/redis/src/redis-trib.rb) 看后缀就知道这鸟东西不能直接执行,它是用ruby写的一个程序,所以我们还得安装ruby.

yum -y install ruby ruby-devel rubygems rpm-build    //网上不明觉厉,都是这么安装的,就跟着这样玩吧

再用 gem 这个命令来安装 redis接口     gem貌似是ruby的一个工具包  反正没错就是了。

gem install redis     //等一会儿就好了

当然,方便操作,两台Server都要安装。

上面的步骤完事了,接下来运行一下redis-trib.rb

/usr/local/redis/src/redis-trib.rb

Usage: redis-trib <command> <options> <arguments ...>

  reshard         host:port
--to <arg>
--yes
--slots <arg>
--from <arg>
check host:port
call host:port command arg arg .. arg
set-timeout host:port milliseconds
add-node new_host:new_port existing_host:existing_port
--master-id <arg>
--slave
del-node host:port node_id
fix host:port
import host:port
--from <arg>
help (show this help)
create host1:port1 ... hostN:portN
--replicas <arg> For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

看到这,应该明白了吧, 就是靠上面这些操作 完成redis集群搭建的.

确认所有的节点都启动,接下来使用参数create 创建     (在Server1中来创建)

/usr/local/redis/src/redis-trib.rb  create  --replicas  1   127.0.0.1:7000  127.0.0.1:7001  192.168.1.199:7003  192.168.1.199:7004  192.168.1.199:7005  127.0.0.1:7002

解释下, --replicas  1  表示 自动为每一个master节点分配一个slave节点    上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)

前面已经提醒过的 防火墙一定要开放监听的端口,否则会创建失败。

运行中,提示Can I set the above configuration? (type 'yes' to accept): yes    //输入yes

接下来 提示   Waiting for the cluster to join..........  安装的时候在这里就一直等等等,没反应,傻傻等半天,看这句提示上面一句,Sending Cluster Meet Message to join the Cluster.

这下明白了,我刚开始在一台Server上去配,也是不需要等的,这里还需要跑到Server2上做一些这样的操作。

在Server2, redis-cli -c -p 700*  分别进入redis各节点的客户端命令窗口, 依次输入 cluster meet 192.168.1.197 7000……

回到Server1,已经创建完毕了。

查看一下 /usr/local/redis/src/redis-trib.rb check 127.0.0.1:7000

到这里集群已经初步搭建好了。

5. 测试

1)get 和 set数据

redis-cli -c -p 7000

进入命令窗口,直接 set  hello   howareyou

直接根据hash匹配切换到相应的slot的节点上。

还是要说明一下,redis集群有16383个slot组成,通过分片分布到多个节点上,读写都发生在master节点。

2)假设测试

哥果断先把Server2服务Down掉,(Server2有1个Master, 2个Slave) ,  跑回Server1, 查看一下 发生了什么事,Server1的3个节点全部都是Master,其他几个Server2的不见了

测试一下,依然没有问题,集群依然能继续工作。

原因:  redis集群  通过选举方式进行容错,保证一台Server挂了还能跑,这个选举是全部集群超过半数以上的Master发现其他Master挂了后,会将其他对应的Slave节点升级成Master.

疑问: 要是挂的是Server1怎么办?    哥试了,cluster is down!!    没办法,超过半数挂了那救不了了,整个集群就无法工作了。 要是有三台Server,每台两Master,切记对应的主从节点

不要放在一台Server,别问我为什么自己用脑子想想看,互相交叉配置主从,挂哪台也没事,你要说同时两台crash了,呵呵哒......

3)关于一致性

我还没有这么大胆拿redis来做数据库持久化哥网站数据,只是拿来做cache,官网说的很清楚,Redis Cluster is not able to guarantee strong consistency.

4)项目中实践

项目是java的,选了 Jedis 这个开发包,哥先去跑跑看,就写到这里啦。有什么重大发现再续写喔。

redis3.0.3集群搭建的更多相关文章

  1. Redis 5.0.5集群搭建

    Redis 5.0.5集群搭建 一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2):s ...

  2. redis3.0.5集群部署安装详细步骤

    Redis集群部署文档(centos6系统) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) ...

  3. java_redis3.0.3集群搭建

    redis3.0版本之后支持Cluster,具体介绍redis集群我就不多说,了解请看redis中文简介. 首先,直接访问redis.io官网,下载redis.tar.gz,现在版本3.0.3,我下面 ...

  4. Redis 3.0.2集群搭建以及相关问题汇总

    Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便 (1)像操作单个redis一样操作key,不用操心key在哪个节点上(2)在线动态添加.删除redis节点,不用停止 ...

  5. Hadoop2.0 HA集群搭建步骤

    上一次搭建的Hadoop是一个伪分布式的,这次我们做一个用于个人的Hadoop集群(希望对大家搭建集群有所帮助): 集群节点分配: Park01 Zookeeper NameNode (active) ...

  6. CDH 6.0.1 集群搭建 「After install」

    集群搭建完成之后其实还有很多配置工作要做,这里我列举一些我去做的一些. 首先是去把 zk 的角色重新分配一下,不知道是不是我在配置的时候遗漏了什么在启动之后就有报警说目前只能检查到一个节点.去将 zk ...

  7. CDH 6.0.1 集群搭建 「Before install」

    从这一篇文章开始会有三篇文章依次介绍集群搭建 「Before install」 「Process」 「After install」 继上一篇使用 docker 部署单机 CDH 的文章,当我们使用 d ...

  8. redis4.0.6集群搭建

    文件环境:CentOS7 + redis4.0.6 先去官网下载redis:https://redis.io/,然后上传到你的虚拟机,我上传到了/mysoft 先解压->然后进入主目录-> ...

  9. ubuntu18.04 flink-1.9.0 Standalone集群搭建

    集群规划 Master JobManager Standby JobManager Task Manager Zookeeper flink01 √ √ flink02 √ √ flink03 √ √ ...

随机推荐

  1. MySQL 8 中新的复制功能

    MySQL 8 中新的复制功能使得操作更加方便,并帮助用户更好地观察复制过程中内部发生的情况. 使用 MySQL 5.7.17 获取 MySQL 组复制插件是一项巨大的工作.组复制是一个新的插件,通过 ...

  2. cpu使用过高的一次处理方法

    1.top查看使用情况 2.查看mysql里的线程,观察是否有长期运行或阻塞的sql: show full processlist 原因找到,处理方法,添加索引,搞定

  3. 转:一千行MYSQL 笔记

    原文地址: https://shockerli.net/post/1000-line-mysql-note/ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ ...

  4. Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCompc dtS312 s2018 s3f doc compc\Atitit PathUtil 工具新特性新版本 v8 s312.docx s2018 s3f doc compc\Atitit 操作日

    Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCompc ...

  5. 针对json的查询--alibaba的开源项目jsonq

    项目地址: https://github.com/alibaba/jsonq 示例json { , , "test": "Hello, world!", &qu ...

  6. github控件地址

    地址: https://github.com/wasabeef/awesome-android-ui http://www.jcodecraeer.com/plus/list.php?tid=31 h ...

  7. Java中Comparable和Comparator区别

    很好的一篇博客:http://blog.csdn.net/jq_ak47/article/details/61203817 http://www.cnblogs.com/cmxwt/p/6215253 ...

  8. mac下安装mysql5.7.18,连接出现Access denied for user 'root'@'localhost' (using password: YES)

    mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ...

  9. Web重温系列(二):SQLite+EF6实现本地化存储

    本来我们的产品有着复杂的层次结构,作为客户端的C# WinForm是不操作数据库的.但是最近有个需求,需要将数据本地保存.可选的方案很多,比如文本文件或者XML序列化和反序列化,或者如access.d ...

  10. error connecting: Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置

    [参考]Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 [参考][数据库-MySql] MySqlConnection error connec ...