ZooKeeper管理员指南--基于ZK 3.6.2

  • 前言
  • 部署
    • 系统要求
      • 支持的平台
      • 依赖软件
    • 集群搭建
    • 单服务器和开发搭建
  • 管理员
    • 设计一个ZK部署
      • 跨机器要求
      • 单机器要求
    • 维护
      • 使用中的数据目录清理
      • 日志清除(Log4j)
    • 监督(Supervision)
    • 监控(Monitoring)
    • 日志
    • 排查异常
    • 配置参数
      • 最小配置
      • 高级配置
        • 以下是服务降级的配置
      • 关闭数据目录自动创建
      • 开启 db 存在检查
      • 性能优化选项
      • 调试可见性配置
      • AdminServer 配置
    • 指标提供者
    • 使用 netty 框架通信
      • Qurom TLS
      • 在线升级非TLS集群
    • ZooKeeper 命令
      • 四字母命令
      • The AdminServer
    • 数据文件管理
    • 数据目录
      • 日志目录
      • 文件管理
      • 恢复
    • 要避免的事情
    • 最佳实践

前言

翻译自ZK官网, 部分有省略
原文

部署

系统要求

支持的平台

  • 客户端 : Java 库, 客户端
  • 服务端 : Java 库, 服务端
  • 本地客户端: C语言绑定的客户端
  • 第三方贡献: 一些插件
    基本上就是说, GNU/ Linux 支持上面全部4种, 前面两种Java库的全平台支持, 毕竟跨平台嘛, 最后两种只有 GNU/Linux 支持, 其他平台都不支持
    在这里插入图片描述

依赖软件

需要Java 8 或者以上 (JDK8 LTS, JDK 11 LTS, JDK12. JDK9 和 10 不支持). 服务端要组成集群的话, 至少要3个独立的服务器, 在雅虎使用的机器是专门的RHEL 容器, 双核, 2GB 内存, 和 80GB IDE 硬盘.

集群搭建

推荐使用单数的机器, 比如 4个机器, 如果2个机器挂了, 就没有大多数的票, 服务就不行了, 但是5个机器的话, 挂了2个, 剩下3个仍有多数票.

注意: 生产上3个机器应该够了, 但是出于维护的考虑, 用5个机器会好一点, 因为如果维护其中1个机器的话, 还可以有1个机器的容错. 如果使用3个的话, 维护1个就不能容错了. 所有的冗余考虑都需要考虑整体的环境, 比如都使用同一个网络的话, 交换机坏了整个集群也都没用了…

下面的步骤是每个机器都要执行的:

  1. 安装Java JDK
  2. 设置Java堆, 防止内存页交换
  3. 安装 ZK 服务端的包
  4. 创建配置文件, 命名无所谓, 下面是配置模板

tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

配置参数可以参考配置页面, 集群中的机器需要知道其他机器, 通过 server.id=host:port:port 来配置(第一个端口是成员(Quorum)端口, 第二个端口是专门用于领导选举的端口), 在 3.6.0 版本之后, 可以指定多个服务器地址, 有利于提高可用性因为服务器能够使用多个物理网络接口。指定的server id 会用来作为 myid 文件的内容. 这个 myid 文件会被放在 dataDir 指定的目录中.

  1. myid 文件内容就只是上面指定的 server.id 而已, 比如 “server.1” 的话, 文件内容就是 “1”. id 要求在集群中唯一 且介于 1-255之间, 如果使用高级特性的话, 比如说 TTL 节点, 就只能使用 1-254 (内部原因)

6.创建一个初始化标识文件 initializemyid 相同的目录中, 这个文件要使用一个空的数据目录. 当这个文件出现的时候, 一个空的数据库会被创建然后标识文件会被删除. 当没有这个文件的时候, 1个空的目录表示这个节点将没有投票权利并且 在和一个活跃的 leader 通信之前, 他都不会填充这个数据. 预期的用途就是在创建新的集群的时候应该创建这个文件.

7.如果你的配置文件创建了, 你可以通过以下命令启动ZK 服务器:

