zoukankan      html  css  js  c++  java
  • Redis 安装&搭建 缓存高可用集群安装 (序列五)

    1、Redis集群方案比较

    (1)哨兵模式

    在redis3.0以前的版本要实现集群一般是借助哨兵sentinal工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况

    (2)高可用集群模式

    redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinal监控哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展很多个,根据官方文档提供目前可以扩展到1000节点。redis集群的性能和高可用性均优于之前版本的哨兵模式,并且集群配置非常简单,但是也存在瞬断,只能说高可用大大提高了并发量,是相对的,不是绝对的。

    2、Redis高可用集群搭建

    (1)redis安装

    下载地址:

    安装步骤:

    #安装gcc

    centOS的安装方式: yum install gcc

    ubuntu 的安装方式:apt-get install gcc

    #把下载好的redis-3.0.0-rc2.tag.gz放在/user/local文件夹下,并解压

    tar -zxvf redis-3.0.0-rc2.tag.gz

    #进入到解压好的 redis-3.0.0目录下,进行编译

    make

    #进入到redis-3.0.0/src目录下进行安装,安装完成验证src目录下是否已经生成了redis-server和redis-cil

    make install

    #建立两个文件夹存放redis命令和配置文件

    mkdir -p /user/local/redis/etc

    mkdir -p /user/local/redis/bin

    #把redis-3.0.0下的redis.conf复制到/user/local/redis/etc下

    cp redis.conf /user/local/redis/etc

    #移动redis-3.0.0/src里的几个文件到/user/local/redis/bin下

    mv mkreleasehdr.sh reids-benchmark redis-check-aof redis-check-dump redis-cil redis-server /user/local/redis/bin

    #启动并指定配置文件

    /user/local/redis/bin/redis-server /user/local/redis/etc/redis-conf(注意要使用后台启动,修改redis-conf里的daemonize改为yes)

    #验证启动是否成功

    ps -ef|grep redis

    #查看是否有redis服务或者查看端口

    netstat -tunpl | grep 6379

    #进入redis客户端

    /user/local/redis/bin/redis-cil

    #退出客户端

    quit

    #退出redis服务

    pkill redis-server

    kill 进程号

    /user/local/redis/bin/redis-cil shutdown

    (2)redis集群搭建

    redis集群需要至少三个master节点(因为要进行选举),我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,由于节点数较多,所以用一台服务器创建6个redis实例,并将这6个redis实例配置为集群模式,所以这里搭建的是伪集群模式,当然真正的分布式集群的配置方法几乎一样,搭建伪集群的步骤如下:

    第一步:在/user/local下创建文件夹redis-cluster,然后在其下面分别建6个文件夹如下:

    1. mkdir -p /user/local/redis-cluster
    2. mkdir 8001、mkdir 8002、mkdir 8003、mkdir 8004、mkdir 8005、mkdir 8006

    第二步:把之前的erdis.conf配置文件copy到8001,修改内容如下:

    1. daemonize yes
    2. port 8001(分别对每个机器的端口号进行设置)
    3. bind 192.168.0.60(必须要绑定你当前机器的ip,这里方便redis集群定位到机器,不绑定可能会出现循环查找集群节点机器的情况)
    4. dir /user/local/redis-cluster/8001(指定数据文件存储位置,必须要指定不同的目录位置,不然会丢失数据)
    5. cluster-enabled yes(启动集群模式)
    6. cluster-config-file nodes-8001.conf(这里800x最好和port对应上)
    7. cluster-node-timeout 5000(超时时间设置)
    8. appendonly yes

    第三步:把修改后的配置文件分别copy到各个文件夹下,注意每个文件夹要修改第2、4、6项的端口号

    1. 可以批量替换: :%s/源字符串/目的字符串/g

    第四步:由于redis集群需要使用ruby命令,所以我们安装ruby

    1. yum install ruby
    2. yum install rubygems
    3. gem install redis --version3.0.0(安装redis和ruby的接口)

    第五步:分别启动6个redis实例,然后检查是否启动成功

    1. /user/local/redis/bin/redis-server /user/local/redis-cluster/800*/redis-conf
    2. ps -ef | grep redis 查看是否启动成功

    第六步:在redis3的安装目录下执行redis-trib.rb命令创建整个reids集群

    1. cd/user/local/redis3/src
    2. ./redis-trib.rb create --replicas 1 192.168.0.60:8001 192.168.0.60:8002 192.168.0.60:8003 192.168.0.60:8004 192.168.0.60:8005 192.168.0.60:8006(其中‘1’指的是:master节点/slave
    3. 节点的比值)

    第七步:验证集群

    1. 连接任意一个客户端即可:./redis-cli -c -h -p(-c表示集群模式,-h指定ip地址和-p端口号)
    2. 如:/user/local/redis/bin/redis-cli -c -h 192.168.0.60 -p 800*
    3. 进行验证:cluster info(查看集群信息)、cluster nodes(查看节点列表)
    4. 进行数据操作验证
    5. 关闭集群,则需要逐个进行关闭,使用命令:
    6. 如:/user/local/redis/bin/redis-cli -c -h 192.168.0.60 -p 800* shutdown

    (3)。验证代码

    public class RedisCluster {
        public static void main(String[] args) throws IOException{
     Set<HostAndPort> jedisClusterNode = new HasSet<HostAndPort>();
     jedisClusterNode.add(new HostAndPort("192.168.0.60",8001));
     jedisClusterNode.add(new HostAndPort("192.168.0.60",8002));
     jedisClusterNode.add(new HostAndPort("192.168.0.60",8003));
     jedisClusterNode.add(new HostAndPort("192.168.0.60",8004));
     jedisClusterNode.add(new HostAndPort("192.168.0.60",8005));
     jedisClusterNode.add(new HostAndPort("192.168.0.60",8006));
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(100);
            config.setMaxIdle(10);
            config.setTestOnBorrow(true);
            JedisCluster jedisCluster = new JedisCluster(jedisClusterNode, 6000, 10, config);
            System.out.println(jedisCluster.set("name","bob"));
            System.out.println(jedisCluster.set("age","18"));
            System.out.println(jedisCluster.get("name"));
            System.out.println(jedisCluster.get("age"));
            jedisCluster.close();
     }
    }
  • 相关阅读:
    HDU 5937 Equation
    HDU 5936 Difference
    hdu 4348 To the moon
    SPOJ QTREE Query on a tree
    HDU 3966 Aragorn's Story
    Codeforces 733F Drivers Dissatisfaction
    道良心题
    dp小总结
    数据结构
    数学相关(偏数学向题目的集中地)
  • 原文地址:https://www.cnblogs.com/xiaozengzeng/p/12641262.html
Copyright © 2011-2022 走看看