大纲

1.zk单机模式是如何启动的

2.zk集群是如何部署和启动的

3.zk集群部署要用什么样配置的机器

4.如何合理设置zk的JVM参数以及内存大小

5.zk配置的核心参数之tickTime、dataDir和dataLogDir

6.影响Leader与Follower组成集群的两个核心参数之initLimit和syncLimit

7.zk什么时候进行数据快照(snapCount = 10000)

8.一台机器上最多能启动多少个zk客户端(maxClientCnxns = 60)

9.一个znode中最多能存储多少数据量(jute.maxbuffer = 1M)

10.运行时的Leader与Follower会通过2888和3888端口进行通信

11.事务日志和数据快照是如何进行定时清理的

12.在2PC阶段写入的事务日志也有丢失的风险

13.Leader相关的两个参数之leaderServers和cnxTimeout

14.zk提供给运维使用的命令说明

1.zk单机模式是如何启动的

下面先通过bin/zkServer.sh脚本来启动单机模式的zk,然后再通过bin/zkCli.sh脚本 + 2181端口连接到zk。

$ cd zookeeper
$ sudo bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /Users/demo/Documents/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED $ ps -ef |grep java
$ sudo bin/zkCli.sh
/usr/bin/java
Connecting to localhost:2181
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]

2.zk集群是如何部署和启动的

要部署zk集群,可以准备三台机器,每台机器上部署一个zk进程。每台机器上的zk配置文件添加如下内容,让每个节点感知集群中有几台机器。

server.1=zookeeper01:2888:3888
server.2=zookeeper02:2888:3888
server.3=zookeeper03:2888:3888

zk集群的每个节点都有一个ID编号,需要在指定的dataDir目录下创建一个myid文件,把该zk节点的ID编号写在里面。

zk的端口号分为2888和3888。其中3888是用来进行Leader选举的,2888是用来进行数据同步的。

3.zk集群部署要用什么样配置的机器

zk属于基础架构类的中间件系统,一般部署的机器比较少(通常3-5台),但不建议用太普通的配置。部署zk、Kafka、Hbase、HDFS等的机器,所需要的配置都是比较高的。

4核8G的机器,每秒可以抗1000并发。

8核16G的机器,每秒可以抗几千并发。

16核32G的机器,每秒可以抗上万或几万并发。

一般采用3台机器(8核16G/16核32G + SSD固态硬盘)来部署一个zk集群,三台这种机器的小集群每秒可以抗十几万的并发。

比如3台16核32G的机器:1个Leader + 2个Follower。其中,Leader主要负责写,每秒可以抗几万写并发。Follower负责读,每秒可以抗5万~10万读并发。

虽然写QPS无法线性的扩展,但读QPS可通过Observer节点来扩展。设置Observer节点很简单,只需修改配置强制要求其角色是Observer,不能是Leader或Follower即可。

4.如何合理设置zk的JVM参数及内存大小

zk本身是用Java写的,是基于JVM虚拟机来运行的。启动zk就是启动一个JVM进程,JVM进程里面会执行zk的全部代码,所以需要合理设置JVM的三大参数。

一.首先分配各块内存区域的大小

包括堆内存、栈内存、Metaspace区域的内存,根据机器内存去设置。比如机器有16G的内存,堆内存可分配10G,栈内存可分配每个线程的栈1MB,Metaspace区域可以分配512MB。

二.然后设置垃圾回收器

通常Java应用的新生代 + 老年代的垃圾回收器会设置为ParNew + CMS,但大内存机器不建议使用这个组合,建议使用G1垃圾回收器。

三.JVM启动前要加入一些参数

比如GC日志要写入哪个目录中,发生OOM时要自动dump内存快照出来放哪个目录去。

当这三大JVM参数都合理设置好之后,就可以启动zk并开始使用了。在各种情况下以及一些运气高峰期,还要使用jstat观察一下zk的JVM情况:包括新生代的对象增长速率 + YGC的频率 + 老年代增长速率 + FGC的频率。如果GC有问题,就要进行GC调优,合理优化JVM参数。如果有监控系统,需要对zk运行时的JVM的情况进行监控。

