首页 文章 精选 留言 我的

精选列表

搜索[算力调度],共10000篇文章
优秀的个人博客,低调大师

架构设计 | 分布式系统调度,Zookeeper集群化管理

一、框架简介 1、基础简介 Zookeeper基于观察者模式设计的组件,主要应用于分布式系统架构中的,统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等场景。 Linux下Zookeeper单节点安装 SpringBoot整合Zookeeper中间件 2、集群选举 Zookeeper集群基于半数机制,集群中半数以上机器存活,集群处于可用状态。所以建议Zookeeper集群安装为奇数台服务器。在集群的配置文件中并没有指定Master和Slave。在Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。 基本描述 假设有三台服务器组成的Zookeeper集群,每个节点的myid编号依次1-3,依次启动服务器,会发现server2被选择为Leader节点。 server1启动,执行一次选举。服务器1投自己一票。此时服务器1票数一票,未达到半数以上(2票),选举无法完成,服务器1状态保持为LOOKING; server2启动,再执行一次选举。服务器1和2分别投自己一票,并交换选票信息,因为服务器2的myid比服务器1的myid大,服务器1会更改选票为投服务器2。此时服务器1票数0票,服务器2票数2票,达到半数以上,选举完成,服务器1状态为follower,2状态保持leader,此时集群可用,服务器3启动后直接为follower。 二、集群配置 1、创建配置目录 # mkdir -p /data/zookeeper/data # mkdir -p /data/zookeeper/logs 2、基础配置 # vim /opt/zookeeper-3.4.14/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper/data dataLogDir=/data/zookeeper/logs clientPort=2181 3、单节点配置 # vim /data/zookeeper/data/myid 三个节点服务,分别在myid文件中写入[1,2,3] 4、集群服务 在每个服务的zoo.cfg配置文件中写入如下配置: server.1=192.168.72.133:2888:3888 server.2=192.168.72.136:2888:3888 server.3=192.168.72.137:2888:3888 5、启动集群 分别启动三台zookeeper服务 [zookeeper-3.4.14]# bin/zkServer.sh start Starting zookeeper ... STARTED 6、查看集群状态 Mode: leader是Master节点 Mode: follower是Slave节点 [zookeeper-3.4.14]# bin/zkServer.sh status Mode: leader 7、集群状态测试 随便登录一台服务的客户端,创建一个测试节点,然后在其他服务上查看。 [zookeeper-3.4.14 bin]# ./zkCli.sh [zk: 0] create /node-test01 node-test01 Created /node-test01 [zk: 1] get /node-test01 或者关闭leader节点 [zookeeper-3.4.14 bin]# ./zkServer.sh stop 则会重新选举该节点。 8、Nginx统一管理 [rnginx-1.15.2 conf]# vim nginx.conf stream { upstream zkcluster { server 192.168.72.133:2181; server 192.168.72.136:2181; server 192.168.72.136:2181; } server { listen 2181; proxy_pass zkcluster; } } 三、服务节点监听 1、基本原理 分布式系统中,主节点可以有多台,可以动态上下线,任意一台客户端都能实时感知到主节点服务器的上下线。 流程描述: 启动Zookeeper集群服务; RegisterServer模拟服务端注册; ClientServer模拟客户端监听; 启动服务端注册三次,注册不同节点的zk-node服务; 依次关闭注册的服务端,模拟服务下线流程; 查看客户端日志,可以监控到服务节点变化; 首先创建一个节点:serverList,用来存放服务器列表。 [zk: 0] create /serverList "serverList" 2、服务端注册 package com.zkper.cluster.monitor; import java.io.IOException; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.ZooDefs.Ids; public class RegisterServer { private ZooKeeper zk ; private static final String connectString = "127.0.0.133:2181,127.0.0.136:2181,127.0.0.137:2181"; private static final int sessionTimeout = 3000; private static final String parentNode = "/serverList"; private void getConnect() throws IOException{ zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() { @Override public void process(WatchedEvent event) { } }); } private void registerServer(String nodeName) throws Exception{ String create = zk.create(parentNode + "/server", nodeName.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); System.out.println(nodeName +" 上线:"+ create); } private void working() throws Exception{ Thread.sleep(Long.MAX_VALUE); } public static void main(String[] args) throws Exception { RegisterServer server = new RegisterServer(); server.getConnect(); // 分别启动三次服务,注册不同节点,再一次关闭不同服务端看客户端效果 // server.registerServer("zk-node-133"); // server.registerServer("zk-node-136"); server.registerServer("zk-node-137"); server.working(); } } 3、客户端监听 package com.zkper.cluster.monitor; import org.apache.zookeeper.*; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ClientServer { private ZooKeeper zk ; private static final String connectString = "127.0.0.133:2181,127.0.0.136:2181,127.0.0.137:2181"; private static final int sessionTimeout = 3000; private static final String parentNode = "/serverList"; private void getConnect() throws IOException { zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() { @Override public void process(WatchedEvent event) { try { // 监听在线的服务列表 getServerList(); } catch (Exception e) { e.printStackTrace(); } } }); } private void getServerList() throws Exception { List<String> children = zk.getChildren(parentNode, true); List<String> servers = new ArrayList<>(); for (String child : children) { byte[] data = zk.getData(parentNode + "/" + child, false, null); servers.add(new String(data)); } System.out.println("当前服务列表:"+servers); } private void working() throws Exception{ Thread.sleep(Long.MAX_VALUE); } public static void main(String[] args) throws Exception { ClientServer client = new ClientServer(); client.getConnect(); client.getServerList(); client.working(); } } 四、源代码地址 GitHub·地址 https://github.com/cicadasmile/data-manage-parent GitEE·地址 https://gitee.com/cicadasmile/data-manage-parent

