redis集群搭建怎么分配内存的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis集群搭建怎么分配内存的相关的知识,希望对你有一定的参考价值。

本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本,Redis2.8及以上版本。
一、安装redis
安装方法,可以参考:http://blog.csdn.net/codetomylaw/article/details/40395905
目的:搭建一主二从环境,192.168.18.19(主) 192.168.18.178 (从) 192.168.18.179(从)

部署redis完毕,所有端口都使用的默认端口6379
配置文件目录:/etc/redis
备份目录: /opt/soft/redis/backup
日志目录: /opt/soft/redis/log

192.168.18.178/179从服务器需要配置slaveof 192.168.18.19 6379

配置slave-priority,默认是100
178 配置为50,179配置为100
当Master挂掉的时候Sentinel会优先选择slave-priority值较小的作为新的Master。

验证:当往Master写入数据的时候,slave可以同步数据,说明环境搭建完成。

二、配置sentinel
参考:http://blog.csdn.net/codetomylaw/article/details/41011543

配置成守护进程
daemonize yes
配置日志输出目录
logfile "/opt/soft/redis/log/sentinel.log”

配置monitor的Master redis
sentinel monitor mymaster 192.168.18.19 6379 2

部署了3个sentinel进程,分别在192.168.18.19、 192.168.18.178、192.168.18.179上,配置文件sentinel.conf 相同。

你会发现:sentinel.conf 配置文件是动态的,文件多了如下内容
sentinel known-slave mymaster 192.168.18.179 6379
sentinel known-sentinel mymaster 192.168.18.179 26379 9a00533bb48c8c860b0f373d9594b5126d1a1db9
sentinel known-sentinel mymaster 192.168.18.19 26379 738264461625b563f367683b234d9b4c1d971972
sentinel current-epoch 0

三、程序验证
[html] view plain copy
Set<String> sentinels = new HashSet<String>();
sentinels.add(new HostAndPort("192.168.18.19", 26379).toString());
sentinels.add(new HostAndPort("192.168.18.178", 26379).toString());
sentinels.add(new HostAndPort("192.168.18.179", 26379).toString());
JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels);
System.out.println("Current master: " + sentinelPool.getCurrentHostMaster().toString());

Jedis master = sentinelPool.getResource();
master.set("username","jack");
sentinelPool.returnResource(master);

Jedis master2 = sentinelPool.getResource();
String value = master2.get("username");
System.out.println("username: " + value);

能正常从redis获取信息说明配置完成。

四、内存升级方案
1)停掉一个从,升级内存,挂回
2)停掉另一个从,升级内存,挂回
3)停掉主,从两个从中选出一个主,升级内存,挂回 (以前的主变成了从)

五、多主多从集群搭建
待完善
参考技术A 将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。本回答被提问者采纳

Redis集群搭建

目录

1 集群

2 集群架构图

3 集群细节

4 集群搭建

5.创建集群

1.创建集群

2.输入yes,表示按照当前这种分配进行创建

3.集群创建成功出现如下提示

6.查看集群状态

1.连接集群 加上-c

3.添加主节点

4.添加从节点

5.删除节点

6.集群在线分片

7.spring配置文件 连接


1 集群

Redis在3.0后开始支持Cluster(模式)模式,目前redis的集群支持节点的自动发现(往redis集群动态添加一个节点,可以融入这个集群),支持slave-master选举(master宕机后,多个slave中选取一个master)和容错(当master宕机后,选一个新的master,这叫容错。不会重新分配槽,是从节点接管原先master的槽),支持在线分片|reshard(sharding shard 重新分配hash槽: 当新增一个节点时。由程序员决定怎么分配,会把槽和value一起移动到新增的物理节点。)等特性。

2 集群架构图

蓝色:redis节点

3 集群细节

- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.  心跳
- 节点的fail是通过集群中超过半数的节点检测失效时才生效. 
- 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可       客户端可以连接集群中任意的节点
- redis-cluster把所有的物理节点(master节点|提供服务的节点)映射到[0-16383]slot上,cluster(集群)负责维护node(节点)<->slot(hash槽)<->value

4 集群搭建

判断一个是集群中的节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点就是挂掉了,所以搭建redis集群时建议节点数最好为奇数,搭建集群至少需要三个主节点,三个从节点,至少需要6个节点

# 1.准备环境安装ruby以及redis集群依赖    (redis 几点几后就不需要了)
 yum install -y ruby rubygems
 gem install redis-xxx.gem  (网盘 : Redis资料\\资料\\day2\\redisgems)
 rm -rf redis-3.2.1.gem