5.zk配置的核心参数之tickTime、dataDir和dataLogDir

正式启动zk之前,还需要配置zk的一些参数:

$ cat conf/zoo.cfg

(1)tickTime

tickTime的默认值是2000ms,表示zk里的最小时间单位。其他的一些参数就会以这个tickTime为基准来进行设置,比如有的参数就是tickTime * 2。

(2)dataDir

用来存放zk里的数据快照。zk里会存储很多数据,在磁盘里会有一份内存数据的快照,这样zk停机重启后才能恢复之前的数据。

(3)dataLogDir

写数据时有2PC机制,首先会写Proposal提议,也就是事务日志。每台机器会将事务日志写入到本地磁盘。所以如果使用SSD固态硬盘,可以提升写性能。

6.影响Leader与Follower组成集群的两个核心参数之initLimit和syncLimit

(1)initLimit

initLimit的默认值是10,意思是10 * tickTime,即20s。表示Leader在启动后会等待Follower跟自己建立连接,最长等待时间是20s。所以在20s内Follower必须要跟Leader建立连接,否则Leader就不等Follower,直接进入消息广播模式,对外提供服务了。如果zk里存储的数据量比较大,Follower恢复数据需要的时间比较长,此时就可调大该参数。

(2)syncLimit

syncLimit的默认值是5,意思是5 * tickTime,即10s。Leader会向Follower发起心跳检测,如果超过10s没有心跳响应,Leader就会把这个Follower给踢除出去。

7.zk什么时候进行数据快照(snapCount = 10000)

zk里的数据分成两份:一份是磁盘上的事务日志(dataLogDir),一份是内存里的数据。

理论上两份数据是一致的。即使Follower宕机,也只丢失内存里的数据,磁盘上的事务日志是存在的。即使Follower没收到事务日志就宕机,也可以重启后找Leader同步数据。

比如zk在磁盘里有一份事务日志,它启动后应该如何重建内存里的数据?难道把事务日志进行回放?重新执行每条事务日志到内存里去吗?

所以zk会有一个数据快照机制,每次执行一定数量的事务后,就会把内存里的数据存储到dataDir目录中,作为zk当前的一个数据快照。

比如现在事务日志里有1000个事务,已经把1000个事务对应的内存数据写入到dataDir里作为一个数据快照了。此后继续写数据写到事务日志里有1032个事务时,zk进行重启。zk重启时就可以把包含1000个事务的快照直接加载到内存里,然后把1000之后的32个事务,在内存里回放一遍,即可恢复重启前的数据。

对应的参数是snapCount,默认是10万个事务存储一次快照。表示的是如果没到10万条事务zk就重启了,那么此时是没有数据快照的,也就是10万条事务以内不需要快照。

8.一台机器上最多能启动多少个zk客户端(maxClientCnxns = 60)

一台机器可以创建多少个zk客户端,可以跟zk服务端建立多少个连接?这是有限制的,默认最多60个,也就是zk服务端最多只允许一台机器和它建立60个连接,但可通过maxClientCnxns参数来设置。

如果开发时不注意没有使用单例模式,每次请求都创建一个zk客户端建立连接进行通信,然后再销毁zk客户端。当多个并发请求一起连接zk时,就会导致一台机器上有很多zk客户端,可能最终导致这台机器发出的zk请求被zk服务端拒绝。

9.一个znode中最多能存储多少数据量(jute.maxbuffer = 1M)

一个znode中最多能存储的数据量由参数jute.maxbuffer设定,默认是1M。对应的数值是1048575,单位bytes,换算成M就是1M。一般建议不要在一个znode中存储过多数据量,几百个字节~几百K即可。

10.运行时的Leader与Follower会通过2888和3888端口进行通信

3888端口,用于在集群恢复模式时进行Leader选举投票。2888端口,用于在Leader和Follower之间进行数据同步和运行时通信。

11.事务日志和数据快照是如何进行定时清理的

zk在不停的运行,事务日志会越来越多,但不可能是无限多的,所以zk会切割出多个事务日志文件。每次执行一次数据快照时,都会有一个独立的数据快照文件。最后zk的磁盘上会存在多个事务日志文件,多个数据快照文件。

