搭建 Redis 缓存高可用集群 (序列五)

1、Redis集群方案比较

(1)哨兵模式

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

(2)高可用集群模式

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

2、Redis高可用集群搭建

(1)redis安装

下载地址:

安装步骤:

#安装gcc

yum 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();
 }
}

猜你喜欢

转载自www.cnblogs.com/xiaozengzeng/p/12641262.html