1、虚拟机环境

使用的Linux环境已经版本:

Centos 7   64位系统

主机ip:

192.168.56.180

192.168.56.181

192.168.56.182

每台服务器是1主1从,实验3台服务器课成为3主3从。

Redis安装的项目目录、日志、配置文件等都存放在/root/svr/目录下。

2、下载相关的安装包以及解压

首先在192.168.56.180机器操作:

cd /root/svr
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -zxvf redis-3.2.9.tar.gz

3、安装

在/root/svr/redis-3.2.9/目录下执行:

make install PREFIX=/root/svr/redis-3.2.9

4、配置信息

创建集群配置、log日志、数据所在的文件夹:

cd /root/svr/redis-3.2.9/
mkdir cluster-conf

创建集群端口文件夹:

cd cluster-conf
mkdir 7777
mkdir 8888

复制配置文件到/root/svr/redis-3.2.9/cluster-conf/7777目录下:

cp /root/svr/redis-3.2.9/redis.conf  /root/svr/redis-3.2.9/cluster-conf/7777

修改7777目录下redis.conf配置文件:

(注意:找到相应的信息修改,或者把修改的信息全部注释掉,重新添加下面信息到头部,有利于以后修改和查看)

#注释掉ip或者设置0.0.0.0都是局域网访问
#bind 127.0.0.1
#端口号
port 7777 #指定了记录日志的文件
logfile "/root/svr/redis-3.2.9/cluster-conf/7777/redis.log" #该目录要事先创建好,数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir /root/svr/redis-3.2.9/cluster-conf/7777/ #是否开启集群
cluster-enabled yes #集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息,
#这个文件并不需要手动配置,这个配置文件有Redis生成并更新,
#每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突。
cluster-config-file nodes.conf #节点互连超时的阀值。集群节点超时毫秒数
cluster-node-timeout 5000 #默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了,
#但是redis如果中途宕机,会导致可能有几分钟的数据丢失,
#根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,
#Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,
#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
appendonly yes

复制7777目录下redis.conf至8888并修改端口及存储路径:

cp /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf /root/svr/redis-3.2.9/cluster-conf/8888

5、使用scp复制安装和配置好的redis复制到其他服务器上

已经在192.168.56.180机器配置好,复制到181和182机器

在两台新机器上创建文件夹

mkdir /root/svr

复制:

scp -r /root/svr/redis-3.2.9 root@192.168.56.181:/root/svr/
#输入181机器密码即可传输数据。
scp -r /root/svr/redis-3.2.9 root@192.168.56.182:/root/svr/
#输入182机器密码即可传输数据。

6、启动3台机器的redis

3台机器执行启动方式:

/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf &
/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/8888/redis.conf &

查看状态是否:

ps -ef|grep redis

7、创建集群

/root/svr/redis-3.2.9/src/redis-trib.rb create --replicas 1 192.168.56.180:7777 192.168.56.180:8888 192.168.56.181:7777 192.168.56.181:8888 192.168.56.182:7777 192.168.56.182:8888

无法创建,提示错误信息:

提示错误,是没有安装ruby这个插件,因为redis

集群创建的程序文件redis-trib,rb是由ruby来编写的,需要安装:

yum install ruby

安装ruby完毕接着执行上面的创建集群命令

报错。这时候需要安装一些和ruby与reids相关程序包和类库

yum install rubygems
gem install reids

报错,提示ruby版本需要大于2.2.2版本。CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2

需要安装个高版本的ruby

#安装curl
yum install curl
#安装rvm
#gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
#curl -L get.rvm.io | bash -s stable
#source /usr/local/rvm/scripts/rvm

查看rvm库中已知的ruby版本

rvm list known

安装一个ruby版本

rvm install 2.4.0

使用一个ruby版本

rvm use  2.4.0

卸载一个已知版本

rvm remove 2.0.0

查看现在版本

ruby --version

在重新安装ruby相关的redis就可以了

gem install redis

更新ruby版本、移除旧版本、重新安装reids完毕。接着执行上面的创建集群命令。

还是出现错误:提示连接不上节点:

这时候需要排查一下错误:

第一:服务器是否关闭防火墙

systemctl status firewalld.service  #查看防火墙
systemctl stop firewlld.service #关闭防火墙

(我这边已经关闭)

第二:是否所有的节点都启动

ps -ef|grep redis

(我这边都已经启动并且正常运行)

第三:服务器之间是否ping通

ping 192.168.56.180

ping 192.168.56.181

ping 192.168.56.182

(我这边都能正常ping通过)

第四:是否可以telnet ip port  连接上

yum install telnet
telbet 192.168.56.180 7777

出现错误:提示redis是受保护的,需要身份验证才可以进行:

这个问题解决可以有两种方法解决:

(1)修改配置文件redis.conf的权限参数设置为no,就是不需要权限验证

protected-mode no

(2)修改配置文件redis.conf的权限设置安全密码(密码自定义设置)

requirepass “111111”   #权限密码

我这里是第一解决方法,不需要权限,先kill启动的6个redis进程,在修改配置文件。在启动reidis服务。

接着执行上面的创建集群命令。

创建集群启动成功。

8、测试redis集群

#登录客户端
./redis-cli -c -p 7777(或者8888) #-c 参数:表示使用集群模式连接

在192.168.56.181:7777服务set值

在192.168.56.182:8888服务上get

9、数据解析

完整搭建起来,管理的集群以及主从关联都在nodes.conf文件中生成的,我这边集群节点的生成配置文件数据显示