# 2.在一台机器创建7个目录
mkdir 7000,7001,7002,7003,7004,7005,7006
# 3.每个目录复制一份配置文件
[root@localhost ~]# cp redis-4.0.10/redis.conf 7000/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7001/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7002/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7003/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7004/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7005/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7006/
# 4.修改不同目录配置文件
 bind  0.0.0.0                   		 //开启远程连接
 port 	7000 .....                		 //修改端口
 daemonize yes                       //启动redis,不会占用一个窗口
 dbfilename dump-7000.rdb             //快照文件名
 appendonly  yes   		               //开启AOF持久化
 appendfilename "appendonly-7000.aof" //AOF的日志文件
 cluster-enabled  yes 	        			 //开启集群模式
 cluster-config-file  nodes-7000.conf //集群节点配置文件
 cluster-node-timeout  5000      	   //集群节点超时时间
# 5.指定不同目录配置文件启动七个节点
- [root@localhost bin]# ./redis-server  /root/7000/redis.conf
- [root@localhost bin]# ./redis-server  /root/7001/redis.conf
- [root@localhost bin]# ./redis-server  /root/7002/redis.conf
- [root@localhost bin]# ./redis-server  /root/7003/redis.conf
- [root@localhost bin]# ./redis-server  /root/7004/redis.conf
- [root@localhost bin]# ./redis-server  /root/7005/redis.conf
- [root@localhost bin]# ./redis-server  /root/7006/redis.conf

5.创建集群

1.创建集群

 ./redis-cli --cluster create 192.168.231.134:7000 192.168.231.134:7001 192.168.231.134:7002 192.168.231.134:7003 192.168.231.134:7004 192.168.231.134:7005 --cluster-replicas 1

./redis-cli --cluster create 192.168.231.134:7000 192.168.231.134:7001 192.168.231.134:7002 192.168.231.134:7003 192.168.231.134:7004 192.168.231.134:7005 --cluster-replicas 1(每个集群节点有几个副本节点)

2.输入yes,表示按照当前这种分配进行创建

3.集群创建成功出现如下提示

6.查看集群状态

# 1.查看集群状态 check [原始集群中任意节点] [无]
 ./redis-cli --cluster check 192.168.231.134:7000

# 2.集群节点状态说明
- 主节点 
	主节点存在hash slots,且主节点的hash slots 没有交叉
	主节点不能删除
	一个主节点可以有多个从节点
	主节点宕机时多个副本之间自动选举主节点

- 从节点
	从节点没有hash slots
	从节点可以删除
	从节点不负责数据的写,只负责数据的同步

1.连接集群 加上-c

./redis-cli -p 7000 -c

启动宕机的节点

./redis-server /root/7000/redis.conf

查看节点状态

ps aux|grep redis

杀死某一节点

kill -9 ..

发现如果一台master和它对应的从都宕机了。那么,其他的主节点也无法再添加数据。无法查询。

3.添加主节点

# 1.添加主节点 add-node [新加入节点] [原始集群中任意节点]
	./redis-cli --cluster add-node 192.168.231.134:7006 192.168.231.134:7000 --cluster-slave
- 注意:
	1.该节点必须以集群模式启动
	2.默认情况下该节点就是以master节点形式添加

4.添加从节点

# 1.添加从节点 add-node --slave [新加入节点] [集群中任意节点]
 ./redis-cli --cluster add-node --slave 192.168.231.134:7006 192.168.231.134:7000 --cluster-slave
- 注意:
	当添加副本节点时没有指定主节点,redis会随机给副本节点较少的主节点添加当前副本节点
	
# 2.为确定的master节点添加主节点 add-node --slave --master-id master节点id [新加入节点] [集群任意节点]
 ./redis-cli --cluster add-node 192.168.231.134:7006 192.168.231.134:7000 --cluster-slave --cluster-master-id e0e77038511829dd19b5fc284b65fd7293c50e5c

5.删除节点

# 1.删除节点 del-node [集群中任意节点] [删除节点id]
 ./redis-cli --cluster del-node 192.168.231.134:7006 8f37220c4e81ee85660631b918cb7acfc21a5b27
- 注意:
 1.被删除的节点必须是从节点或没有被分配hash slots的节点

6.集群在线分片

# 1.在线分片 reshard [集群中任意节点] [无]
 ./redis-cli --cluster reshard 192.168.231.134:7000

7.spring配置文件 连接

#redis cluster操作 书写集群中所有节点
spring.redis.cluster.nodes=192.168.231.134:7000,192.168.231.134:7001,192.168.231.134:7002,192.168.231.134:7003,\\
  192.168.231.134:7004,192.168.231.134:7005,192.168.231.134:7006

以上是关于redis集群搭建怎么分配内存的的主要内容,如果未能解决你的问题,请参考以下文章

Redis 开发与运维Redis Cluster 集群

Redis 开发与运维Redis Cluster 集群

Redis 开发与运维Redis Cluster 集群

redis 集群搭建: redis-cluster

Redis深入学习笔记Redis内存分配

如何找到分配给redis实例的内存?