优秀的个人博客,低调大师

K8S从懵圈到熟练:认证与调度

不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了。现在我们上微博、或者网购,操作的其实不是眼前这台设备,而是一个又一个集群。 通常,这样的集群拥有成百上千个节点,每个节点是一台物理机或虚拟机。集群一般远离用户,坐落在数据中心。为了让这些节点互相协作,对外提供一致且高效的服务,集群需要操作系统。Kubernetes就是这样的操作系统。 比较Kubernetes和单机操作系统,Kubernetes相当于内核,它负责集群软硬件资源管理,并对外提供统一的入口,用户可以通过这个入口来使用集群,和集群沟通。 而运行在集群之上的程序,与普通程序有很大的不同。这样的程序,是“关在笼子里”的程序。它们从被制作,到被部署,再到被使用,都不寻常。我们只有深挖根源,才能理解其本质。 “关在笼子里”的程

优秀的个人博客,低调大师

GPT-6 Astra深度拆解:十万GPU算力暴力、V8零日漏洞核弹、KiCad工业级自动化与OpenAI的“数字员工”终极野心

在AI行业的发展史中,有些词汇是被刻意回避的。在2024年之前,“AGI(通用人工智能)”就是这样一个词。尽管各大实验室的CEO们在私下聚会和播客访谈中频繁提及,但在正式的产品发布会上,它始终被视为一种“营销禁忌”——过早承诺AGI,不仅会引来监管机构的严厉审查,更会招致学术界的群嘲。

优秀的个人博客,低调大师

Deepseek的战略考虑以及核心竞争力本质

美国科技股相关公司,其发展依赖资本驱动。简单来讲,就是借助投资以及对未来概念的兑现,以此达成长期增长。美国整体在很大程度上也是采用这种模式。就像 Deepseek 的突然出现,使得美国股市遭受冲击,背后或许就是这个原因。美股公司往往需要数年时间(一般是5-10年),将理念转化为实际产品,从而支撑当下较高的估值。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册