$ java -cp zookeeper.jar:lib/*:conf org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.conf

QuorumPeerMain 在启动服务器的同时, 会注册 JMX 管理 beans 会同时被注册. 这样就可以通过 JMX进行管理. 详见. 可以参考 bin/zkServer.sh 中的启动命令.

  1. 通过连接到主机来测试你的部署. 在 Java中, 可以使用

$ bin/zkCli.sh -server 127.0.0.1:2181

单服务器和开发搭建

直接配置一下 配置文件, 然后运行:

bin/zkServer.sh start

管理员

设计一个ZK部署

ZK的可靠性基于:

  1. 只要少数的服务器会宕机. 这里宕机的意思是 机器崩溃, 网络错误 或者 网络和集群大多数分区
  2. 机器运行正常. 表示正常的执行代码, 正常的时钟, 存储和网络组建正常

下面的小节都是基于这两个基础来考虑的

跨机器要求

为了保证大多数机器能相互连通, 如果有F台机器可能失败, 那么应该部署 2*F+1 台服务器. 部署的机器数目最好是单数. 除此之外, 还需要考虑各种异常情况是否独立. 如果所有机器使用相同的交换机, 那么交换机坏了就都坏了, 同样道理的还有共享的电源断路器, 冷却系统等等.

单机器要求

如果你的ZK服务器需要连接其他的应用来获取资源比如说 CPU,存储,网络,内存等等,其性能会大大地受到它们的影响.ZK保证了持久化, 表示它需要使用存储介质来记录变化然后才允许操作成功, 所以要确保其依赖的存储介质不会挂起:

  • ZK的会话日志必须使用专门的设备.(专门的分区是不够的), ZK序列化地写入日志, 和其他进程共享存储设备会导致争用和数秒的延迟.
  • 避免ZK的内存交换.为了让ZooKeeper能够及时运行,内存交换是不被允许的.确保最大堆内存分配不超过物理内存.

维护

很少需要维护但是要记住以下几点:

使用中的数据目录清理

ZK数据目录包含了一些持久化的副本. 可能是快照或者是事务日志文件, 任何变化都会被 znode 记录到 事务日志. 某些情况下, 当日志太大的时候, 会使用 快照的形式 保存到文件系统 并且 新的事务 会使用新的 日志文件.在创建快照的过程中,ZK可能还会把日志写到旧的日志文件里面, 因此 有些比 创建快照时候 更新的事务会在创建快照之前的 日志文件中被找到.

ZK服务器在默认配置下是不会移除快照和事务日志的.

PurgeTxnLog 工具实现了一个简单的持久化策略. API文档 包含了转换的细节.

下面的例子中, 最后的 count 个快照 和 关联的日志还会被保留, 其他的会被删除, 该值通常应该大于3 (尽管不是必须的, 但是它会在日志文件崩溃的时候提供至少3个备份). 这个可以被运行为 cron 任务(定时任务)来每天自动清理日志.

java -cp zookeeper.jar:lib/slf4j-api-1.7.5.jar:lib/slf4j-log4j12-1.7.5.jar:lib/log4j-1.2.17.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count>

版本 3.4.0 之后可以通过 autopurge.snapRetainCountautopurge.purgeInterval 配置自动清除

日志清除(Log4j)

使用log4j 内置的 rolling file appender 实现的, 下面会提供一个示例配置.

监督(Supervision)

你可能会想要有一个自动监督每个ZK进程的监督进程. ZK服务器被设计为"快速失败", 也就是说, 如果发生了不可恢复的异常,整个ZK进程都会推出. 而ZK的"自愈性"使得服务器在重启之后可以重新加入集群.

所以可以通过监督进程比如说 daemontools 或者 SMF (其他工具都可以) 来管理ZK服务器来保证服务器异常推出的时候会系统重启(以便其重新加入集群)

同时也推荐配置ZK在发生 OOM 的时候 dump 出日志. 可以通过在启动的时候增加配置参数:

-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=‘kill -9 %p’

“-XX:+HeapDumpOnOutOfMemoryError” “-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%%%p /t /f”

监控(Monitoring)

主要通过一下方式监控:

  • 通过4字母命令
  • 使用JMX
  • 使用 zkServer.sh status命令

日志

Zk 使用 SLF4J 版本 1.7.5 作为日志基础设置. 为了兼容性它绑定了 LOG4J , 但是你可以使用 LOGBACK 或者任何其他的日志框架.

ZK默认的log4j.properties 文件在 conf 目录里面. log4j.properties 可以放在classpath 也可以放在 工作目录(ZK运行的目录)

排查异常

服务器因为文件损坏而无法启动: 服务器可能会因为无法连接数据或者因为事务日志文件损坏而无法启动. 你会看到在加载ZK数据库的时候抛出的IOException. 这种情况下, 首先要保证集群中的其他服务器没有问题, 在命令行端口使用 “stat” 命令来查看它们是否正常. 如果其他服务器都正常的话, 你就可以删除 数据目录损坏的文件, 删除所有 datadir/version-2 和 datalogdir/version-2/ 中的文件, 并重启服务器.

配置参数

ZK的行为是受配置文件管理的, 这个文件被设计为在每个服务器相同的目录布局中使用相同的配置. 如果配置不相同, 确保服务器列表应该一直.

注意: 在 3.5.0 或以上的版本, 有些配置参数放在了动态配置文件里面. 如果它们放在了静态配置文件中, ZK会自动将他们移动套动态配置文件.

最小配置

只需要一下的配置:

  • clientPort: 监听客户端请求的端口; 也就是客户端指定要连接的端口
  • secureClientPort : 使用 SSL 连接的客户端端口. 和 clientPort 两种都指定的话则都生效, 不指定的那个则不生效. 当使用插件 zookeeper.serverCnxnFactory, zookeeper.clientCnxnSocket 作为Netty的时候, 会自动开启SSL模式
  • observerMasterPort : 监听观察者连接的端口, 如果设置了该属性,那么服务器将在 follower 模式和 leader 模式下托管观察者连接,并在观察者模式下尝试连接任何投票的对等点。
  • dataDir: ZK保存内存数据的快照的目录, 除非另外指定, 事务日志的更新也会放在这里.

注意:
小心你放置事务日志的位置, 专门的事务日志设备是确保高性能的关键. 把事务日志放在繁忙的设备上会大大的影响性能.

  • tickTime: 每一次计时的间隔, ZK使用的基础时间, 使用 毫秒 (milliseconds) 作为单位. 被用来当做心跳或者超时, 比如说最小会话超时时间就是2个时钟间隔.

高级配置

这些配置都是可选的, 可以用来调优. 有些配置可以通过Java的系统属性配置, 通常是使用 zookeeper.keyword 的形式:

  • dataLogDir: (无Java系统属性).专门指定事务日志的存放位置,使其不适用 dataDir. 允许使用专门的设备来保存事务日志, 防止和 日志 以及 快照竞争.

高度推荐指定 dataLogDir 以使用单独的设备来提高性能

  • globalOutstandingLimit : (Java系统属性: zookeeper.globalOutstandingLimit).客户端发送过来的请求排队的最大数量. 防止太多的客户端请求撑爆服务器的内存.默认1,000

  • preAllocSize : (Java属性: zookeeper.preAllocSize) 事务日志预分配的空间大小. 预分配空间可以防止日志在写入的时候去磁盘查找空闲的块. 单位是 kb, 默认 64M. 修改这个配置的一个理由是, 当快照产生的很快的时候, 用来减少块的大小(见 snapCount 和 snapSizeLimitInKb)

  • snapCount : (Java属性: zookeeper.snapCount) ZK 使用事务日志和快照来记录事务(考虑 提前写日志 write-ahead log). snapCount 决定了多少个事务日志之后会开始产生快照. 为了防止所有的成员同时生成快照, 每个 ZK服务器会产生一个随机数处于 [snapCount/2+1, snapCount] 之间, 在达到这个随机数之后就会产生快照. 默认的 snapCount 是 100,000.

  • commitLogCount : (zookeeper.commitLogCount) ZK会在内存中维护一部分已提交的请求列表以供服务器间同步最近的请求的使用. 在快照很大的时候(> 100,000), 能提高同步的性能. 默认 500

  • snapSizeLimitInKb : (zookeeper.snapSizeLimitInKb) 和 snapCount , 但是这个使用的是文件大小来进行限制. 在拍摄快照(以及滚转事务日志)之前,事务日志中记录的事务集允许的总字节大小由snapSize确定. 为了防止多个成员同时拍摄快照, 每个成员实际使用的大小为 [snapSize/2+1, snapSize] 间的一个随机值. 默认是 4,194,304 (4GB), 负数表示不开启这个功能.

  • txnLogSizeLimitInKb : (zookeeper.txnLogSizeLimitInKb) 控制单个事务日志文件的大小, 默认关闭. 事务日志文件太大会影响同步性能, 因为leader需要扫描日志文件来找到合适的位置进行同步. 日志文件大小达到这个限制之后就会产生新的事务日志文件

  • maxCnxns : (zookeeper.maxCnxns) 限制每个zk服务器并发的连接数目(每个服务器的客户端端口). 用来放置特定类型的 DOS 工具. 默认是 0, 表示没有限制. 因为 serverCnxnFactory 和 secureServerCnxnFactory 是分开算的, 所以最多的连接数是 2 *maxCnxns

  • maxClientCnxns: 在 socket 层面限制一个客户端(根据ip)允许连接zk集群中某个服务器的最大连接数. 默认60. 设置成0 表示没有限制

  • clientPortAddress : New in 3.3.0: 监听客户端请求的地址(ipv4, ipv6, 或者hostname), 可选的, 默认监听使用 clientPort 的所有连接.

  • minSessionTimeout : New in 3.3.0: 默认2倍 tikeTime,毫秒

  • maxSessionTimeout : New in 3.3.0: 默认20倍 tikeTime ,毫秒

  • fsync.warningthresholdms (Java system property: zookeeper.fsync.warningthresholdms) New in 3.3.4: 日志执行 fsync 的时候超过了这个毫秒数就会打印警告信息, 默认 1000

  • maxResponseCacheSize : (Java system property: zookeeper.maxResponseCacheSize) 缓存序列化信息的最近读取记录的数目, 默认是 400, 负数或者 0 表示不启用, 可以使用 response_packet_cache_hits 和 response_packet_cache_misses 指标来调整这个值

  • maxGetChildrenResponseCacheSize (Java system property: zookeeper.maxGetChildrenResponseCacheSize) New in 3.6.0: 和 maxResponseCacheSize 类型, 但是是作用于 获取子节点的请求

  • autopurge.snapRetainCount: (No Java system property) New in 3.4.0: 默认3, 最小值, 保存最近的 快照 和 其关联的事务日志的数目.

  • autopurge.purgeInterval : (No Java system property) New in 3.4.0: 触发自动清除日志的间隔, 单位小时,默认是0

  • syncEnabled : (Java system property: zookeeper.observer.syncEnabled) New in 3.4.6, 3.5.0: 让观察者和其他参与者一样把事务日志写到磁盘, 减少观察者重启恢复的时间. 默认是true , 设置为 false 关闭.

  • fastleader.minNotificationInterval : (Java system property: zookeeper.fastleader.minNotificationInterval) 连续两次通知检查领导人选举时间的下限。领导者选举的两次连续通知检查之间的时间长度下限。 此间隔确定对等方等待检查选举投票集的时间,并影响选举可以解决的速度。 对于长选举,该间隔遵循从配置的最小值(this)和配置的最大值(fastleader.maxNotificationInterval)开始的退避策略。

  • fastleader.maxNotificationInterval : (Java system property: zookeeper.fastleader.maxNotificationInterval) 和上面的类似, 上限

以下是服务降级的配置

  • connectionTokenFillTime : (Java system property: zookeeper.connection_throttle_fill_time) New in 3.6.0:这是用于调优服务器端连接调节器的参数之一,该调节器是一种基于令牌的速率限制机制,具有可选的概率的服务降级。 用来限流的token统计周期.

  • connectionTokenFillCount : (Java system property: zookeeper.connection_throttle_fill_count) New in 3.6.0: 每个统计周期 每个 token 添加到 bucket 的计数

  • connectionFreezeTime : (Java system property: zookeeper.connection_throttle_freeze_time) New in 3.6.0: 定义每过多长的毫秒数就调整降级概率. -1 表示不开启, 默认 -1.

  • connectionDropIncrease : (Java system property: zookeeper.connection_throttle_drop_increase) New in 3.6.0: connectionFreezeTime 周期内, 如果bucket为空, 就降级概率会增加 connectionDropIncrease , 默认是 0.02

  • connectionDropDecrease : (Java system property: zookeeper.connection_throttle_drop_decrease) New in 3.6.0:每次 connectionFreezeTime 检查周期, 如果 bucket 中的数量超过了阈值, 则服务降级的可能性减少 connectionDropDecrease . 阈值 = connectionMaxTokens * connectionDecreaseRatio, 默认是0.002

  • connectionDecreaseRatio : (Java system property: zookeeper.connection_throttle_decrease_ratio) New in 3.6.0: 见 connectionDropDecrease, 默认是 0

… 后面配置太多了, 有需要再去找吧

关闭数据目录自动创建

New in 3.5: 如果启动的时候还不存在数据目录(配置文件中指定的), 默认会自动创建. 这个行为有时候会非常危险, 想象这样一个例子, 如果你不小心修改了 服务器的 dataDir 的配置, 服务器就会自动在一个新的位置创建新的数据目录, 这样的话就会用一个空的命名空间进行服务器, 这种场景称为 “脑裂” (比如 同时存储了旧的数据 和 新的数据). 如果能够关闭这种创建行为就能避免这种情况了. 通常生产应该关闭自动创建, 但是因为默认的遗留行为目前还无法改变所以要具体情况具体分析.

运行 zkSever.sh 的时候 设置 环境变量 ZOO_DATADIR_AUTOCREATE_DISABLE 为 1 就可以关闭了. 如果是通过类直接运行的话, 使用 zookeeper.datadir.autocreate=false , 比如 -Dzookeeper.datadir.autocreate=false

如果关闭了自动创建, 并且发现目录不存在的话, 就会报错并且启动失败.

关闭了自动创建之后, 用户就要先安装 Zk, 然后创建一个目录文件(和潜在的 txnlog 目录), 然后再启动服务器. zkServer-initialize.sh 脚本会自动创建需要的目录, 并且可选地创建 myid 文件(通过命令行参数). 这个脚本也可以在有自动创建的时候使用. 但是注意,它只会帮你创建目录, 但是不会帮你创建配置文件.

开启 db 存在检查

New in 3.6.0: 默认情况下, 如果 zk 服务器启动的时候 找不到 数据树, 它会把 zxid 设置为0 并且 作为投票成员加入到集群中. 这种情况有时候会很危险, 假如数据目录是在其宕机的时候删除掉的, 那么就可能会丢失新选举的 leader中不存在的事务. 当开启了 db 存在性检查, 它在检测到没有数据树的时候, 服务器会作为非投票者加入集群之后它能够 和 leader 同步并获取到 最新的版本的集群数据. 为了表示自己确实是想要空的目录树, 可以在 myid 所在的目录创建一个 initialize 文件. 这个文件会在server启动的时候检测到然后自动帮你删除.

使用 -Dzookeeper.db.autocreate=false 来开启存在性检查, 如果使用的是 zkServer-initialize.sh , 它会自动帮你创建 initialization 文件.

性能优化选项

… 略

调试可见性配置

… 略

AdminServer 配置

… 略

指标提供者

New in 3.6.0: 下面的选项用来配置指标

默认情况下, zk服务器会通过 AdminServer 和 4字母命令 暴露一些有用的指标

3.6.0 以后你可以配置一个不同的指标提供者, 以提供不同系统的指标支持

3.6.0 之后 Zk 二进制包整合了 Prometheus.io

  • metricsProvider.className : 设置到 "org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider"来开启 Prometheus.io 导出器.

  • metricsProvider.httpPort : Prometheus.io 导出器会开启一个 Jetty 服务器并绑定到这个端口, 默认是 7000. Prometheus 访问地址是 http://hostname:httPort/metrics.

  • metricsProvider.exportJvmInfo : 如果设置为 true Prometheus.io 会暴露关于 JVM 的有用指标.默认为 true.

使用 netty 框架通信

3.5 版本之后 , ZK服务器能够使用 Netty 代替默认的 NIO选项. 通过设置环境变量 zookeeper.serverCnxnFactory 为 org.apache.zookeeper.server.NettyServerCnxnFactory, 对于客户端, 设置 zookeeper.clientCnxnSocket 为org.apache.zookeeper.ClientCnxnSocketNetty.

Qurom TLS

New in 3.5.5

基于 Netty 框架的通信可以设置使用TLS加密通信

注意 Quorum TLS 封装了 leader选举 和 成员通信协议 的加密

  1. 创建SSL keystore JKS 来存储凭据

每个ZK实例都应该创建1个keystore

在这个例子中我们生了一个自签名的证书并且将其私钥一起保存在了keystore.jks里面. 这种适合测试,但是生产上你可以要使用正式的证书.

注意 alias (-alias) 和 distinguished name (-dname) 必须匹配机器使用的hostname,否则hostname验证会无法工作.

keytool -genkeypair -alias (hostname−f)−keyalgRSA−keysize2048−dname"cn=(hostname -f) -keyalg RSA -keysize 2048 -dname "cn=(hostnamef)keyalgRSAkeysize2048dname"cn=(hostname -f)" -keypass password -keystore keystore.jks -storepass password

  1. 从keystore中提取公钥(证书), 这一步可能只有自签名的证书需要.

    keytool -exportcert -alias $(hostname -f) -keystore keystore.jks -file $(hostname -f).cer -rfc

  2. 创建包含了所有ZK实例证书的 SSL truststore

    整个集群中的成员都要使用相同的 truststore, 其中包含了所有集群成员的证书. 这些证书在truststore 中的别名是不同的. 但是命名成什么无所谓.

    keytool -importcert -alias [host1…3] -file [host1…3].cer -keystore truststore.jks -storepass password

  3. 需要使用 NettyServerCnxnFactory 作为 serverCnxnFactory, 因为 NIO 不支持 SSL. 添加以下配置到 zoo.cfg 配置文件:

    sslQuorum=true serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory ssl.quorum.keyStore.location=/path/to/keystore.jks ssl.quorum.keyStore.password=password ssl.quorum.trustStore.location=/path/to/truststore.jks ssl.quorum.trustStore.password=password

  4. 验证集群运行日志中有打印TLS的信息:

    INFO [main:QuorumPeer@1789] - Using TLS encrypted quorum communication INFO [main:QuorumPeer@1797] - Port unification disabled … INFO [QuorumPeerListener:QuorumCnxManager$Listener@877] - Creating TLS-only quorum server socket

在线升级非TLS集群

New in 3.5.5

以下利用 端口一致化(port unification)功能来实现在线 TLS 切换:

  1. 为集群中所有的服务器创建必要的 keystore 和 truststore (按照上节所说)

  2. 添加以下配置并且重启第一个节点

    sslQuorum=false portUnification=true serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory ssl.quorum.keyStore.location=/path/to/keystore.jks ssl.quorum.keyStore.password=password ssl.quorum.trustStore.location=/path/to/truststore.jks ssl.quorum.trustStore.password=password

    注意, 这个时候还没有开启TLS, 但是我们开启 端口一致化

  3. 重复上面的第2步修改其他服务器的配置, 验证你可以看到以下的日志

    INFO [main:QuorumPeer@1791] - Using insecure (non-TLS) quorum communication INFO [main:QuorumPeer@1797] - Port unification enabled … INFO [QuorumPeerListener:QuorumCnxManager$Listener@874] - Creating TLS-enabled quorum server socket

​ 启动完之后要检查一下运行状态是否正常

  1. 每个节点上开启端口一致并且依次重启

    sslQuorum=true

    portUnification=true

  2. 一旦完成之后并确认集群运行状态正常, 就可以关闭端口一致并再次依次重启

    sslQuorum=true

    portUnification=false

ZooKeeper 命令

四字母命令

所有命令都是4个字母组成的, 可以通过 telnet 或者 nc 或者zk客户端端口 触发命令

3个最常用的命令: stat 显示服务器的通用信息和 已连接的客户端. srvrcons 显示关于服务器和连接更详细的信息.

New in 3.5.3: 四字命令需要在使用前配置好允许哪些命令的使用. 使用 4lw.commands.whitelist 这个配置. 后面四字命令会过期, 建议使用 AdminServer

既然以后要过期… 那就略过了.

重点说一下: trace mask

stmk : 设置当前的 trace mask. track mask 是 64位的, 每一位表示开启或者关闭特定目录的服务器上的 trace 日志. Log4J 必须设置为 trace 级别 才能看到 trace 日志信息. 以下是每个位的目录含义:

Trace Mask Bit Values
0b0000000000未使用,保留给未来使用
0b0000000010打印客户端请求, 排除ping请求
0b0000000100未使用,保留给未来使用
0b0000001000打印ping请求
0b0000010000打印当前leader发过来的请求包, 排除ping请求
0b0000100000打印客户端会话的添加, 移除和校验日志
0b0001000000打印传递到客户端的会话的监控事件.
0b0010000000打印当前leader发过来的ping请求
0b0100000000未使用,保留给未来使用
0b1000000000未使用,保留给未来使用

所有剩下的位都是未使用的,保留给未来使用. 多个 mask 使用 位或 合并运算. 默认mask 是 0b0100110010. 因此 默认trace 日志包含了 客户端请求, leader 的包和 会话的信息. 要设置mask的话, 使用 stmk 命令之后, 紧跟着 对应的mask, 以下是 perl 的例子:

$ perl -e “print ‘stmk’, pack(‘q>’, 0b0011111010)” | nc localhost 2181 250

The AdminServer

New in 3.5.0: AdminServer 是一个嵌入式的 jetty 服务器, 为4字命令提供了http接口. 默认情况下, 使用的是 8080端口, 并且名通过 URL 的 “/commnads/[command name]” 触发. 比如 http://localhost:8080/commands/stat, 命令的响应是 json 值. 不同的是, 命令没有被限制为 4个字母, 名可以用多个名称, 比如: stmk 可以用来指代 set_trace_mask. 通过 http://localhost:8080/commands 可以看到所有可用的命令. 见 AdminServer 配置选项 查看如何变更端口和 urls

AdminServer 默认开启, 但是可以被关闭:

  • 设置系统属性 zookeeper.admin.enableServer 为 false
  • 从 classpath 移除 Jetty (如果你想要重写 ZK 的 jetty 依赖, 推荐这种)

注意 TCP 的四字命令在 AdminServer关闭的时候依然有用.

可用的命令如下:

  • connection_stat_reset/crst: 重置所有客户端连接数据.不返回新的字段
  • configuration/conf/config : 打印服务端配置的基本信息. 比如客户端端口, 数据目录的绝对路径
  • connections/cons : 客户端到服务端的连接信息. 注意, 取决于连接数, 这个操作可能会影响服务端的性能. 返回 “connections”, 连接信息对象的列表
  • hash: 历史的 digest 列表中的 Txn digests. 每128个事务会记录一次. 返回 “digests” , 事务digest 对象的列表
  • dirs : logfile目录和快照目录大小的字节数. 返回 “datadir_size” 和 “logdir_size”
  • dump : 会话过期和临时节点的信息. 取决于连接数可能会影响服务器性能. 返回 “expiry_time_to_session_ids” 和 “session_id_to_ephemeral_paths” 的map
  • environment/env/envi : 返回所有环境变量
  • get_trace_mask/gtmk : 当前的 trace mask, set_trace_mask 的只读版本. 参考 四字命令中 stmk 的描述.返回 “tracemask”.
  • initial_configuration/icfg : 打印用来启动节点的配置信息, 返回"initial_configuration"
  • is_read_only/isro : true/false 服务器是否处于只读模式. 返回"read_only".
  • last_snapshot/lsnp : 最近一次完成保存到磁盘的快照的信息. 如果在服务器启动和完成写入快照期间调用, 则返回启动服务器时候读取的快照.返回"zxid" 和"timestamp", 后者单位是秒.
  • leader/lead : 如果集群配置了成员模式则返回当前的leader状态和地址, 返回 “is_leader”, “leader_id”, 和"leader_ip"
  • monitor/mntr : 返回监控信息. 包括性能统计新, 内部队列, 数据树的总结信息等等, 返回各自的字段
  • observer_connection_stat_reset/orst : 重置所有的观察者连接数据. observers的伴生命令, 不返回新的字段.
  • ruok : 不执行任何操作的命令, 用来检查服务器是否在运行中. 有响应不代表加入了集群, 只是代表 admin sever 启动了并绑定到了特定的端口, 不返回新的字段
  • set_trace_mask/stmk : 设置 trace mask,(因此它需要一个参数), get_trace_mask 的写版本. 详见四字命令中的 stmk . 返回 “tracemask”.
  • server_stats/srvr : 返回服务器信息
  • stats/stat : 在 server_stats 的基础上多了 connections 信息. 取决于连接数可能会影响服务器性能
  • stat_reset/srst : 重置服务器统计数据.server_statsstats返回的信息的子集
  • observers/obsr : Information on observer connections to server. Always available on a Leader, available on a Follower if its acting as a learner master. 返回 “synced_observers” (int) and “observers” (list of per-observer properties).
  • system_properties/sysp : 所有已定义的系统属性
  • voting_view : 提供当前集群中的投票成员. 返回 “current_config” 的 map
  • watches/wchc : 通过会话聚合的监控信息. 取决于连接数可能会影响服务器性能. 返回 "session_id_to_watched_paths " 的 map
  • watches_by_path/wchp : 通过路径聚合的监控信息.取决于连接数可能会影响服务器性能. 返回 “path_to_session_ids” 的 map
  • watch_summary/wchs : 汇总的监控信息, 返回: “num_total_watches”, “num_paths”, 和 “num_connections”
  • zabstate : Zab 协议当前节点的运行阶段 和 它是否是投票成员, 可能阶段: ELECTION, DISCOVERY, SYNCHRONIZATION, BROADCAST.返回 “voting” 和"zabstate" 字段

数据文件管理

ZK保存数据于数据目录, 保存事务日志在事务日志目录. 默认两个是一样的, 可以为事务日志单独配置一个目录. 使用专门的设备来保存事务日志能提高性能.

数据目录

可能会包含以下2或者3个文件:

  • myid - 包含单独的ASCII 可读的整数表示服务器的 id
  • initialize - 出现的时候表示想要空的数据树. 会清除已创建的数据树
  • snapshot - 持有数据库的模糊快照

每个ZK服务器都有一个单独的id, 这个id用于两个地方: myid文件 和 配置文件. myid文件标志了给定了数据目录的服务器. 配置文件列举了其他服务器的连接地址并通过 服务器id标志. 当一个zk 服务器实例启动, 它会从myid文件读取它的id, 使用那个 id, 来从配置文件中查看自己应该监听那个端口.

保存在 数据目录的 快照文件是 模糊快照, 表示zk服务器正在拍摄快照, 数据树正在发生变化. 快照的最后是 zxid, zk事务id, 即在拍摄快照开始时最后提交的事务的ZooKeeper事务id。因此,快照包括在快照进行时发生的数据树更新的子集。快照可能不会关联任何实际存在的数据树, 由此我们称之为模糊快照. 不过,ZooKeeper仍然可以使用这个快照进行恢复,因为它利用了更新的幂等特性。通过对模糊快照重放事务日志,ZooKeeper在日志末尾获得系统的状态。

日志目录

日志目录包含了ZK的事务日志. 在更新执行之前, ZK保证表示该事务的更新操作会写入到固定存储器.当事务的数量达到阈值的时候, 会创建一个新的事务日志文件. 该阈值使用 snapCount 和 snapSizeLimitInKb 参数计算出来的. 日志文件的后缀是写入到日志中的第一个事务的zxid.

文件管理

不同配置 和 独立zk 和 集群zk服务器的 快照 和 事务日志文件格式并无不同. 可以直接复制到开发环境的独立的zk服务器来排查问题.

使用旧的日志和快照文件, 可以查看ZK服务器的上个状态甚至恢复成那个状态. LogFormatter 类允许管理员查看日志中的事务.

ZK服务器创建快照和日志文件, 但是不会删除它们. 文件保留策略由ZK外部实现. 服务器本身只需要最新的完整的模糊快照, 所有的跟随它的日志文件, 还有它之前的最后的日志文件. 后者是因为拍摄快照的时候, 也会同时进行更新, 所以该日志文件也是必须的. 这是可能的因为 拍摄快照 和 日志滚动 某种程度上是独立于Zk的. 查看 维护 一节来设置文件保留策略.

注意: 这些文件中的数据都是没有加密的. 可采取措施防止未授权的访问, 比如说访问控制. 这些措施也是zk外部进行的, 独立于zk本身的配置文件.

恢复

查看 ZK工具集合

要避免的事情

  • 不一致的服务器列表: 客户端使用的ZooKeeper服务器列表必须与每个ZooKeeper服务器拥有的ZooKeeper服务器列表匹配. 如果客户端的服务器列表是实际服务器列表的子集还好, 但是如果不同的话, 会出现奇怪的问题. 另外, 服务器之间的服务器列表也要保持一致.
  • 错误的事务日志位置: 事务日志是ZK性能的关键. ZK响应前需要把事务同步到磁盘. 建议使用专门的设备放置事务日志.如果没有的话, 提高 snapCount 减少快照生成的数量. 尽管无法消灭问题, 但是会提供更多的资源给事务日志.
  • 错误的java堆大小: 设置好java堆大小, 防止内存页交换到磁盘上. 磁盘是 ZK 的命门. 所有东西都是排序的, 如果处理某个请求的时候交换到了磁盘上, 那么后续的请求可能也会一起放到磁盘上. 千万要避免内存交换. 要保守估计堆大小: 如果有 4G 内存, 不要设置堆内存为 6G 设置是 4G. 对于4G机器, 建议是3G, 因为操作系统 和 缓存本身需要占用内存. 最好还是进行负载测试, 并且保存内存够用而不会导致内存交换.
  • 暴露在公共环境的部署: zk集群应该部署在可信任的环境, 比如 防火墙之后.

最佳实践

略… 原文没啥营养

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 带UI的小初高数学学习软件——湖南大学结对编程总结

    链接&#xff1a;完整代码及说明 提取码&#xff1a;87mx 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 一、功能需求 1、用户注册功能。用户提供手机号码&#xff0c;点击注册将收到一个注册码&#xff0c;用户可使用该注册码完成注册&#xff1b; 2、用户完…...

    2024/4/25 3:05:44
  2. 薛永东

    薛永东 教授&#xff0c;主任医师 清宫御医五代传人 京城四大名医汪逢春再传弟子 北京同仁堂中医特聘专家 北京理工大学医院专家 北京中医药研究院客座教授 北京中医疑难病研究会专家委员会主任委员 薛永东教授系八代中医世家&#xff0c;清宫御医五代传人&#xff0c;国家非物…...

    2024/5/7 18:39:56
  3. python风控建模实战lendingClub

    时值蚂蚁上市之际&#xff0c;马云在上海滩发表演讲。马云的核心逻辑其实只有一个&#xff0c;在全球数字经济时代&#xff0c;有且只有一种金融优势&#xff0c;那就是基于消费者大数据的纯信用&#xff01; 我们不妨称之为数据信用&#xff0c;它比抵押更靠谱&#xff0c;它…...

    2024/5/7 17:01:08
  4. 设计模式 3 —— 迭代器和组合模式(迭代器)

    迭代器模式&#xff1a;提供一种方法顺序访问一个聚合对象中的元素&#xff0c;而不暴露其内部的结构。 组合模式&#xff1a;允许将对象组成树形结构来表现“整体/部分”的层次结构。组合能让客户以一致的方法处理对象的组合和个别对象。 概要 第1部分 问题引入 第2部分 迭…...

    2024/5/7 16:38:00
  5. 达梦数据库——学习笔记 005

    学习笔记 005 第18章 全文检索 看前思考&#xff1a; 全文检索什么&#xff1f;如何全文检索&#xff1f;有哪些管理方式&#xff1f; 个人总结&#xff1a; 全文检索技术目的就是实现对大容量的非结构化数据的快速查找。DM实现了全文检索功能&#xff0c;并将其作为DM 服…...

    2024/5/8 0:50:05
  6. vue项目里面使用video.js视频播放插件

    引入video.js文件 npm install -S video.js在main.js里面引入相关文件&#xff0c;并挂载在window对象上 import videojs from video.js; import "video.js/dist/video-js.min.css"; window.videojs videojs;在页面使用播放器 html <video id"example…...

    2024/5/7 22:05:40
  7. vue中遇到的indexOf数组索引

    数组索引&#xff0c;在数组中找字符串&#xff0c;如果找到&#xff0c;就是>-1,找不到就是-1 Array.indexOf(12345)>-1在vue中是否显示某个button的写法 <button v-if"buttonRight.indexOf(已审批) > -1"></button>...

    2024/5/7 17:55:56
  8. 【YOLOv3】训练新数据集记录

    参考代码&#xff1a;https://github.com/eriklindernoren/PyTorch-YOLOv3 1.训练时loss出现nan 原因&#xff1a; 默认学习率learning_rate0.001过大导致梯度爆炸&#xff0c;出现inf与nan值 解决办法&#xff1a; 在yolov3.cfg中降低学习率&#xff1a; 参考博客&#…...

    2024/4/25 3:05:33
  9. springboot-application.properties官方文档地址

    官方地址&#xff1a; https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/ 搜索Appendices&#xff0c;可以找到配置附录...

    2024/5/7 14:46:16
  10. centos8 安装 SQL Server

    Centos8 安装 SQL Server前言背景参考资料下载 Microsoft SQL Server 2019 Red Hat 存储库配置文件安装SQL Server运行 mssql-conf setup&#xff0c;按照提示设置 SA 密码并选择版本完成配置后&#xff0c;验证服务是否正在运行使用mssm测试连接&#xff0c;小企鹅出现前言 由…...

    2024/4/25 2:35:47
  11. curses库安装

    curses库是可以在linux终端中写出字符用户界面的一个库&#xff0c;现在较新的版本应该是ncurses库&#xff0c;现在已经很少有人再去使用他了&#xff0c;所以想拥有这个库并且在linux下写出自己用户界面的可以参考一下本博客&#xff0c;在网上搜了一下&#xff0c;所有的都是…...

    2024/4/25 2:35:46
  12. dlib格式与opencv中Mat格式转换的问题

    在利用dlib库定位人脸特征点时&#xff0c;需要将opencv读取的Mat格式的图像转化为dlib可以处理的类型&#xff0c;采用下面的方法。 cv::Mat temp;temp cv::imread("原始图片1.jpg");cv_image<bgr_pixel> cimg(temp);当图片路径不存在时&#xff0c;就会报下…...

    2024/4/25 2:35:45
  13. Hastelloy B国内外对应牌号

    合金牌号&#xff1a;Hastelloy B Hastelloy B国内外对应牌号&#xff1a; 合金牌号 GB GB 美国 UNS Hastelloy B NS3201 N10001 Hastelloy B供货规格&#xff1a; 圆钢、棒材、带材、管材、阀座、球体、法兰和锻件协商供应 Hastelloy B化学成分&#xff1a; 合金牌号 …...

    2024/4/25 2:35:45
  14. 《惢客创业日记》2020.10.20-22(周二)月老的烦恼(四)

    今天&#xff0c;又抽时间把搜索版块的演示给规划完了&#xff0c;加之通知的版块暂时还不需要规划&#xff0c;剩下的只有慈善版块了&#xff0c;而慈善版块是一个大版块&#xff0c;一想起来&#xff0c;还真是有一点头疼&#xff0c;只能尽力而为吧。 说完了今天的工作情况…...

    2024/4/25 2:35:43
  15. 1、项目演示

    使用技术&#xff1a;SwingJDBCMySQL 开发工具&#xff1a;ecplisewindowbuilder插件...

    2024/4/25 2:35:42
  16. 大学生想进入IT行业,一定要做好这些准备!

    互联网IT行业的发展前景&#xff0c;已经被公认的向好。很多大学生在毕业后都想加入到IT行业中。机会永远是留给有准备的人的&#xff0c;那么今天小乐就告诉朋友们一下&#xff0c;想进入IT行业&#xff0c;一定要做好这些准备&#xff01; 1、要有很强的自控力&#xff0c;学…...

    2024/4/25 2:35:41
  17. Eclipse jsp tomcat 的环境搭建

    要学习一门语言&#xff0c;首先要做的就是搭建环境&#xff0c;然后能写一个小的Demo(类似Helloworld)&#xff0c;不仅可以建立信心&#xff0c;而且还可以为之后的学习搭建一个验证平台&#xff0c;事半功倍。 net领域的vs&#xff0c;号称是界内最牛的IDE&#xff0c;因为…...

    2024/4/25 3:05:35
  18. Rotation-sensitive regression for oriented scene text detection 论文阅读

    Rotation-sensitive regression for oriented scene text detection 论文阅读Reference正文摘要引言相关工作RRD&#xff0c;旋转敏感回归探测器补充个人总结Reference M. Liao, Z. Zhu, B. Shi, G. Xia and X. Bai, “Rotation-Sensitive Regression for Oriented Scene Text…...

    2024/4/25 3:05:31
  19. JavaScript与递归(尾递归)

    递归是将问题分成基线条件(结束递归条件)和递归条件(继续使用递归条件) 我们来看一个例子&#xff1a; 一个比较著名的例子&#xff0c;就是计算 Fibonacci 数列&#xff0c;又称黄金分割数列、因数学家莱昂纳多斐波那契&#xff08;Leonardoda Fibonacci&#xff09;以兔子繁殖…...

    2024/4/25 3:05:30
  20. ZabbixServer的安装步骤(-)步骤篇

    1centos7.5 系统服务器3台、 一台作为监控服务器&#xff0c; 两台台作为被监控节点&#xff0c; 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信。 1、所有机器关闭防火墙和 selinux [rootyzh.com ~]# setenforce 0 &#xff08;修改配…...

    2024/4/25 3:05:32

最新文章

  1. SSH简介

    概述 SSH&#xff0c;全称为Secure Shell&#xff0c;是一种网络协议&#xff0c;用于计算机之间的加密登录和其他加密网络服务。由Tatu Ylnen在1995年设计&#xff0c;旨在替代telnet、rlogin等不安全的协议&#xff0c;通过在网络中提供一种安全的远程登录方式来保护数据的安…...

    2024/5/8 9:07:15
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. 解析大语言模型训练三阶段

    大语言模型的训练过程一般包括3个阶段&#xff1a;预训练&#xff08;Pre-training&#xff09;、SFT&#xff08;有监督的微调&#xff0c;Supervised-Finetuning&#xff09;以及RLHF&#xff08;基于人类反馈的强化学习&#xff0c;Reinforcement Learning from Human Feedb…...

    2024/5/5 18:48:29
  4. 实景三维在数字乡村建设中的重要作用

    随着科技的飞速发展&#xff0c;数字乡村建设已成为推动乡村振兴、实现农村现代化的重要途径。实景三维技术作为数字乡村建设的重要支撑&#xff0c;正逐渐在各个领域发挥着不可或缺的作用。本文将从实景三维技术在数字乡村中的应用场景、优势及未来展望等方面进行探讨&#xf…...

    2024/5/6 22:36:37
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/7 19:05:20
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/7 22:31:36
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/8 1:37:40
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/7 14:19:30
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/8 1:37:39
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/7 16:57:02
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/7 14:58:59
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/7 1:54:46
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/7 21:15:55
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/8 1:37:35
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/7 16:05:05
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/7 16:04:58
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/8 1:37:32
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/7 16:05:05
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/8 1:37:31
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/8 1:37:31
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/7 11:08:22
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/7 7:26:29
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/8 1:37:29
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/7 17:09:45
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57