Redis搭建高可用集群

redis-5.0.2伪集群搭建(高可用集群)

  集群中的哨兵模式的缺点,想必大家都知道,接下来我们开始搭建高可用集群

redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单

1.redis 下载安装

  下载地址:https://redis.io/download 

   或者直接:wget http://download.redis.io/releases/redis-5.0.2.tar.gz

   安装 gcc:有的伙伴可以忽略   yum install gcc

2.下载完成后 redis-5.0.2.tar.gz  放到/usr/local下

   tar -zxvf redis-5.0.2.tar.gz 

   cd redis-5.0.2/

   make && make install -j 4

3.redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个      redis节点,这里用三台机器部署6个redis实例,每台机器一主一从(分别为192.168.0.61,62,63)

   3.1 在61的机器上 /usr/local下创建文件夹 rediscluster  mkdir -p /usr/local/rediscluster

   3.2 cd  /usr/local/rediscluster 

   3.3 mkdir 8001 8004 

   3.4 cp  /usr/local/redis-5.0.2/redis.conf /redis-5.0.2/8001    cp  /usr/local/redis-5.0.2/redis.conf /redis-5.0.2/8004 

   3.5 修改配置文件:

         (1)daemonize yes

         (2)port 8001(分别对每个机器的端口号进行设置)

         (3)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)

        (4)cluster-enabled yes(启动集群模式)

        (5)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)

        (6)cluster-node-timeout 5000

          (7)  # bind 127.0.0.1(去掉bind绑定访问ip信息)

          (8)  protected-mode  no   (关闭保护模式)

         (9)appendonly yes

   如果要设置密码需要增加如下配置:

     (10)requirepass liuqiang     (设置redis访问密码)

    (11)masterauth zhuge      (设置集群节点间访问密码,跟上面一致)

 

4.将配置文件复制到61 62.63

   4.1 将61的8001中的配置文件复制到 8004中 批量修改

   4.3  vim redis.conf

   4.4  :%s/8001/8004/g         :%s/源字符串/目的字符串/g  g代表的是全部

 

5.将另外两台机器同时复制配置文件 

  62机器: 创建文件夹 8002 8005

  63机器:创建文件夹  8003 8006

 

 6.分别启动6个redis实列,检查是否成功启动

     6.1:  61的机器   /usr/local/redis-5.0.2/src/redis-server /usr/local/redis-cluster/8001/redis.conf

                                 /usr/local/redis-5.0.2/src/redis-server /usr/local/redis-cluster/8004/redis.conf

     6.2 ps -ef|grep redis  

      6.3 同样的方法启动  62.63  (后期我会写个redis批量启动脚本,然后上传)

      

6.用redis-cli 创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现) 

  6.1 查看创建集群方式 

          

   6.2  /usr/local/redis-5.0.2/src/redis-cli -a liuqiang --cluster create --cluster-replicas 1 192.168.0.61:8001 192.168.0.62:8002      192.168.0.63:8003 192.168.0.61:8004 192.168.0.62:8005 192.168.0.63:8006

     

    以上是提示分配的节点, 一共分成了16384个切片,每一条机器代表的分片插槽。

   同意以上的分配   yes

  

  

7.连接任意一台客户端即可

 7.1  ./redis-cli -c -h -p (-a访问服务端密码,-c表示集群模式,指定ip地址和端口号)

 7.2  验证集群  cluster info(查看集群信息)

7.3 cluster nodes(查看节点列表)

 由节点可得出,主从并不在同一台起机器上,61的主节点8001,从节点在63的8006端口上,这样保证搞高可用。

7.4 验证数据

 

7.5 关闭集群则需要逐个进行关闭,使用命令: /usr/local/redis/bin/redis-cli -a zhuge -c -h 192.168.0.60 -p 800* shutdown

至此,集群搭建完成

 

8.  Java操作redis集群

  8.1  maven引入,借助redis的java客户端jedis可以操作以上集群

<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>
</dependencies>

8.2  java编码

package com.fashion.redis;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

/**
* ......................................
* .没有才怎么怀才不遇,没有志怎么壮志难酬 .
* . ....................................
*
*@Author: lq
*@Date:  2018/12/8 23:09
*@Description: 
*/
public class RedisCluster {

    public static void main(String[] args) throws IOException {
        Set<HostAndPort> jedisClusterNode = new HashSet<>();
        jedisClusterNode.add(new HostAndPort("192.168.0.61",8001));
        jedisClusterNode.add(new HostAndPort("192.168.0.61",8004));
        jedisClusterNode.add(new HostAndPort("192.168.0.62",8002));
        jedisClusterNode.add(new HostAndPort("192.168.0.62",8005));
        jedisClusterNode.add(new HostAndPort("192.168.0.63",8003));
        jedisClusterNode.add(new HostAndPort("192.168.0.63",8006));


        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(100);
        poolConfig.setMaxIdle(10);
        poolConfig.setTestOnBorrow(true);

        JedisCluster jedisCluster = new JedisCluster(jedisClusterNode,6000, 5000,10,"liuqiang",poolConfig);

        System.out.println(jedisCluster.set("student","liuqinlin"));
        System.out.println(jedisCluster.set("age","18"));
        System.out.println(jedisCluster.get("student"));
        System.out.println(jedisCluster.get("age"));
        System.out.println(jedisCluster.get("name"));


        jedisCluster.close();
    }
}

8.3   

至此 java redis连接完成,后期会有源码分析。不足之处还望指出

猜你喜欢

转载自blog.csdn.net/qq_36260963/article/details/84919796