默认是没有开启定时清理数据文件的功能,所以应该按如下配置进行开启。这样每隔1小时会让zk在后台自动清理多余的事务日志文件和数据快照文件,而且最多保存3个文件。

autopurge.purgeInterval=1
autopurge.snapRetainCount=3

12.在2PC阶段写入的事务日志也有丢失的风险

事务进行Commit提交时,有没有日志丢失的风险?是有的。在2PC的第一个阶段,Proposal提议时各机器会把事务日志写入磁盘时,一般会写入OS Cache。在2PC的第二个阶段,Commit提交时才会强制把写的事务日志fsync到磁盘上。

因此,参数"forceSync: yes"指的就是:在Commit提交时,会强制把OS Cache中的事务日志fsync到磁盘上去。

在Commit提交时,最好将OS Cache中的事务日志fsync到磁盘上。否则如果机器挂了,那么就有可能丢失OS Cache里还没刷入磁盘的事务日志数据。

虽然zk在处理写请求时,会涉及到多台机器往磁盘写事务日志。但是由于写事务日志是顺序写磁盘,这与随机写内存的性能差不多,所以性能也很高。而且写事务日志一开始就是往OS Cache里写的,所以性能就可以更高了。

13.Leader相关的两个参数之leaderServers和cnxTimeout

(1)参数leaderServers,默认值是yes

表示Leader是否接收客户端的连接,所有写请求由Follower转发给Leader,Leader只接收Follower转发的写请求。

(2)参数cnxTimeout,默认5000

在进行Leader选举时,各个机器会基于3888端口建立TCP长连接,在这个过程中建立TCP连接的超时时间默认是5000毫秒。

一般来说,在启动zk集群之前,首先需要在zoo.cfg配置文件里设置好参数,比如设置zk集群server.1、server.2的信息,设置dataDir、dataLogDir的目录,开启自动清理数据文件等。然后再使用zkServer.sh命令,分别启动Leader和Follower等多个节点。

14.zk提供给运维使用的命令说明

(1)服务端常用命令

(2)客户端常用命令

(3)ACL命令常用命令

(4)常用四字命令

(5)zk日志可视化

(1)服务端常用命令

在准备好相应的配置之后,可以直接通过zkServer.sh这个脚本进行服务的相关操作:

启动zk服务:         sh bin/zkServer.sh start
查看zk服务状态: sh bin/zkServer.sh status
停止zk服务: sh bin/zkServer.sh stop
重启zk服务: sh bin/zkServer.sh restart

(2)客户端常用命令

可以使用zkCli.sh -server 127.0.0.1:2181尝试连接到zk服务。连接成功后,系统会输出zk的相关环境以及配置信息。

命令行工具的一些简单操作如下:

一.显示根目录下文件: ls /
使用ls命令来查看当前zk中所包含的内容; 二.显示根目录下文件: ls2 /
查看当前节点数据并能看到更新次数等数据; 三.创建文件并设置初始内容:create /zk "test"
创建一个新的znode节点"zk"以及与它关联的字符串;
[-e] [-s] (-e 临时节点)(-s 顺序节点) 四.获取文件内容: get /zk
确认ZNode是否包含我们所创建的字符串,[watch](watch监听); 五.修改文件内容:set /zk "zkbak"
对zk所关联的字符串进行设置; 六.删除文件: delete /zk
将刚才创建的ZNode删除,如果存在子节点删除失败; 七.递归删除:rmr或者deleteall /zk
将刚才创建的ZNode删除,子节点同时删除; 八.退出客户端: quit;帮助命令: help

不能创建同名的节点:

[zk: 127.0.0.1:2181(CONNECTED) 0] create /node1 value
Created /node1
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /
[aaa, node1, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 2] create /node1 value
Node already exists: /node1

创建临时节点使用-e:

[zk: 127.0.0.1:2181(CONNECTED) 5] create -e /node3 value
Created /node3
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[aaa, node1, node2, node3, zookeeper]

