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

  • 相关阅读:
    python开发函数进阶:内置函数
    学习笔记之机器学习(Machine Learning)
    学习笔记之Visual Studio Code (VSCode) & Clang
    学习笔记之Supervised Learning with scikit-learn | DataCamp
    学习笔记之1001 Inventions That Changed the World
    学习笔记之Machine Learning by Andrew Ng | Stanford University | Coursera
    学习笔记之Everything
    学习笔记之HTML
    学习笔记之Python全栈开发/人工智能公开课_腾讯课堂
    学习笔记之曾国藩家书
  • 原文地址:https://www.cnblogs.com/hanguoqing/p/10244715.html
Copyright © 2011-2022 走看看