zoukankan      html  css  js  c++  java
  • Redis集群搭建-韩国庆

    认真一步一步搭建下来,就可以成功....

    Redis-cluster集群架构讲解

    redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之前我们是搭建不了集群的。

    如下图,使我们redis集群搭建图,那么这里redis集群中没有一个准确的入口,也就是说没有一个指认的可连接的redis服务,因为任何一个节点都可以作为入口连接进去。那么每个redis服务之间都可以进行通讯的,来检查对方的状态。 
    image_1cltagcv5gofi311u4e1uqq9rr9.png-197.7kB

    redis没有准确的指认入口,任意一个redis服务都可以作为入口进行连接,那么我们考虑一个问题:我们需要知道每一个redis服务的工作状态,比如如果某一个redis服务突然停止,我们如何知道呢?

     

    投票容错

    image_1cltavoe3et014cm18mr11717sfm.png-153.2kB 
    如上图,每一个redis服务之间是否可以通讯及采用ping,pong的机制进行互相打招呼。当ping一个服务时,该服务相应pong,则代码服务通讯,反之不可以通讯。 
    投票容错:只要有一半的redis服务认为当前某一个redis服务有问题,则判定该服务有问题存在。 
    如:黄色redis服务ping下红色redis服务,发现红色redis服务没有给它响应,则黄色redis就告诉其他redis服务,你们也连接下红色redis服务,如果其它redis服务超过一半连接不上红色redis服务,则红色redis有问题存在。

     

    redis集群故障分解

    同学们注意,上面讲述如果其中有一台redis服务有问题,我们认为这台redis服务有问题存在。那么对于整个redis集群角度来看,有两种情况存在: 
    1.如果集群中redis服务存在故障,切已做了主从复制,那么访问的时候会访问redis从服务,集群正常运行。 
    2.redis集群中没有做主从备份,如果其中有一台redis服务故障挂掉,那么很遗憾,整个集群则都不能使用。

    为什么有redis服务挂掉,整个服务就不能使用呢? 
    image_1cltbnneu8jn16n21a85a621fer2m.png-116.7kB 
    通过上图我们了解到,redis-cluster中在一个名此叫,这个槽起到什么做作用呢? 
    :在集群中的作用是为每一个redis节点合理的分配资源,达到负载均衡的作用。redis集群中物理节点是从0~16383,则一共16384个槽,除以几点的个数就是每个节点所承载槽的个数。 
    根据什么来把数据放在哪个槽里呢?如下则是原理 
    image_1cltchuv73051hgs4e4s5p2j1m.png-139.6kB

    上述我们了解槽的概念,更进一步的看下槽在每个节点的分布图 
    image_1cltbrairfng1kkhu0b5om43r9.png-81kB

    问题:最多分布几个redis服务呢?最多也就是16384个,每一个槽对应一个服务。

     

    搭建集群

    image_1cm6vq6ho187vc2u1a5eok010b89.png-33.6kB

    3个节点是因为redis要保证一半以上才能决策哪一台redis有问题,容错。 
    那么为了保证每一台节点的稳定性,我们还要给每一个节点备份一台节点。所以这里要有6个节点。

    我们运行6台服务器,基本上老师电脑挂掉,每一个更好的主机。所以老师在这里演示使用redis的实例,每一个实例其实就是一台redis服务。这种搭建比分布在6台虚拟机上更难,因为还要考虑每个redis服务端口号的问题。

    我们在这里6端口号方便好记所以设置的区间是 7001-7006

     

    搭建redis服务

    如果现有的虚拟机上正在运行着redis服务,需要停止到。
    停止redis服务命令 
    

    image_1cm71demd12cte671tatcg2j2s23.png-17.5kB 
    1.redis的实例 
    redis实例在老师电脑上/usr/local/bin下,这里是redis服务的实例。 
    image_1cm715fhibkp5b68l6j9ng9a9.png-8.3kB

    2.在local目录下创建一个文件

    image_1cm718n85n2d1tjhaj01e8c79u1m.png-3.7kB

    3.把local/bin 拷贝纸 redis-cluster目录下,再命名redis01 
    cp -r bin redis-cluster/redis01

    4.切换至redis-cluster/redis01目录下 
    一个干净的redis服务时没有dump.rdb文件的,这个是redis数据的快照 
    rm -r dump.rdb

    5.编辑redis01下的redis.conf文件 
    修改端口号

    搜狗截图20180831120101.png-2.1kB

    6.redis如果要搭建集群,需要开启一个集群设置。 
    image_1cm73ls3v16jg1p7bdd1s2d18gk1k.png-2.9kB

    修改bind的ip地址 
    搜狗截图20180831164846.png-3.5kB 
    每个redis节点都要修改当前主机ip

    7.拷贝此实例 
    image_1cm78h2ags2ungrdni1of0nat21.png-3.8kB 
    拷贝redis01---redis06,拷贝5次

    8.拷贝如下所示 
    image_1cm78jor81pf1u55fad1abtm812e.png-14.1kB

    9.修改端口号 
    集群设置我们复制的时候都更改了,但是端口号我们需要修改独自的。 
    所以去每一个redisX里的redis.conf下修改即可

    10.启动redis 
    这里我们可以写一个文件,里面写着每一个redis服务启动的命令 
    image_1cm794vgcccv1n6njm13rl1qb02r.png-3.5kB 
    如上创建一个文件,那么该文件是保存在了/local/redis-cluster/这个目录下 
    image_1cm79a0bemo0vs5ghfra7s5n38.png-10kB

    保存退出编辑 
    image_1cm79bhvvigtcpa133f1hj1gkd45.png-13.6kB

    11.文件权限 
    此时该文件startRedis.sh文件还不能执行,因为权限不够。 
    image_1cm79eficn2817t2grd1sm09rq4i.png-12.7kB

    添加可执行权限   chmod +x startRedis.sh
    

    查看如下 
    image_1cm79h8e0f1a17ggmrdgii1335f.png-13kB

    12.进入到/usr/local/redis-cluster下启动脚本文件

    ./startRedis.sh
    

    image_1cm79q6ce1l67c9v17crrkj9nk5s.png-50.4kB
    如上启动成功。

    并且以cluster(集群模式)模式进行启动 
    image_1cm7a29jt1r431k901n6ggam1ktj69.png-12.2kB

    确认是否有端口号7001--7006服务开启,如下命令

    ps aux|grep redis
    
     

    安装ruby

    image_1cm7dl8hs10h21e5h1peq1m78aaq76.png-32.7kB 
    redis-cluster安装前需要安装ruby环境,搭建集群需要使用到官方提供的ruby脚本。

    安装ruby的环境需要依赖于环境,首先安装ruby环境

     
    1. yum -y install ruby
    2. yum -y install rubygems

    需要安装ruby脚本环境 
    老师提供了ruby脚本包,在资料中-->redis--->redis-3.0.0.gem包

    1.安装redis-3.0.0.gem

     
    1. gem install redis-3.0.0.gem

    image_1cm7e13eb16g21qckhj41lpq1c5n7j.png-6.5kB

    2.进入到/usr/local/redis-4.0.5/src解压文件下 
    可以找一个redis-trib.rb,这个是脚本文件。后缀.rb就是ruby的缩写

    3.拷贝一份至/usr/local/redis-cluster下 
    image_1cm7esdaltvgq2spnklvs1kkqp.png-3.8kB

    4.查看 
    image_1cm7etpd81aq58h1d667ad1lmh1m.png-16.9kB

    5.运行脚本 
    ruby包装好了,环境也装好了,那么这个脚本就可以运行了。使用ruby来搭建redis集群 
    启动命令如下

     
    1. ./redis-trib.rb create --replicas 1 123.14.0.223:7001 123.14.0.223:7002 123.14.0.223:7003 123.14.0.223:7004 123.14.0.223:7005 123.14.0.223:7006

    replicas: 1 表示每个redis服务只有1台备份机。

    image_1cm7i9dg75l11re8a4n1v2c10i02g.png-47kB

    image_1cm7iiauiv381ti11vkkpe51nlf7c.png-46.5kB

     

    连接集群

    redis给我提供了客户端,那么我们如何连接redis服务呢?redis服务集群特点是每一个节点都可以作为入口,备份节点也可以作为主机。

     
    1. redis01/redis-cli -h "123.14.0.223" -p 7001 -c

    操作数据存入对应的槽 
    image_1cm7krj8it0v9317jn1gsej8a1d.png-17.2kB

    集群的几个简单命令 
    cluster info 查看集群状态 
    image_1cm7l41bb136l1qnesrgum11qot4q.png-21.7kB

    cluster nodes 查看该集群节点数 
    image_1cm7lagb81qo3k1t1bqbc5rgkj2p.png-28.9kB

     

    客户端连接集群(单机版和集群版)

     

    单机版

    redis单机版.png-136kB

     

    集群版

    Redis集群客户端.png-248.5kB 
    redis集群.png-184.4kB 
    reids获取json数据.png-99.9kB 
    添加缓存.png-166.3kB

  • 相关阅读:
    Android开发 ViewConfiguration View的配置信息类
    Android 开发 倒计时功能 转载
    Android 开发 关于7.0 FileUriExposedException异常 详解
    Android 开发 实现文本搜索功能
    Android 开发 Activity里获取View的宽度和高度 转载
    Android 开发 存储目录的详解
    Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView
    Android 开发 将window变暗
    Android 开发 DisplayMetrics获取Android设备的屏幕高宽与其他信息
    Android 开发 DP、PX、SP转换详解
  • 原文地址:https://www.cnblogs.com/hanguoqing/p/10244715.html
Copyright © 2011-2022 走看看