zoukankan      html  css  js  c++  java
  • redis集群安装

    Redis 集群是一个提供在多个Redis间节点间共享数据的程序集.redis3.0以前,只支持主从同步的,如果主的挂了,写入就成问题了。3.0出来后就可以很好帮我们解决这个问题。
    目前redis 3.0还不稳定,如果要用在生产环境中,要慎重。

    一,redis服务器说明

    192.168.120.45 7000  
    192.168.120.45 7001  
    192.168.120.45 7002  
      
    192.168.120.46 7003  
    192.168.120.46 7004  

    192.168.120.46 7005

      
    要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。所以用二台机器,开6个redis进程,模拟6台机器。

     
    二,安装redis
     1.将压缩包复制到/usr/local/目录下
     2.解压缩并安装redis
       [/usr/local/] #tar -xvzf redis-3.0.5.tar.gz   
       [/usr/local/] #cd redis-3.0.5
       [/usr/local/redis-3.0.5]#make
       [/usr/local/redis-3.0.5]#make install
       [/usr/local/redis-3.0.5]#cd src
       [/usr/local/redis-3.0.5]#cp redis-trib.rb /usr/local/bin
     
    3.创建redis集群配置文件
        #mkdir /etc/redis
        #mkdi /var/log/redis
    (2,3需要在两台服务上执行)
     
    4.配置redis
       [/usr/local/redis-3.0.5]#vim redis.conf
    修改内容:
        port 7000
        pidfile /var/run/redis-7000.pid  
        dbfilename dump-7000.rdb  
        appendfilename "appendonly-7000.aof"  
        cluster-config-file nodes-7000.conf  
        cluster-enabledyes  
        cluster-node-timeout 5000  
        appendonly yes 
     
    5.copy配置文件,并修改端口
        # cp redis.conf /etc/redis/redis-7000.conf  
        # cp redis.conf /etc/redis/redis-7001.conf  
        # cp redis.conf /etc/redis/redis-7002.conf  
      
        # scp redis.conf 192.168.120.46:/etc/redis/redis-7003.conf  
        # scp redis.conf 192.168.120.46:/etc/redis/redis-7004.conf  
        # scp redis.conf 192.168.120.46:/etc/redis/redis-7005.conf  
       //将redis-7001.conf文件中的所有7000替换为7001
        # sed -i "s/7000/7001/g" /etc/redis/redis-7001.conf  
        # sed -i "s/7000/7002/g" /etc/redis/redis-7002.conf  
      
        # sed -i "s/7000/7003/g" /etc/redis/redis-7003.conf  
        # sed -i "s/7000/7004/g" /etc/redis/redis-7004.conf  
        # sed -i "s/7000/7005/g" /etc/redis/redis-7005.conf 
     
    三,启动redis并查看redis
        #./redis-server /etc/redis/redis-7000.conf > /var/log/redis/redis-7000.log 2>&1 &  
        # ./redis-server /etc/redis/redis-7001.conf > /var/log/redis/redis-7001.log 2>&1 &  
        # ./redis-server /etc/redis/redis-7002.conf > /var/log/redis/redis-7002.log 2>&1 &  
      
        # ./redis-server /etc/redis/redis-7003.conf > /var/log/redis/redis-7003.log 2>&1 &  
        # ./redis-server /etc/redis/redis-7004.conf > /var/log/redis/redis-7004.log 2>&1 &  
        # ./redis-server /etc/redis/redis-7005.conf > /var/log/redis/redis-7005.log 2>&1 &  
      
        # netstat -tpnl |grep redis 
    tcp        0      0 192.168.120.45:17000        0.0.0.0:*                   LISTEN      15658/./redis-serve 
    tcp        0      0 192.168.120.45:17001        0.0.0.0:*                   LISTEN      15652/./redis-serve 
    tcp        0      0 192.168.120.45:17002        0.0.0.0:*                   LISTEN      15644/./redis-serve 
    tcp        0      0 192.168.120.45:7000         0.0.0.0:*                   LISTEN      15658/./redis-serve 
    tcp        0      0 192.168.120.45:7001         0.0.0.0:*                   LISTEN      15652/./redis-serve 
    tcp        0      0 192.168.120.45:7002         0.0.0.0:*                   LISTEN      15644/./redis-serve 
    所有节点都启动成功,并不代表,他们就是集群了。
    四,创建集群并查看
        

    1,创建redis集群

    # ./redis-trib.rb create --replicas 1 192.168.120.45:7000 192.168.120.45:7001 192.168.120.45:7002 192.168.120.46:7003 192.168.120.46:7004 192.168.120.46:7005

    命令的意义如下:
    给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
    选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
    之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
    简单来说, 以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。

    2.查看redis集群状态

        #redis-trib.rb check 192.168.120.45:7000

    Connecting to node 192.168.120.45:7000: OK
    Connecting to node 192.168.120.46:7005: OK
    Connecting to node 192.168.120.46:7004: OK
    Connecting to node 192.168.120.46:7003: OK
    Connecting to node 192.168.120.45:7001: OK
    Connecting to node 192.168.120.45:7002: OK
    >>> Performing Cluster Check (using node 192.168.120.45:7000)
    M: f84ca7b52e70e179e82b56120db72b828a5a60a4 192.168.120.45:7000
       slots:5461-6917,6919-10922 (5461 slots) master
       1 additional replica(s)
    S: 87eb060b519c5ca21cad4229b6bab4fa685c134c 192.168.120.46:7005
       slots: (0 slots) slave
       replicates f84ca7b52e70e179e82b56120db72b828a5a60a4
    M: c9f204b2f1b82de04a0cac045164ee1d64ab8b54 192.168.120.46:7004
       slots:10923-16383 (5461 slots) master
       0 additional replica(s)
    M: c18ab6cf7fd53ccbb7a4c38a385df4db8e22531d 192.168.120.46:7003
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    S: 5e502340bea055417e76985c4cc6355a66263a5b 192.168.120.45:7001
       slots: (0 slots) slave
       replicates c18ab6cf7fd53ccbb7a4c38a385df4db8e22531d
    M: 13bbd4a90fef751a57247f92d44e3dc4db6b99ab 192.168.120.45:7002
       slots:6918 (1 slots) master
       0 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
     
    到这儿,redis集群就配置成功了
    五,测试redis集群
    # ./redis-cli -c -p 7001 -h 192.168.120.45   //在45登录  
    192.168.120.45:7001> set tank tank1    //设置测试值  
    -> Redirected to slot [4407] located at 192.168.120.45:7000  
    OK   //直接转向到45 7000端口,数据存到了45 7000,不过有点奇怪  
    192.168.120.45:7001> get tank   //可以取到值  
    "tank1"  
      
    [root@manage redis]# redis-cli -c -p 7005 -h 192.168.120.46  //46机器,7005端口  
    192.168.120.46:7005> get tank  
    -> Redirected to slot [4407] located at 192.168.120.46:7004 //直接转向46 7004端口  
    "tank1"  
      
    [root@manage redis]# ps aux |grep redis //查看进程  
    root      2838  0.0  0.0 105048  3344 pts/2    T    14:18   0:00 vim redis.conf
    root      2870  0.0  0.0 105048  3312 pts/2    T    14:25   0:00 vim /etc/redis/redis-7004.conf
    root      2977  0.0  0.0  95388  2644 ?        Ssl  14:58   0:01 ./redis-server 192.168.120.46:7003 [cluster]
    root      2983  0.0  0.0  95388  2572 ?        Ssl  14:58   0:01 ./redis-server 192.168.120.46:7004 [cluster]
    root      2987  0.0  0.0  95388  2628 ?        Ssl  14:58   0:01 ./redis-server 192.168.120.46:7005 [cluster]
    root      3289  0.0  0.0  63412   780 pts/2    R+   16:48   0:00 grep redis
      
    [root@manage redis]# kill -9 2983 //关闭46 7004端口,看数据会不会丢失  
      
    [root@slave2 redis]# redis-trib.rb check 192.168.120.45:7000  //查看集群情况,任何接口都行 
    Connecting to node 192.168.120.45:7000: OK
    Connecting to node 192.168.120.46:7005: OK
    Connecting to node 192.168.120.46:7003: OK
    Connecting to node 192.168.120.45:7001: OK
    Connecting to node 192.168.120.45:7002: OK
    >>> Performing Cluster Check (using node 192.168.120.45:7000)
    M: f84ca7b52e70e179e82b56120db72b828a5a60a4 192.168.120.45:7000
       slots:5461-6917,6919-10922 (5461 slots) master
       1 additional replica(s)
    S: 87eb060b519c5ca21cad4229b6bab4fa685c134c 192.168.120.46:7005
       slots: (0 slots) slave
       replicates f84ca7b52e70e179e82b56120db72b828a5a60a4
    M: c18ab6cf7fd53ccbb7a4c38a385df4db8e22531d 192.168.120.46:7003
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    S: 5e502340bea055417e76985c4cc6355a66263a5b 192.168.120.45:7001
       slots: (0 slots) slave
       replicates c18ab6cf7fd53ccbb7a4c38a385df4db8e22531d
    M: 13bbd4a90fef751a57247f92d44e3dc4db6b99ab 192.168.120.45:7002
       slots:6918 (1 slots) master
       0 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.//变成,三主二从了  
      
    [root@localhost src]#  ./redis-cli -c -p 7002 -h 192.168.120.45 //45登录 
    192.168.120.45:7002> get tank
    -> Redirected to slot [4407] located at 192.168.120.46:7003  //数据被转到了7003节点了  
    "tank1"   
    经测试,集群是可用的。
       
     
    安装常见问题:
      
    [root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.120.45:7000 192.168.120.45:7001 192.168.120.45:7002 192.168.120.46:7003 192.168.120.46:7004 192.168.120.46:7005
    /usr/bin/env: ruby: No such file or directory

    6.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境

    错误内容:/usr/bin/env: ruby: No such file or directory

    所以需要安装ruby的环境,这里推荐使用yum install ruby安装

    6.2然后再执行第6步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

    错误内容:

    ./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)

    from ./redis-trib.rb:24

    yum install rubygems

    [root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.120.45:7000 192.168.120.45:7001 192.168.120.45:7002 192.168.120.46:7003 192.168.120.46:7004 192.168.120.46:7005
    ./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
        from ./redis-trib.rb:24
    [root@localhost src]# yum install rubygems
    Loaded plugins: fastestmirror, rhnplugin, security
    This system is not registered with RHN.
    RHN support will be disabled.
    Loading mirror speeds from cached hostfile
    Setting up Install Process
    No package rubygems available.
    Nothing to do
     

    如果你直接用yum的话,一般是装不上的,得先做些准备,首先添加一个源

    ok 如果上面的rpm执行成功,就可以运行下面的yum命令了
    yum install ruby ruby-devel rubygems rpm-build
    为了以后不缺这少那 索性就都装上
    装好以后测试一下
    # ruby -v
    ruby 1.8.7 (2012-06-29 patchlevel 370) [i386-linux]
    ok 已经变成1.8.7 了
     gem install redis
  • 相关阅读:
    linux tar order
    Linux驱动学习步骤(转载)
    汇编指令(转载)
    拓扑排序
    python 三维坐标图
    python 矩阵
    spring 之 IOC 依赖注入详解
    spring 下载
    Struts数据验证
    拦截器配置
  • 原文地址:https://www.cnblogs.com/Ycc9/p/5286625.html
Copyright © 2011-2022 走看看