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 liuqiang (设置集群节点间访问密码,跟上面一致)
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 liuqiang -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连接完成,后期会有源码分析。不足之处还望指出