Redis三主三从集群环境搭建以及java操作连接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_28196435/article/details/86312064

Redis是非关系型数据库的一种,一般用于做高速缓存,从而降低数据库的读写压力。

比如在电商首页中,图片轮播,信息展示,都是基于redis进行读取,然后在有效期过后再从数据库读取最新数据。

三主三从结构指三个主Master的Redis服务和从属于Master的Slave的Redis服务,主服务主要负责数据写入操作,从服务负责数据读取操作,一共需要6台服务器。结构图如下

集群说明:
Redis3.0 开始支持集群,在每个 Master 上存放着各不相同的数据,即分布式存储的思想。 集群中的每个节点都需要知道集群中自己之外的其它节点。

Redis 集群主(Master(M1,M2,M3))从(Slave(S1,S2,S3))复制、读写分离 。Master 只负责写和同步数据给 Slave,Slave 负责被读的任务,通过 Slave 的扩容提高读的速度。

所有的 redis 节点彼此互联(PING-PONG 机制), 节点的 fail 是通过集群中超过半数的节点检测失效时才生效。

客户端不需要连接集群所有的节点,连接集群中任何一个可用的节点即可,redis-cluster 把 所有的物理节点映射到[0~16383]slot 上,cluster 负责维护 node<->slot<->value。

整个 Redis 集群将集群存储空间分为 16384 个 Slot(槽),将 16384 个 Slot 分散到集群中的每个服务器节点。

在集群存储数据的时候,首先进行 CRC16(key) % 16384=0.....16383 计算 , 然后根据运算结 果将 key 对应的执行保存到对应的 Slot槽中,比如有三个Redis服务器,则0...16383会分布在三个Redis服务器节点中,这是一种分布式存储的体现。官网也介绍了

  • Node A contains hash slots from 0 to 5500.
  • Node B contains hash slots from 5501 to 11000.
  • Node C contains hash slots from 11001 to 16383.

伪集群安装步骤:

一 安装单机版redis

1.下载redis安装包redis-5.0.3并上传到linux服务器

2.安装C语言编译包

yum install gcc-c++

3.解压redis安装包

tar -zxvf redis-5.0.3.tar.gz

4.cd到redis目录并编译redis

make

5.安装redis到指定的目录

cd /usr/local
mkdir redis
make PREFIX=/usr/local/redis install 

6.后台启动redis服务,需要先拷贝conf配置文件

cp redis.conf /usr/local/redis/bin/

cd /usr/local/redis/bin/

vim redis.conf

daemonize no 改为 yes,然后

./redis-server redis.conf

7.查看redis进程

ps -ef|grep -i redis

8.开启6379端口

二、安装集群

1.在/opt下新建redis文件夹,里面创建conf,logs和data三个文件夹

2.拷贝刚才的conf文件到conf文件夹中,重新命名为redis-common.conf, 其中注释掉port,logfile,pidfile,dbfilename,

   配置集群中的数据目录,dir  /opt/redis/data,注释掉appendfilename,取消注释cluster-enabled yes,cluster-require-full- coverage no , 注释掉bind 127.0.0.1,protected-mode no

3.复制conf文件配置文件到/user/local/redis/bin中,重命名为redis-6380.conf,然后include /opt/redis/conf/redis-common.conf,注释掉daemonize,port改为6380,pidfile /var/run/redis-6380.pid,logfile "/opt/redis/logs/redis-6380.log",dbfilename dump-6380.rdb,appendfilename "appendonly-6380.aof",cluster-config-file nodes-6380.conf,注释掉bind 127.0.0.1,protected-mode

4.重复步骤3,把剩余5个配置文件创建出来,这样/user/local/redis/bin就有六个redis单节点配置文件,而common配置还留在/opt/redis/conf中

5.启动集群

./redis-server redis-6380.conf 
./redis-server redis-6381.conf 
./redis-server redis-6382.conf
./redis-server redis-6383.conf 
./redis-server redis-6384.conf
./redis-server redis-6385.conf 

6.进入到安装目录的src下,其中127.0.0.1为伪集群的ip地址,这里如果要允许外网访问,可以修改为你的redis服务器ip

./redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385

这里在redis的3.x和4.x版本是没有问题的,但是5.x版本中需要使用redis-cli运行

./redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 \
127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 \
--cluster-replicas 1

  7.测试集群,进入/usr/local/redis/bin下,运行命令测试

./redis-cli -c -p 6380

然后进行set测试,会发现值会根据hash运算存到不同的redis中

三、Java连接操作

在meven中加入依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.0.1</version>
</dependency>

然后客户端输入代码进行测试即可

Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
//Jedis Cluster will attempt to discover cluster nodes automatically
jedisClusterNodes.add(new HostAndPort("ip地址", 6380));
jedisClusterNodes.add(new HostAndPort("ip地址", 6381));
jedisClusterNodes.add(new HostAndPort("ip地址", 6382));
jedisClusterNodes.add(new HostAndPort("ip地址", 6383));
jedisClusterNodes.add(new HostAndPort("ip地址", 6384));
jedisClusterNodes.add(new HostAndPort("ip地址", 6385));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jc.set("foo", "bar");
String value = jc.get("foo");

四、一些坑

注意配置文件中如果不注释bind和protected-mode的话,则默认只能在本机连接集群,如果需要通过外网访问集群,可以注释掉bind以及protected-mode修改为no,同时除了开启6380~6385的端口,还需要开放集群通信接口16380~16385端口。这样创建集群才不会出错。

猜你喜欢

转载自blog.csdn.net/baidu_28196435/article/details/86312064