zoukankan      html  css  js  c++  java
  • redis4.0.13主从、哨兵、集群3种模式的 Server端搭建、启动、验证

     本文使用的是redis-4.0.13.tar.gz版本。

    两个centos7系统虚拟机:192.168.10.140、192.168.10.150

    redis各版本下载地址:http://download.redis.io/releases/

    单个redis下载、安装、启动、验证

    在192.168.10.140上依次执行以下命令:

    cd /home/soft     进入软件存放目录

    wget http://download.redis.io/releases/redis-4.0.13.tar.gz     下载redis

    tar -zxvf redis-4.0.13.tar.gz      解压缩redis

    cd redis-4.0.13        进入redis目录

    cd src                      进入src目录

    make  &   install                     redis初始化,并安装

    cd src 目录,然后启动:   ./redis-server   或者带上指定配置文件启动:./redis-server ../redis.conf     启动服务端,命令阻塞,不要关闭该窗口。

     cd /home/program/redis-4.0.13          另起一个命令窗口作为客户端连接到服务端

    cd src 目录,然后启动: ./redis-cli -h 127.0.0.1 -p 6379              连接到指定IP端口的redis服务端,如果连接本机的默认端口,可以直接:src/redis-cli 出现下图表示连接成功

    src/redis-cli -h 127.0.0.1 -p 6379 -a 密码

     

    127.0.0.1:6379>info                 执行info命令查看该服务端详情

     在192.168.10.150上把以上步骤再次执行一遍,这样两台机器都安装上了redis

    查看redis启动情况: ps -ef|grep redis

    停止redis :  src/redis-chi -h 127.0.0.1 -p 6379 shutdown

    主从模式

    通过在192.168.10.140、192.168.10.150两个客户端的info命令,我们可以了解到当前两个redis都是master节点。

    修改192.168.10.150的redis.conf配置:

    # bind 127.0.0.1 ::1
    bind 0.0.0.0        使不同IP也能连上此节点,否则会报错:Error condition on socket for SYNC: Connection refused
    
    daemonize no      如果改成yes,则表示redis服务后台运行,这里保持默认
    
    #protected-mode yes
    protected-mode no     关闭保护模式,使从节点能连接上此主节点
    
    pidfile /var/run/redis_6379.pid     指定你自己的pid数据库存储路径
    logfile /home/program/redis-4.0.13/logfile_6379.log   指定你自己的log日志存放路径

     192.168.10.140的redis.conf按照以上配置修改一遍,并加上另外一个配置:

    slaveof 192.168.10.150 6379      配置上master主节点的信息,配置自己为slave从节点

    连接到140上的客户端,执行命令:

    127.0.0.1:6379>info                            执行info命令查看当前节点已经变成从节点

      

    连接到150上的客户端,执行命令:

    127.0.0.1:6379>info                            执行info命令查看当前节点已经变成从节点

    把自己变成slave从节点的另一个方法是:

    127.0.0.1:6379>slaveof 192.168.10.150 6379        表示当前redis设置150的6379的redis为master主节点,并把当前节点作为slave从节点。

     验证环节:

    去150上设置一个key value,140从节点就能读到了。注意:默认情况下slave从节点是只读,如果有需要,则需要改主节点的redis.conf,把slave-read-only yes 改成no

    哨兵模式

    主从模式下,如果master挂掉了,slave是无法自己顶上去作为master使用的,这时就需要哨兵机制把slave变成master。

    mkdir redis-sentinel             在redis-4.0.13目录下新建redis-sentinel文件夹

    vi redis-sentinel.conf             新建哨兵配置文件,添加以下内容:

    #sentinel端口
    port 26379
    #工作路径,注意路径不要和主重复
    dir "/home/program/redis-4.0.13/redis-sentinel"
    # 守护进程模式
    daemonize yes
    #关闭保护模式
    protected-mode no
    # 指明日志文件名
    logfile "/home/program/redis-4.0.13/sentinel.log"
    #哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。
    sentinel myid c186cf19d1e2533f21b650cca31fccabaa266293         //这一行由启动成功的哨兵自己写入
    # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
    sentinel deny-scripts-reconfig yes
    #若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
    sentinel monitor mymaster 192.168.10.150 6379 2      //监控master节点所在的IP端口,并设置2个sentinel哨兵监控到master节点挂掉才能启动故障转移,把其中一台slave升级为master,如果旧master恢复正常,也加入slave。
    #设置master和slaves验证密码
    #sentinel auth-pass mymaster 123456
    #sentinel parallel-syncs mymaster 1      //指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步
    
    # Generated by CONFIG REWRITE 以下内容都是sentinel在启动之后会自己改的,默认都注释掉即可
    sentinel down-after-milliseconds mymaster 5000      //在master挂掉后多少毫秒后才算真的master挂掉
    sentinel failover-timeout mymaster 18000            //故障转移超时时间(毫秒)。如果Redis的master节点出现问题,Sentinel能够启动一个故障转移处理,该处理会将一个slave节点提升为master节点,其他的slave节点则会自动配置成新的master节点的slave节点,如果原来的master重新正常启动后,也会成为该新Master的slave节点。
    sentinel config-epoch mymaster 3                
    sentinel leader-epoch mymaster 3
    sentinel known-slave mymaster 192.168.10.140 6379       //已知的slave节点
    sentinel current-epoch 3

    cd /home/program/redis-4.0.13 

    src/redis-sentinel redis-sentinel/redis-sentinel.conf        启动三次就是启动了三个哨兵。查看哨兵启动进程:

     验证环节:

    把150 master kill掉,可以看到140的客户端info里,已经由slave变成了master,表示哨兵启用成功。

    启动成功之后, redis-sentinel.conf 配置里的 # Generated by CONFIG REWRITE 部分内容会被哨兵自动更新值。

    集群模式启动前提:ruby安装

     yum install rubygems

     gem install redis          验证启动集群条件

     

     ruby安装参考: https://www.cnblogs.com/PatrickLiu/p/8454579.html  (redis requires ruby version 2.2.2的解决方案)确保能执行成功:gem install redis

    集群模式启动前提:创建6个集群节点

    cd /home/program/

    mkdir redis-cluster       新建集群目录

    cd  redis-cluster

    mkdir 2000 3000 4000 5000 6000 7000       新建6个文件夹,以redis启动端口号命名。在一台机器里启动6个redis节点,模拟6个redis集群

    先尝试启动集群中的第一个节点:

    cp /home/program/redis-4.0.13/redis.conf 2000             把配置文件copy到2000文件夹目录下

    cd 2000

    vim redis.conf              修改内容如下:

    port 2000
    pidfile /home/program/redis-cluster/2000/pidfile_2000.pid
    logfile /home/program/redis-cluster/2000/logfile_2000.log
    cluster-enabled yes
    cluster-config-file /home/program/redis-cluster/bin/nodes-2000.conf         由redis集群自动生成,集群启动成功之后,可以命令查找之: find / -name nodes-2000.conf
    cluster-node-timeout 15000

     cd /home/program/redis-cluster

    mkdir bin

    [root@192 src]# cp /home/program/redis-4.0.13/dump.rdb /home/program/redis-cluster/bin/dump.rdb 

    [root@192 src]# cp redis-server /home/program/redis-cluster/bin/
    [root@192 src]# cp redis-cli /home/program/redis-cluster/bin/
    [root@192 src]# cp redis-trib.rb /home/program/redis-cluster/bin/

    集群模式

    前提条件:

    1、每个redis节点里的数据必须为空,就是不能有任何数据。如果有数据会报错:

     

    2、ruby2.2.2以上版本已经安装好。ruby安装参考: https://www.cnblogs.com/PatrickLiu/p/8454579.html  (redis requires ruby version 2.2.2的解决方案)确保能执行成功:gem install redis

    3、启动每一个redis节点:2000、3000、4000、5000、6000、7000   

    cd /home/program/redis-cluster/bin

    ./redis-server ../2000/redis.conf     依次类推

    启动集群:

    cd /home/program/redis-cluster/bin

    ./redis-trib.rb create --replicas 1 192.168.10.140:2000 192.168.10.140:3000 192.168.10.140:4000 192.168.10.140:5000 192.168.10.140:6000 192.168.10.140:7000 

    解释:./redis-trib.rb 是集群启动命令, --replicas是指定后面紧跟着的这个数字1,代表着每个master有几个slave,我这里是6个节点,三主三从,所以每一个master有一个slave,所以数字是1。 1后面的每个IP和端口都是集群里的节点。

    验证环节:

    集群设置值和取值验证:

    集群模式启动报错之一解决方案:

    [root@192 bin]# ./redis-trib.rb create --replicas 1 192.168.10.140:2000 192.168.10.140:3000 192.168.10.140:4000 192.168.10.140:5000 192.168.10.140:6000 192.168.10.140:7000 
    >>> Creating cluster
    [ERR] Node 192.168.10.140:2000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    [root@192 bin]# ./redis-cli -c -p 2000
    127.0.0.1:2000> keys *
    1) "gg"
    2) "abc"
    127.0.0.1:2000> del gg
    (error) CLUSTERDOWN The cluster is down

    简单粗暴的解决方案:

    ./redis-cli -h 127.0.0.1 -p 2000 shutdown 温柔的解决方案: 

    rm -rf /home/program/redis-cluster/bin/dump.rdb         然后删除dump文件

    删除找到的所有pid文件,然后连集群文件一起删掉:

    [root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-2000.conf
    [root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-3000.conf
    [root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-4000.conf
    [root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-5000.conf
    [root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-6000.conf
    [root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-7000.conf

  • 相关阅读:
    matplotlib 柱状图
    JavaScript 箭头函数
    JavaScript map reduce
    JavaScript sort函数
    JavaScript var、let、const
    javaScript 迭代器
    javaScript map和set
    批处理学习(-)之文件夹和文件的移动
    让 Lua 访问数据库
    lua 模块化推荐方法
  • 原文地址:https://www.cnblogs.com/zhuwenjoyce/p/10502945.html
Copyright © 2011-2022 走看看