如何理解服务器集群(cluster),以及资源池

集群(cluster)

集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。

将主机添加到DRS(distributed resource scheduler)群集时,主机的资源将成为群集资源的一部分。除了这种资源聚合之外,DRS群集还支持群集范围的资源池并实施群集级别的资源分配策略。

资源池(resouce pool)

通过资源池可以委派对主机(或群集)资源的控制权,在使用资源池划分群集内的所有资源时,其优势非常明显。可以创建多个资源池作为主机或群集的直接子级,并对它们进行配置。然后便可向其他个人或组织委派对资源池的控制权。

使用资源池具有下列优点。

灵活的层次结构组织 — 根据需要添加、移除或重组资源池,或者更改资源分配。

资源池之间相互隔离,资源池内部相互共享 — 顶级管理员可向部门级管理员提供一个资源池。某部门资源池内部的资源分配变化不会对其他不相关的资源池造成不公平的影响。

访问控制和委派 — 顶级管理员使资源池可供部门级管理员使用后,该管理员可以在当前的份额、预留和限制设置向该资源池授予的资源范围内进行所有的虚拟机创建和管理操作。委派通常结合权限设置一起执行。

资源与硬件的分离 — 如果使用的是已启用 DRS 的群集,则所有主机的资源始终会分配给群集。这意味着管理员可以独立于提供资源的实际主机来进行资源管理。如果将三台 2GB 主机替换为两台 3GB 主机,您无需对资源分配进行更改。

这一分离可使管理员更多地考虑聚合计算能力而非各个主机。

管理运行多层服务的各组虚拟机 — 为资源池中的多层服务进行虚拟机分组。您无需对每个虚拟机进行资源设置,相反,通过更改所属资源池上的设置,您可以控制对虚拟机集合的聚合资源分配。

例如,假定一台主机拥有多个虚拟机。营销部门使用其中的三个虚拟机,QA 部门使用两个虚拟机。由于 QA 部门需要更多的 CPU 和内存,管理员为每组创建了一个资源池。管理员将 QA 部门资源池和营销部门资源池的 CPU 份额分别设置为高和正常,以便 QA 部门的用户可以运行自动测试。CPU 和内存资源较少的第二个资源池足以满足营销工作人员的较低负载要求。只要 QA 部门未完全利用所分配到的资源,营销部门就可以使用这些可用资源。

下图中的数字显示了向资源池的有效分配。

向资源池分配资源

下图显示了向资源池分配资源的方案。
图片

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JedisCluster Could not get a resource from the pool错误通常是由于连接中的资源不足或连接超时引起的。以下是一些可能的解决方案: 1. 增加连接的最大连接数和最大空闲连接数,以确保连接中有足够的资源可用。 2. 增加连接的超时时间,以便在连接中没有可用连接时等待更长的时间。 3. 检查redis集群的配置是否正确,确保所有节点都已正确配置。 4. 检查redis集群的状态,确保所有节点都处于正常状态。 5. 检查网络连接是否正常,确保可以从应用程序服务器访问redis集群。 以下是一些可能的解决方案的代码示例: ```java // 增加连接的最大连接数和最大空闲连接数 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(100); poolConfig.setMaxIdle(50); // 增加连接的超时时间 JedisCluster jedisCluster = new JedisCluster(nodes, 5000, 5000, 10, password, poolConfig); // 检查redis集群的配置是否正确 Set<HostAndPort> nodes = new HashSet<HostAndPort>(); nodes.add(new HostAndPort("127.0.0.1", 7000)); nodes.add(new HostAndPort("127.0.0.1", 7001)); nodes.add(new HostAndPort("127.0.0.1", 7002)); JedisCluster jedisCluster = new JedisCluster(nodes, poolConfig); // 检查redis集群的状态 Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes(); for (Map.Entry<String, JedisPool> entry : clusterNodes.entrySet()) { Jedis jedis = null; try { jedis = entry.getValue().getResource(); String pong = jedis.ping(); System.out.println(entry.getKey() + " - " + pong); } catch (Exception e) { System.out.println(entry.getKey() + " - " + e); } finally { if (jedis != null) { jedis.close(); } } } // 检查网络连接是否正常 ping redis-server-ip ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值