• redis介绍 (8) window 下redis的集群(cluster命令)


    前言:

      前段时间我在centos上搭建过一次redis集群,那是借助ruby搭建,这次我介绍一种纯redis集群命令的方式去搭建【最后我会简单介绍ruby搭建】。

     redis集群搭建(三主三备):

      准备工作:

        第一步:下载redis 

          在这我用的是

        第二步:创建一个集群存放的目录 redis-cluster  .把下载好的redis  cp进去,然后修改配置文件。

          注意:windox版本的redis的配置文件  是  redis.windows-service.conf,下面我来进行改造一下,把每个实例文件夹下的redis.windows-service.conf   修改为 redis +端口.conf的形式。如图

               

          修改redis7771.conf文件:主要修改:

             

             

          修改好一个redis 后,再cp出来5份,分别叫redis 7772 | 7773 | 7774 | 7775 | 7776    如图:

            

        这些都修改好之后,我们的准备工作就算完成了。

      集群配置:

        第三步:启动7771 --7773 的三台redis作为集群的master节点。

          到指定redis文件夹下执行

            redis-server.exe redis7771.conf
            redis-server.exe redis7772.conf
            redis-server.exe redis7773.conf

          

        第四步:将redis实例添加到集群中: 【关于集群的命令后面我都会贴出来】

          启动7771的客户端:

            

          添加集群节点:主要是通过用cluster meet <host> <port>给集群添加节点,例如以下:  

                  

            cluster nodes出现上面的3行记录就表示meet成功,标识myself的是client正在连接的redis实例。 能够通过cluster forget清除集群中的某个实例。

        第五步:分配卡槽  solts  (ruby  启动集群时候就会均分我们的卡槽,但是用redis命令启动集群不会)

          修改nodes-7771  ----  3  .conf文件

          

        修改好配置文件,重启redis,看看卡槽是否生效。(这个我配置好之后没重启也生效了,为了保险起见,建议重启一下)

          

        到这,主节点基本上配置好了。

        注意:如今存在这样一个问题:假设某个master节点挂掉的话,那么这个集群就不可用了,所以我们如今为集群中的3个master实例各启一个slave实例做主备。

        第六步:为每个master节点配置一个slave节点,做主备,当主节点宕机时,备节点自动切换上来。

            现在我们准备的7774--7776那是实例派上用场了,下面启动三个redis。

            

          在7771 上把这三个点加到集群中。

            

         最后用cluster replicate <nodeid>将7774、7775、7776 分别挂到7771、7772、7773上:

            

      到这,三主三备就搭建好了,当主节点宕机时,从节点就会变成主节点对外服务。测试一下。关闭7772后  7775就应该变成主节点。如图:

          

    cluster 命令: 

    ## 集群(cluster)
    cluster info 打印集群的信息  
    cluster nodes 列出集群当前已知的全部节点(node)。以及这些节点的相关信息。  
    ## 节点(node)
    cluster meet <ip> <port> 将 ip 和 port 所指定的节点加入到集群其中。让它成为集群的一份子。  
    cluster forget <node_id> 从集群中移除 node_id 指定的节点。  
    cluster replicate <node_id> 将当前节点设置为 node_id 指定的节点的从节点。  
    cluster SAVECONFIG 将节点的配置文件保存到硬盘里面。  
    ## 槽(slot)  
    cluster ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。  
    cluster DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。  
    cluster FLUSHSLOTS 移除指派给当前节点的全部槽,让当前节点变成一个没有指派不论什么槽的节点。 
    cluster SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,假设槽已经指派给还有一个节点。那么先让还有一个节点删除该槽>,然后再进行指派。
    cluster SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
    cluster SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。 
    cluster SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。 
    ## 键(key)
    cluster KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
    cluster COUNTKEYSINSLOT <slot> 返回槽 slot 眼下包括的键值对数量。  
    cluster GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键

    redis集群升级:

       上面那些介绍的是redis集群的搭建,一步一步成功的,但是上面每次都要启动服务的命令是不是很不爽,为啥我不把它做成window服务,让他们随系统自启动呢。linux也可以做成自启动的哦。单节点的redis做成自启动可以参考 window下把redis发布成服务 

      下面我介绍:把启动命令做成服务:

        

    # 发布成服务(这些命令要到各redis文件夹下去执行。如果大家嫌麻烦,可以使用绝对路径,在命令行就都干了)
    redis-server.exe --service-install redis7771.conf --service-name redis7771
    redis-server.exe --service-install redis7772.conf --service-name redis7772
    redis-server.exe --service-install redis7773.conf --service-name redis7773
    redis-server.exe --service-install redis7774.conf --service-name redis7774
    redis-server.exe --service-install redis7775.conf --service-name redis7775
    redis-server.exe --service-install redis7776.conf --service-name redis7776

    #服务启动
    redis-server.exe --service-start --service-name redis7771
    redis-server.exe --service-start --service-name redis7772
    redis-server.exe --service-start --service-name redis7773
    redis-server.exe --service-start --service-name redis7774
    redis-server.exe --service-start --service-name redis7775
    redis-server.exe --service-start --service-name redis7776

    # 停止服务
    redis-server.exe --service-stop --service-name redis7771
    redis-server.exe --service-stop --service-name redis7772
    redis-server.exe --service-stop --service-name redis7773
    redis-server.exe --service-stop --service-name redis7774
    redis-server.exe --service-stop --service-name redis7775
    redis-server.exe --service-stop --service-name redis7776

    # 删除服务
    redis-server.exe --service-uninstall --service-name redis7771
    redis-server.exe --service-uninstall --service-name redis7772
    redis-server.exe --service-uninstall --service-name redis7773
    redis-server.exe --service-uninstall --service-name redis7774
    redis-server.exe --service-uninstall --service-name redis7775
    redis-server.exe --service-uninstall --service-name redis7776

       就这样,以后频繁的启动redis服务就可以在window服务中进行了。不用再去敲命令了


    ruby安装:

      

    2.下载并安装ruby

      2.1. 下载路径如下:

      http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.2.4-x64.exe

          下载后,双击安装即可,同样,为了操作方便,也是建议安装在盘符根目录下,如: C:Ruby22-x64 ,安装时这里选中后两个选项,

      意思是将ruby添加到系统的环境变量中,在cmd命令中能直接使用ruby的命令

        

       2.2.下载ruby环境下Redis的驱动,考虑到兼容性,这里下载的是3.2.2版本

      https://rubygems.org/gems/redis/versions/3.2.2

          注意:下载在页面右下角相关连接一项中

               

          安装该驱动,命令如下:

    gem install --local path_to_gem/filename.gem  

           实际操作如下:

        

          2.3.下载Redis官方提供的创建Redis集群的ruby脚本文件redis-trib.rb,路径如下:

        https://raw.githubusercontent.com/MSOpenTech/redis/3.0/src/redis-trib.rb

               打开该链接如果没有下载,而是打开一个页面,那么将该页面保存为redis-trib.rb

               建议保存到Redis的目录下。

                 

      注意:因为redis-trib.rb是ruby代码,必须用ruby来打开,若redis-trib.rb无法识别,需要手动选择该文件的打开方式:

                      

                 

                          


     

    我搭建的redis-cluster的文件夹,也分享给大家: 链接:https://pan.baidu.com/s/1fHYkiSW1xYh9eRYZBWuSaQ 密码:ni7z    这里面的文件只是到上述的准备工作,集群的配置都被我删除了。不会的可以跟着上述步骤再走一遍就会了

       

  • 相关阅读:
    如何把报表轻松嵌入应用程序?Telerik Reporting可以轻松搞定
    看DevExtreme如何用HTML/Markdown编辑器轻松设置多行工具栏
    先睹为快!界面控件DevExpress WPF这些功能即将发布
    行业领先的界面开发组件DevExpress 8月发布新版——v22.1.4
    界面组件DevExpress ASP.NET Core v22.1 增强数据导出功能
    看DevExpress丰富图表样式,如何为基金公司业务创新赋能
    djang中orm使用iterator()
    最简单的python判断是否是回文
    缺少库文件对应的包下载地址
    工厂模式
  • 原文地址:https://www.cnblogs.com/huhongy/p/9680882.html
Copyright © 2020-2023  润新知