创建完临时节点node3后退出客户端与服务端连接,然后客户端重新再连接服务端,再执行ls查看,发现node3已经不见了。

[zk: 127.0.0.1:2181(CONNECTED) 8] quit
$ ./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[aaa, node1, node2, zookeeper]

不管是持久节点还是临时节点,一旦创建完一个节点后,再重复创建同名节点都是不成功的。

[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[aaa, node1, node2, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 1] create /seqnode abc
Created /seqnode
[zk: 127.0.0.1:2181(CONNECTED) 2] create /seqnode abc
Node already exists: /seqnode [zk: 127.0.0.1:2181(CONNECTED) 3] create -e /nodee aaa
Created /nodee
[zk: 127.0.0.1:2181(CONNECTED) 4] create -e /nodee aaa
Node already exists: /nodee

创建顺序节点使用-s,可以重复创建"同名"的顺序节点(命令行看起来同名而已,但实际不是同名的)。

[zk: 127.0.0.1:2181(CONNECTED) 6] create -e -s /nodes aaa
Created /nodes0000000007
[zk: 127.0.0.1:2181(CONNECTED) 7] create -e -s /nodes aaa
Created /nodes0000000008

修改节点内容使用set命令:

[zk: 127.0.0.1:2181(CONNECTED) 9] get /aaa
ccc
[zk: 127.0.0.1:2181(CONNECTED) 10] stat /aaa
cZxid = 0x2
ctime = Wed Feb 09 16:01:50 CST 2022
mZxid = 0x5
mtime = Wed Feb 09 16:03:01 CST 2022
pZxid = 0x8
cversion = 2
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 2
[zk: 127.0.0.1:2181(CONNECTED) 11] set /aaa ccc
[zk: 127.0.0.1:2181(CONNECTED) 12] get /aaa
ccc
[zk: 127.0.0.1:2181(CONNECTED) 13] stat /aaa
cZxid = 0x2
ctime = Wed Feb 09 16:01:50 CST 2022
mZxid = 0x17
mtime = Wed Feb 09 16:53:46 CST 2022
pZxid = 0x8
cversion = 2
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 2

删除节点使用delete(不能删有子节点的)或者deleteall(可以进行递归删除):

[zk: 127.0.0.1:2181(CONNECTED) 21] delete /aaa
Node not empty: /aaa
[zk: 127.0.0.1:2181(CONNECTED) 22] ls /aaa
[aaa_1, aaa_2]
[zk: 127.0.0.1:2181(CONNECTED) 23] delete /aaa/aaa_1
[zk: 127.0.0.1:2181(CONNECTED) 24] ls /aaa
[aaa_2]
[zk: 127.0.0.1:2181(CONNECTED) 25] delete /aaa
Node not empty: /aaa
[zk: 127.0.0.1:2181(CONNECTED) 26] rmr /aaa
The command 'rmr' has been deprecated. Please use 'deleteall' instead.

(3)ACL命令常用命令

zk的ACL分三个维度:scheme、id、permission,通常表示为:scheme:id:permission。其中schema代表授权策略,id代表用户,permission代表权限。

[zk: 127.0.0.1:2181(CONNECTED) 1] getAcl /seqnode
'world,'anyone
: cdrwa

一.Scheme(授权策略)

world:默认方式,相当于全世界都能访问;
auth:代表已经认证通过的用户,这里的密码是明文;
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的;
ip:使用IP地址认证;

二.id(用户)

id是验证模式,不同的scheme,id的值也不一样;

scheme为auth时:id为username:password,这里的密码是明文
scheme为digest时:id为username:BASE64(SHA1(password))
scheme为ip时:id为客户端的ip地址
scheme为world时:id为anyone

三.Permission(权限)

CREATE、READ、WRITE、DELETE、ADMIN,也就是增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)。

CREATE(c):创建子节点的权限;
DELETE(d):删除节点的权限;
READ(r):读取节点数据的权限;
WRITE(w):修改节点数据的权限;
ADMIN(a):设置子节点权限的权限;

四.ACL命令

命令1:getAcl

获取指定节点的ACL信息:

