第一步:安装Redis

前面已经安装过了 不解释,

Reids安装包里有个集群工具,要复制到/usr/local/bin里去

cp redis-3.2.9/src/redis-trib.rb /usr/local/bin

第二步:修改配置,创建节点

我们现在要搞六个节点,三主三从,

端口规定分别是7001,7002,7003,7004,7005,7006

我们先在root目录下新建一个redis_cluster目录,然后该目录下再创建6个目录,

分别是7001,7002,7003,7004,7005,7006,用来存在redis配置文件;

这里我们要使用redis集群,要先修改redis的配置文件redis.conf

mkdir redis_cluster 新建目录

[root@localhost ~]# cd redis_cluster/

[root@localhost redis_cluster]# mkdir 7001 7002 7003 7004 7005 7006

[root@localhost redis_cluster]# ll

总用量 0

drwxr-xr-x. 2 root root 6 7月  27 17:18 7001

drwxr-xr-x. 2 root root 6 7月  27 17:18 7002

drwxr-xr-x. 2 root root 6 7月  27 17:18 7003

drwxr-xr-x. 2 root root 6 7月  27 17:18 7004

drwxr-xr-x. 2 root root 6 7月  27 17:18 7005

drwxr-xr-x. 2 root root 6 7月  27 17:18 7006

[root@localhost redis_cluster]#

先复制一份配置文件到7001目录下

[root@localhost redis_cluster]# cd

[root@localhost ~]# cp redis-3.2.9/redis.conf redis_cluster/7001/

我们修改下这个配置文件

vi redis_cluster/7001/redis.conf

修改一下几个

port 7001  //六个节点配置文件分别是7001-7006

daemonize yes        //redis后台运行

pidfile /var/run/redis_7001.pid   //pidfile文件对应7001-7006

cluster-enabled yes   //开启集群

cluster-config-file nodes_7001.conf  //保存节点配置,自动创建,自动更新对应7001-7006

cluster-node-timeout 5000    //集群超时时间,节点超过这个时间没反应就断定是宕机

appendonly yes   //存储方式,aof,将写操作记录保存到日志中

7001下的修改完后,我们把7001下的配置分别复制到7002-7006 然后对应的再修改下配置即可;

[root@localhost ~]# cp redis_cluster/7001/redis.conf redis_cluster/7002/

[root@localhost ~]# cp redis_cluster/7001/redis.conf redis_cluster/7003/

[root@localhost ~]# cp redis_cluster/7001/redis.conf redis_cluster/7004/

[root@localhost ~]# cp redis_cluster/7001/redis.conf redis_cluster/7005/

[root@localhost ~]# cp redis_cluster/7001/redis.conf redis_cluster/7006/

[root@localhost ~]# vi redis_cluster/7002/redis.conf

[root@localhost ~]# vi redis_cluster/7003/redis.conf

[root@localhost ~]# vi redis_cluster/7004/redis.conf

[root@localhost ~]# vi redis_cluster/7005/redis.conf

[root@localhost ~]# vi redis_cluster/7006/redis.conf

编辑后面5个配置文件,把 port ,pidfile,cluster-config-file 分别修改下即可;

第三步:启动六个节点的redis