主/从                   节点id                       ip     prot   slot槽范围     槽数量     m/s   主从等比例  附近信息(如果是主节点记录为复制功能,如果是从节点,关联相应的主节点id)

M: 3f0d98eebfa18364a95ce7a578865ba7a3ef4493 192.168.56.180:7777 slots:0-5460 (5461 slots) master 1 additional replica(s)
S: 54a525c670ad92a45dccfa92164c0a5f220a10bc 192.168.56.180:8888 slots: (0 slots) slave replicates 078973835bb8a36aeef272c2e243a9d9d733ea96 M: 078973835bb8a36aeef272c2e243a9d9d733ea96 192.168.56.181:7777 slots:5461-10922 (5462 slots) master 1 additional replica(s)
S: 4e13f9dca80c63079e536b17eaa81cef8fcba624 192.168.56.182:8888 slots: (0 slots) slave replicates 3c0fa46c14e6d25c7e7b01079162baec86bd88e9 M: 3c0fa46c14e6d25c7e7b01079162baec86bd88e9 192.168.56.182:7777 slots:10923-16383 (5461 slots) master 1 additional replica(s)
S: d507f34a7dab6dc512a82427e3731967f5a69101 192.168.56.181:8888 slots: (0 slots) slave replicates 3f0d98eebfa18364a95ce7a578865ba7a3ef4493

当节点挂了,nodes.conf会记录新的数据

当主节点挂了,因为集群会一直在监听集群中的主从节点的状态。加入一个主节点挂了,集群监听机制检查到,会对主节点的槽(数据)进行迁移,按照投票机制将主节点关联的从节点进行选举出一个充当主节点,因为我这里一个主节点关联一个从节点,所以只能是那个充当。

10、扩展知识

(1)持久层的配置和原理:rdb和aof

(2)哨兵、数据字段迁移、键空间迁移、在线迁移、redis-trib.rb的详解

(3)集群节点添加,删除

(4)Jedis客户端对集群的数据操作:set、list、key/value、hash等

(5)将key值执行CRC16算法对18384个槽进行取模

(6)压测.........

Redis随笔(四)Centos7 搭redis3.2.9集群-3主3从的6个节点服务的更多相关文章

  1. centos7安装redis3.2.5集群

    安装参照     https://blog.csdn.net/mingliangniwo/article/details/54600640  https://blog.csdn.net/u013820 ...

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

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

  3. 缓存系列之五:通过codis3.2实现redis3.2.8集群的管理

    通过codis3.2实现redis3.2.8集群 一:Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没 ...

  4. 大数据学习之旅2——从零开始搭hadoop完全分布式集群

    前言 本文从零开始搭hadoop完全分布式集群,大概花费了一天的时间边搭边写博客,一步一步完成完成集群配置,所以相信大家按照本文一步一步来完全可以搭建成功.需要注意的是本文限于篇幅和时间的限制,也是为 ...

  5. Redis-3.2.1集群内网部署

    摘要: Redis-3.2.1集群内网部署 http://rubygems.org国内连不上时的一种Redis集群部署解决方案.不足之处,请广大网友指正,谢谢! 一. 关于redis cluster  ...

  6. redis3.2.2 集群

    http://blog.csdn.net/imxiangzi/article/details/52431729 http://www.2cto.com/kf/201701/586689.html me ...

  7. Redis面试题详解:哨兵+复制+事务+集群+持久化等

    Redis主要有哪些功能? 1.哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. ...

  8. Redis 5.0.7 讲解,单机、集群模式搭建

    Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...

  9. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

随机推荐

  1. jQuery 插件 Magnify 开发简介(仿 Windows 照片查看器)

    前言 因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽.调整大小.最大化, ...

  2. 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )

    参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript>  —— KYLE SIMPSON   在JS的面向 ...

  3. selenium python自动化简明演示

    1.selenium安装: pip install -U selenium参考:https://pypi.python.org/pypi/selenium#downloads2.下载firefox驱动 ...

  4. Linux文件系统概述

    Unix文件是以字节序列组成的信息载体(container),内核不解释文件的内容. Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有系统的结构,所有Linux用户和程序 ...

  5. mouseout、mouseover和mouseleave、mouseenter区别

    今天在使用鼠标事件时,用错了mouseout,于是做个测试总结. 结论: mouseenter:当鼠标移入某元素时触发. mouseleave:当鼠标移出某元素时触发. mouseover:当鼠标移入 ...

  6. Nginx的 HTTP 499 状态码处理

    1.前言 今天在处理一个客户问题,遇到Nginx access log中出现大量的499状态码.实际场景是:客户的域名通过cname解析到我们的Nginx反向代理集群上来,客户的Web服务是由一个负载 ...

  7. lua的通用print函数

    1.前言 最近在做关于openresty方面的工作,涉及到lua脚本语言,经常需要打日志查看内容.普通的print函数遇到nil或table时,非常无力.而项目中的代码经常遇到参数为nil或table ...

  8. TXDragon的大火题合集

    还有三个题没写,弃疗了 Solution

  9. lesson - 5 课程笔记 which/ type / whereis /locate /pwd / etc/passwd/ shadow/ group / gshadow /useradd /usermod /userdel /passwd / su sudo

    一.which 作用: which 命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录, which 命令会在环境变量$PATH 设置的目录里查找符合条件的文件.也 ...

  10. FPGA浮点数定点化

    因为在普通的fpga芯片里面,寄存器只可以表示无符号型,不可以表示小数,所以在计算比较精确的数值时,就需要做一些处理,不过在altera在Arria 10 中增加了硬核浮点DSP模块,这样更加适合硬件 ...