create /testDir/testAcl deer  # 创建一个子节点
getAcl /testDir/testAcl # 获取该节点的acl权限信息
[zk: 127.0.0.1:2181(CONNECTED) 1] create /testDir testDir
Created /testDir
[zk: 127.0.0.1:2181(CONNECTED) 2] create /testDir/testAcl deer
Created /testDir/testAcl
[zk: 127.0.0.1:2181(CONNECTED) 3] getAcl /testDir/testAcl
'world,'anyone
: cdrwa

命令2:setAcl

设置指定节点的ACL信息:

setAcl /testDir/testAcl world:anyone:crwa   # 设置该节点的acl权限
getAcl /testDir/testAcl # 获取该节点的acl权限信息,成功后,该节点就少了d权限
create /testDir/testAcl/xyz xyz-data # 创建子节点
delete /testDir/testAcl/xyz # 由于没有d权限,所以提示无法删除 [zk: 127.0.0.1:2181(CONNECTED) 3] getAcl /testDir/testAcl
'world,'anyone
: cdrwa
[zk: 127.0.0.1:2181(CONNECTED) 4] setAcl /testDir/testAcl world:anyone:crwa
[zk: 127.0.0.1:2181(CONNECTED) 5] getAcl /testDir/testAcl
'world,'anyone
: crwa
[zk: 127.0.0.1:2181(CONNECTED) 6] create /testDir/testAcl/xyz xyz-data
Created /testDir/testAcl/xyz
[zk: 127.0.0.1:2181(CONNECTED) 7] delete /testDir/testAcl/xyz
Authentication is not valid : /testDir/testAcl/xyz

命令3:addauth

注册会话授权信息。如果给ZNode设置权限了,后面退出客户端,则重新登录时需再次注册授权才能有ZNode权限。

//Scheme的auth
addauth digest user1:123456 # 需要先添加一个用户
setAcl /testDir/testAcl auth:user1:123456:crwa # 然后才可以拿着这个用户去设置权限
getAcl /testDir/testAcl # 密码是以密文的形式存储的
create /testDir/testAcl/testa aaa
delete /testDir/testAcl/testa # 由于没有d权限,所以提示无法删除 [zk: 127.0.0.1:2181(CONNECTED) 8] addauth digest user1:123456
[zk: 127.0.0.1:2181(CONNECTED) 9] setAcl /testDir/testAcl auth:user1:123456:crwa
[zk: 127.0.0.1:2181(CONNECTED) 10] getAcl /testDir/testAcl
'digest,'user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=
: crwa
[zk: 127.0.0.1:2181(CONNECTED) 11] create /testDir/testAcl/testa aaa
Created /testDir/testAcl/testa
[zk: 127.0.0.1:2181(CONNECTED) 12] delete /testDir/testAcl/testa
Authentication is not valid : /testDir/testAcl/testa

退出客户端后:

ls /testDir/testAcl  #没有权限无法访问
create /testDir/testAcl/testb bbb #没有权限无法访问
addauth digest user1:123456 # 重新新增权限后可以访问了,相当于给当前用户增加了一个user1而且密码是123456 [zk: 127.0.0.1:2181(CONNECTED) 13] quit
$ ./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 0]
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /testDir/testAcl
Authentication is not valid : /testDir/testAcl
[zk: 127.0.0.1:2181(CONNECTED) 1] create /testDir/testAcl/testb bbb
Authentication is not valid : /testDir/testAcl/testb
[zk: 127.0.0.1:2181(CONNECTED) 2] addauth digest user1:123456
[zk: 127.0.0.1:2181(CONNECTED) 3] ls /testDir/testAcl
[testa, xyz]
[zk: 127.0.0.1:2181(CONNECTED) 4] create /testDir/testAcl/testb bbb
Created /testDir/testAcl/testb

auth与digest的区别就是:前者使用明文密码进行登录,后者使用密文密码进行登录。

create /testDir/testDigest  data
addauth digest user1:123456 # 增加用户
setAcl /testDir/testDigest digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa # 使用digest来设置权限
setAcl /testDir/testAcl auth:user1:123456:crwa # 使用auth来设置权限