[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7001/redis.conf

[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7002/redis.conf

[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7003/redis.conf

[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7004/redis.conf

[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7005/redis.conf

[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7006/redis.conf

启动六个节点

[root@localhost ~]# ps -ef | grep redis

查找下redis进程

root       9501      1  0 17:38 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:7001 [cluster]

root       9512      1  0 17:45 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:7002 [cluster]

root       9516      1  0 17:45 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:7003 [cluster]

root       9520      1  0 17:45 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:7004 [cluster]

root       9524      1  0 17:45 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:7005 [cluster]

root       9528      1  0 17:45 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:7006 [cluster]

说明都启动成功了

第四步:创建集群

redis官方提供了redis-trib.rb工具,第一步里已经房到里bin下 ;

但是在使用之前 需要安装ruby,以及redis和ruby连接

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

gem install redis

redis-trib.rb create --replicas 1  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 127.0.0.1:7006

创建集群

[root@localhost ~]# redis-trib.rb create --replicas 1  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 127.0.0.1:7006

>>> Creating cluster

>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

127.0.0.1:7001

127.0.0.1:7002

127.0.0.1:7003

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

Adding replica 127.0.0.1:7006 to 127.0.0.1:7003

M: bfcfcdc304b011023fa568e044ea23ea6bc03c3c 127.0.0.1:7001

slots:0-5460 (5461 slots) master

M: d61e66e49e669b99d801f22f6461172696fdd1c9 127.0.0.1:7002

slots:5461-10922 (5462 slots) master

M: aa6bc3f1e1174c3a991c01882584707c2408ec18 127.0.0.1:7003

slots:10923-16383 (5461 slots) master

S: 7908a60306333c5d7c7c5e7ffef44bdf947ef0a4 127.0.0.1:7004

replicates bfcfcdc304b011023fa568e044ea23ea6bc03c3c

S: 1d2341fd3b79ef0fccb8e3a052bba141337c6cdd 127.0.0.1:7005

replicates d61e66e49e669b99d801f22f6461172696fdd1c9

S: f25b35f208dc96605ee4660994d2ac52f39ac870 127.0.0.1:7006

replicates aa6bc3f1e1174c3a991c01882584707c2408ec18

Can I set the above configuration? (type 'yes' to accept):

从运行结果看 主节点就是7001 7002 7003 从节点分别是7004 7005 7006

7001分配到的哈希槽是 0-5460

7002分配到的哈希槽是 5461-10922

7003分配到的哈希槽是 10923-16383

最后问我们是否接受上面的设置,输入yes 就表示接受,我们输入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:7001)

M: bfcfcdc304b011023fa568e044ea23ea6bc03c3c 127.0.0.1:7001

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: f25b35f208dc96605ee4660994d2ac52f39ac870 127.0.0.1:7006

slots: (0 slots) slave

replicates aa6bc3f1e1174c3a991c01882584707c2408ec18

M: d61e66e49e669b99d801f22f6461172696fdd1c9 127.0.0.1:7002

slots:5461-10922 (5462 slots) master

1 additional replica(s)

S: 1d2341fd3b79ef0fccb8e3a052bba141337c6cdd 127.0.0.1:7005

slots: (0 slots) slave

replicates d61e66e49e669b99d801f22f6461172696fdd1c9

M: aa6bc3f1e1174c3a991c01882584707c2408ec18 127.0.0.1:7003

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 7908a60306333c5d7c7c5e7ffef44bdf947ef0a4 127.0.0.1:7004

slots: (0 slots) slave

replicates bfcfcdc304b011023fa568e044ea23ea6bc03c3c

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

显示配置哈希槽,以及集群创建成功,可以用了;

 

第五步:集群数据测试

我们先连接任意一个节点,然后添加一个key:

redis-cli是redis默认的客户端工具,启动时加上`-c`参数,`-p`指定端口,就可以连接到集群。

连接任意一个节点端口:

[root@localhost ~]# /usr/local/redis/bin/redis-cli -c -p 7002

127.0.0.1:7002>

我们连接7002

127.0.0.1:7002> set xxx  'fdafda'

-> Redirected to slot [4038] located at 127.0.0.1:7001

OK

前面说过Redis Cluster值分配规则,所以分配key的时候,它会使用CRC16(‘my_name’)%16384算法,来计算,将这个key 放到哪个节点,这里分配到了4038slot 就分配到了7001(0-5460)这个节点上。所以有:

Redirected to slot [4038] located at 127.0.0.1:7001

我们从其他集群节点 ,都可以获取到数据

127.0.0.1:7001> exit

[root@localhost ~]# /usr/local/redis/bin/redis-cli -c -p 7005

127.0.0.1:7005> get xxx

-> Redirected to slot [4038] located at 127.0.0.1:7001

"fdafda"

127.0.0.1:7001>

第六步:集群宕机测试

假如我们干掉一个节点,比如7002 这个主节点

[root@localhost ~]#  ps -ef | grep redis

root       9501      1  0 17:38 ?        00:00:02 /usr/local/redis/bin/redis-server 127.0.0.1:7001 [cluster]

root       9512      1  0 17:45 ?        00:00:01 /usr/local/redis/bin/redis-server 127.0.0.1:7002 [cluster]

root       9516      1  0 17:45 ?        00:00:01 /usr/local/redis/bin/redis-server 127.0.0.1:7003 [cluster]

root       9520      1  0 17:45 ?        00:00:02 /usr/local/redis/bin/redis-server 127.0.0.1:7004 [cluster]

root       9524      1  0 17:45 ?        00:00:01 /usr/local/redis/bin/redis-server 127.0.0.1:7005 [cluster]

root       9528      1  0 17:45 ?        00:00:01 /usr/local/redis/bin/redis-server 127.0.0.1:7006 [cluster]

root       9601   2186  0 18:12 pts/0    00:00:00 grep --color=auto redis

[root@localhost ~]# kill -9 9512

[root@localhost ~]#  ps -ef | grep redis

root       9501      1  0 17:38 ?        00:00:02 /usr/local/redis/bin/redis-server 127.0.0.1:7001 [cluster]

root       9516      1  0 17:45 ?        00:00:01 /usr/local/redis/bin/redis-server 127.0.0.1:7003 [cluster]

root       9520      1  0 17:45 ?        00:00:02 /usr/local/redis/bin/redis-server 127.0.0.1:7004 [cluster]

root       9524      1  0 17:45 ?        00:00:01 /usr/local/redis/bin/redis-server 127.0.0.1:7005 [cluster]

root       9528      1  0 17:45 ?        00:00:01 /usr/local/redis/bin/redis-server 127.0.0.1:7006 [cluster]

root       9603   2186  0 18:12 pts/0    00:00:00 grep --color=auto redis

[root@localhost ~]#

然后再来看下集群的情况

redis-trib.rb check 127.0.0.1:7001

>>> Performing Cluster Check (using node 127.0.0.1:7001)

M: bfcfcdc304b011023fa568e044ea23ea6bc03c3c 127.0.0.1:7001

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: f25b35f208dc96605ee4660994d2ac52f39ac870 127.0.0.1:7006

slots: (0 slots) slave

replicates aa6bc3f1e1174c3a991c01882584707c2408ec18

M: 1d2341fd3b79ef0fccb8e3a052bba141337c6cdd 127.0.0.1:7005

slots:5461-10922 (5462 slots) master

0 additional replica(s)

M: aa6bc3f1e1174c3a991c01882584707c2408ec18 127.0.0.1:7003

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 7908a60306333c5d7c7c5e7ffef44bdf947ef0a4 127.0.0.1:7004

slots: (0 slots) slave

replicates bfcfcdc304b011023fa568e044ea23ea6bc03c3c

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

我们发现 7005本来是从节点,由于他对应的主节点挂了,就自动变成主节点master,所有会有最后一个说明

All 16384 slots covered. 所有哈希槽都可覆盖了; 集群可以正常使用;

假如我们把7005也干掉,试试看

[root@localhost ~]# kill -9 9524

[root@localhost ~]#  ps -ef | grep redis

root       9501      1  0 17:38 ?        00:00:03 /usr/local/redis/bin/redis-server 127.0.0.1:7001 [cluster]

root       9516      1  0 17:45 ?        00:00:02 /usr/local/redis/bin/redis-server 127.0.0.1:7003 [cluster]

root       9520      1  0 17:45 ?        00:00:03 /usr/local/redis/bin/redis-server 127.0.0.1:7004 [cluster]

root       9528      1  0 17:45 ?        00:00:02 /usr/local/redis/bin/redis-server 127.0.0.1:7006 [cluster]

root       9610   2186  0 18:16 pts/0    00:00:00 grep --color=auto redis

[root@localhost ~]#

查看下集群情况

redis-trib.rb check 127.0.0.1:7001

这里我们发现 出事了,因为主从节点都挂了 所以有一部分哈希槽没得分配,最后一句

[ERR] Not all 16384 slots are covered by nodes.  没有安全覆盖;

所以不能正常使用集群;

Redis单机多节点集群实验的更多相关文章

  1. redis 单机模拟 cluster集群

    一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心 ...

  2. Redis单机安装以及集群搭建

    今天主要来看一下Redis的安装以及集群搭建(我也是第一次搭建). 环境:CentOS 7.1,redis-5.0.7 一.单机安装 1.将Redis安装包放置服务器并解压 2.进入redis安装目录 ...

  3. Windows下ELK环境搭建(单机多节点集群部署)

    1.背景 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时 ...

  4. RabbitMQ-rabbitmqctl多机多节点和单机多节点集群搭建(五)

    准备 1.准备3台物理机 我这里通过本地机和2台虚拟模拟我是mac通过(Parallel Desktop 实现) 2.按照签名的liux安装步骤在3台机器都安装rabiitMq 3.将任意一节点的co ...

  5. Redis多机多节点集群实验

    第一步:环境准备 我们搞两台虚拟机 局域网IP 分别是 192.168.1.109和192.168.1.110 我们约定把192.168.1.109作为集群控制端,需要安装redis-trib.rb ...

  6. 峰Redis学习(10)Redis 集群(单机多节点集群和多机多节点集群)

    单机多节点集群:参考博客:http://blog.java1234.com/blog/articles/326.html 多机多节点集群:参考博客:http://blog.java1234.com/b ...

  7. redis单机上部署集群

    一.安装单机redis  redis的安装:版本至少是3.2.8及其以上,这里以3.2.8版本为例说明 1.安装redis wget http://download.redis.io/releases ...

  8. Redis单机配置以及集群(sentinel、jediscluster)配置

    最近一直在使用Redis作为缓存数据库,在使用当中,刚开始没有注意配置问题. 1.纯粹的注入单机模式 <bean id="jedisPoolConfig" class=&qu ...

  9. Elasticsearch单机双节点集群部署实战

    一.安装第一个ElasticSearch(主节点) 1.创建es用户,启动es不能使用root用户 useradd es passwd es12 root用户进入/home/es目录下 2.获取Ela ...

随机推荐

  1. 将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”。

    可以利用反射将DataTable转换为List<T>对象:原始链接http://www.jb51.net/article/67386.htm 但是该方法在DataTable里某个字段类型是 ...

  2. 点击页面上的元素,页面删除removeChild()

    简单描述:最近做了一个图片上传,上传完成回显图片的时候,需要用到点击图片,从页面删除的效果,然后就找到了removeChild()方法,说实话,我刚看到的时候,就觉得这个问题已经解决了,但是却发现这个 ...

  3. Web Application Vulnerablities

    1. File inclusion berfoe start this caption  i make a conclusion for install third-part as follow I ...

  4. sass创建web项目环境步骤

    1)npm创建web前端项目环境步骤 1.新建文件夹,在该文件下进入cmd控制台2.输入命令 npm init 回车3.name:名字只支持小写,不支持大写,将大写的名字改为小写即可4.version ...

  5. selenium+python-unittest多线程生成报告

    前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点,刚好在github上有个大神分享了BeautifulReport,完美的结合起来,就能生成报告了. 环境必备 ...

  6. elasticsearch-5.2.1在windows下的安装方法

    elasticsearch-5.2.1安装方法 1. 安装java 下载安装java jdk 1.8 以上 配置java环境变量 右击[我的电脑]---[属性]-----[高级系统设置]---[环境变 ...

  7. 5.基于优化的攻击——CW

    CW攻击原论文地址——https://arxiv.org/pdf/1608.04644.pdf 1.CW攻击的原理 CW攻击是一种基于优化的攻击,攻击的名称是两个作者的首字母.首先还是贴出攻击算法的公 ...

  8. sbadmin表单事件

    Form表单 自定义表单 <from action="" method="'><!---      这里可以用表单组件快速生成表单元素哦        ...

  9. Terraria(泰拉瑞亚)存档覆盖(Linux)

    这是一篇关于游戏的不正经博客 ~ 游戏介绍: <泰拉瑞亚>是由Re-Logic公司开发的一款高自由度的沙盒游戏,于2011年5月16日在PC上发行. 玩家可以在游戏中做很多事情:制造武器战 ...

  10. 关于FastReport在winform中的使用(包含FastReport.net的安装步骤链接)

    一.FastReport的简介 FastReport是功能齐全的报表控件,使开发者可以快速并高效地为·NET/VCL/COM/ActiveX应用程序添加报表支持. 二.FastReport的安装(推荐 ...