注意:这里如果使用明文,会导致该znode不可访问。通过明文获得密文:使用zk的类DigestAuthenticationProvider。

$ java -Djava.ext.dirs=/Users/demo/Documents/apache-zookeeper-3.5.9-bin/lib -cp /Users/juntaowong/Documents/apache-zookeeper-3.5.9-bin/lib/zookeeper-3.5.9.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456
deer:123456->deer:UwPiSoSNChqcQfSgAat6bc3IzwQ=

命令4:ACL命令行ip

create  /testDir/testIp data
setAcl /testDir/testIp ip:192.168.30.10:cdrwa
getAcl /testDir/testIp

命令5:ACL启用super权限

setAcl权限时只设置了r权限,导致节点无法删除:

create /enjoy1/node1  enjoy
setAcl /enjoy1 world:anyone:r

这时无论是delete还是rmr都没有权限删除,解决方式就是启用super权限:

步骤1:使用DigestAuthenticationProvider.generateDigest("super:admin"); 获得密码
步骤2:修改zkServer启动脚本增加:"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="
步骤3:启动客户端用管理员登陆:addauth digest super:admin

(4)常用四字命令

zk支持某些特定的四字命令字母结合nc与其的交互,这样可以用来获取zk服务的当前状态及相关信息,也就是通过telnet或nc向zk提交相应的命令。

echo stat | nc 127.0.0.1 2181,来查看哪个节点被选择作为follower或者leader;
echo ruok | nc 127.0.0.1 2181,测试是否启动了该Server,若回复imok表示已经启动;
echo dump | nc 127.0.0.1 2181,列出未经处理的会话和临时节点;
echo kill | nc 127.0.0.1 2181,关掉server;
echo conf | nc 127.0.0.1 2181,输出相关服务配置的详细信息;
echo cons | nc 127.0.0.1 2181,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息;
echo envi | nc 127.0.0.1 2181,输出关于服务环境的详细信息(区别于conf命令);
echo reqs | nc 127.0.0.1 2181,列出未经处理的请求;
echo wchs | nc 127.0.0.1 2181,列出服务器watch的详细信息;
echo wchc | nc 127.0.0.1 2181,通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表;
echo wchp | nc 127.0.0.1 2181,通过路径列出服务器watch的详细信息,它输出一个与session相关的路径;

(5)zk日志可视化

zk有两个非常重要的配置:一个是dataDir,里面存放的是快照数据。一个是dataLogDir,里面存放的是事务日志数据。可以通过以下方式使用zk的类LogFormatter来查看日志、使用zk的类SnapshotFormatter来查看快照:

$ java -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar:/soft/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter log.1
$ java -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar:/soft/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter log.1

zk基础—3.集群与核心参数的更多相关文章

  1. Hadoop基础-HDFS集群中大数据开发常用的命令总结

    Hadoop基础-HDFS集群中大数据开发常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本盘博客仅仅列出了我们在实际生成环境中常用的hdfs命令,如果想要了解更多, ...

  2. KingbaseES R6 集群repmgr.conf参数'recovery'测试案例(一)

    KingbaseES R6集群repmgr.conf参数'recovery'测试案例(一) 案例说明: 在KingbaseES R6集群中,主库节点出现宕机(如重启或关机),会产生主备切换,但是当主库 ...

  3. Kubernetes集群部署核心步骤

    目录 前言 一.所有节点安装docker 二.所有节点安装kubeadm 三.安装master节点 四.部署网络插件 五.安装node节点 六.运行一个demo 前言 这里使用环境:Ubuntu 18 ...

  4. Kafka_2.12-2.5.1集群搭建与参数调优

    Kafka是目前业界使用最广泛的消息队列.数据流转常见这样的业务场景,客户端把采集到的日志推送给Kafka,业务方可以消费Kafka的数据落地HDFS,用于离线分析,也可以使用Spark或Flink消 ...

  5. [spark]-Spark2.x集群搭建与参数详解

    在前面的Spark发展历程和基本概念中介绍了Spark的一些基本概念,熟悉了这些基本概念对于集群的搭建是很有必要的.我们可以了解到每个参数配置的作用是什么.这里将详细介绍Spark集群搭建以及xml参 ...

  6. Galera集群server.cnf参数调整--前言

    文档安排: 前言部分会简述下galera集群,正文中会针对我们线上的环境,在不断业务的情况下,进行参数调整的话,有些参数不能够进行配置,会以#***的形式写入配置文件中,文档也会进行进一步说明. 如果 ...

  7. ELK 之一:ElasticSearch 基础和集群搭建

    一:需求及基础: 场景: 1.开发人员不能登录线上服务器查看详细日志 2.各个系统都有日志,日志数据分散难以查找 3.日志数据量大,查询速度慢,或者数据不够实时 4.一个调用会涉及到多个系统,难以在这 ...

  8. Redis非关系型缓存数据库集群部署、参数、命令工具

    <关系型数据库与非关系型数据库> 关系数据库:mysql.oracle.DB2.SQL Server非关系数据库:Redis(缓存数据库).MongodDB(处理海量数据).Memcach ...

  9. KingbaseES R6 集群repmgr.conf参数'recovery'测试案例(二)

    案例二:测试'recovery = automatic' 1.查看集群节点状态信息: [kingbase@node1 bin]$ ./repmgr cluster show ID | Name | R ...

  10. springboot基础-redis集群

    一.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

随机推荐

  1. nginx中的正则表达式,location路径匹配规则和优先级

    前言,我这里验证的nginx-v1.23.2单机环境下的nginx中的正则表达式.location路径匹配规则和优先级. 先准备好环境,基础配置是这样 nginx/conf/conf.d/host.c ...

  2. HTTPS 证书自动化运维:基础知识与重要性

    简介: 随着互联网的飞速发展和网络安全威胁的日益增多,HTTPS(HyperText Transfer Protocol Secure)已经成为保护网站和用户数据安全的标准协议.HTTPS 证书的管理 ...

  3. 天翼云VPC支持专线健康检查介绍

    本文分享自天翼云开发者社区<天翼云VPC支持专线健康检查介绍>,作者:汪****波 天翼云支持本地数据中心IDC(Internet Data Center)通过冗余专线连接到天翼云云上专有 ...

  4. vue-element-template去除登录

    一.修改src目录下的permission.js文件 1.注释 //if (hasToken) { // if (to.path === '/login') { // // if is logged ...

  5. windows配置maven

    1.下载mavenhttps://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/ 中找到相应的版本2.解压3.配置环境变量MAVEN_HOMED: ...

  6. FreeSql学习笔记——8.数据返回类型

    前言   FreeSql数据返回格式比较丰富,包括单条.列表.导航属性数据.指定字段.Dto等:可以有效的减少代码量,减少字段复制等操作:   前面的查询已经用到了日常基本需要用到的数据格式,本篇是常 ...

  7. DeepSeek+AnythingLLM,搭建本地AI知识库,真的太香了!三分钟搞定智能助手,小白也能轻松上手!

    1. 痛点暴击:你的知识管理还在原始时代吗? 你是否每次查找文档翻遍文件夹,会议纪要总在关键时刻"失踪"? 别慌!今天揭秘一个"真香"组合--DeepSeek+ ...

  8. 技术前瞻: ECMAScript 2025 已定稿特性解析:让 JavaScript 更优雅

    作为全球应用最广泛的编程语言之一,JavaScript 每年都在通过 ECMAScript 标准持续进化.2025 年,ECMAScript 再次带来多项重磅更新,本文将带你深入解读已正式定稿的核心特 ...

  9. 从龟速乘到 $Miller-Rabin$ 算法(数论算法总结)

    发现自己竟然菜到不太会龟速乘,所以把 \(Miller-Rabin\) 算法所需要用到的算法全学了一遍-- 龟速乘 龟速乘是一种 \(O(\log n)\) 的乘法计算方法. 考虑有时普通乘法取模会爆 ...

  10. Python中requests库的安装

    这篇博客指导读者如何通过管理员权限的CMD命令行,进入Python主目录并使用pip安装requests库.在PyCharm中,如果IDE未检测到requests,用户需要在此安装,或者考虑更新Pyt ...