【Linux】Zookeeper 部署
Zookeeper 搭建方式
- 单机模式:Zookeeper只运行在一台服务器上,适合测试环境
- 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例;
- 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)
1、单机模式
1.1 安装
# 获取安装包
# 若服务器不能联网,则手动下载上传,官网:https://zookeeper.apache.org/releases.html
[root@S-CentOS app]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz# 解压
[root@S-CentOS app]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /app/# 重命名
[root@S-CentOS app]# mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7# 创建目录
[root@S-CentOS app]# cd zookeeper-3.5.7
[root@S-CentOS zookeeper-3.5.7]# mkdir -p data logs# 修改配置
[root@S-CentOS zookeeper-3.5.7]# cd conf
[root@S-CentOS conf]# cp zoo_sample.cfg zoo.cfg
[root@S-CentOS conf]# vim zoo.cfg
zoo.cfg
dataDir=/app/zookeeper-3.5.7/data
dataLogDir=/app/zookeeper-3.5.7/logs
虽然是可选的,最好还是把 data ⽬录移出 /tmp ⽬录,以防⽌ ZooKeeper 填满了根分区(root partition)
1.2 启动 ZK 服务器
# 启动ZK
[root@S-CentOS zookeeper-3.5.7]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /app/zookeeper-3.5.7/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED# 查看ZK进程
[root@S-CentOS zookeeper-3.5.7]# jps -l
143856 org.apache.zookeeper.server.quorum.QuorumPeerMain
143900 sun.tools.jps.Jps# 查看ZK状态
[root@S-CentOS zookeeper-3.5.7]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /app/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone# 停止ZK
[root@S-CentOS zookeeper-3.5.7]# bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /app/zookeeper-3.5.7/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
如果在前台中运⾏以便查看服务器的输出:
[root@S-CentOS zookeeper-3.5.7]# bin/zkServer.sh start-foreground
如果 ZK 启动失败:
[root@S-CentOS zookeeper-3.5.7]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /app/zookeeper-3.5.7/bin/../conf/zoo.cfg
Starting zookeeper ... FAILED TO START
查看日志:
[root@S-CentOS zookeeper-3.5.7]# tail -f logs/zookeeper-root-server-rlkj-gw-ecsb-04.out
2022-02-10 18:59:55,422 [myid:] - INFO [main:QuorumPeerConfig@135] - Reading configuration from: /app/zookeeper-3.5.7/bin/../conf/zoo.cfg
2022-02-10 18:59:55,624 [myid:] - ERROR [main:ZooKeeperServerMain@79] - Unable to start AdminServer, exiting abnormally
org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commandsat org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:107)at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:138)at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:346)at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:307)at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:231)at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)at org.eclipse.jetty.server.Server.doStart(Server.java:385)at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:103)... 5 more
Caused by: java.net.BindException: Address already in useat sun.nio.ch.Net.bind0(Native Method)at sun.nio.ch.Net.bind(Net.java:438)at sun.nio.ch.Net.bind(Net.java:430)at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:225)at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342)... 12 more
Unable to start AdminServer, exiting abnormally
分析:在3.5.5版本及以上,Zookeeper 提供了一个内嵌的Jetty容器来运行 AdminServer,默认占用的是 8080端口,AdminServer 主要是来查看 Zookeeper 的一些状态,如果机器上有其他程序(比如:Tomcat)占用了 8080 端口,也会导致 Starting zookeeper … FAILED TO START 的问题。
解决方案:
① 修改zoo.cfg,禁用adminServer
admin.enableServer=false
② 修改zoo.cfg,修改端口号
admin.serverPort=9090
1.3 Zookeeper 客户端
# 启动客户端
[root@S-CentOS zookeeper-3.5.7]# bin/zkCli.sh
Connecting to localhost:2181
2022-04-01 14:03:02,279 [myid:] - INFO [main:Environment@109] - Client environment:zookeeper.version=3.5.7-...
2022-04-01 14:03:02,282 [myid:] - INFO [main:Environment@109] - Client environment:host.name=rlkj-gw-ecsb-04
2022-04-01 14:03:02,282 [myid:] - INFO [main:Environment@109] - Client environment:java.version=1.8.0_91
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:java.vendor=Oracle Corporation
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:java.home=/app/jdk1.8.0_91/jre
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:java.class.path=/app/zookeeper...
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:java.library.path=/usr/...
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:java.io.tmpdir=/tmp
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:java.compiler=<NA>
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:os.name=Linux
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:os.arch=amd64
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:os.version=4.4.186-1.el7.elrepo.x86_64
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:user.name=appuser
2022-04-01 14:03:02,284 [myid:] - INFO [main:Environment@109] - Client environment:user.home=/home/appuser
2022-04-01 14:03:02,285 [myid:] - INFO [main:Environment@109] - Client environment:user.dir=/app/zookeeper-3.5.7
2022-04-01 14:03:02,285 [myid:] - INFO [main:Environment@109] - Client environment:os.memory.free=235MB
2022-04-01 14:03:02,286 [myid:] - INFO [main:Environment@109] - Client environment:os.memory.max=241MB
2022-04-01 14:03:02,286 [myid:] - INFO [main:Environment@109] - Client environment:os.memory.total=241MB
2022-04-01 14:03:02,289 [myid:] - INFO [main:ZooKeeper@868] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@3f8f9dd6
2022-04-01 14:03:02,294 [myid:] - INFO [main:X509Util@79] - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2022-04-01 14:03:02,300 [myid:] - INFO [main:ClientCnxnSocket@237] - jute.maxbuffer value is 4194304 Bytes
2022-04-01 14:03:02,308 [myid:] - INFO [main:ClientCnxn@1653] - zookeeper.request.timeout value is 0. feature enabled=
Welcome to ZooKeeper!
2022-04-01 14:03:02,314 [myid:localhost:2181] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1112] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2022-04-01 14:03:02,365 [myid:localhost:2181] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@959] - Socket connection established, initiating session, client: /127.0.0.1:48086, server: localhost/127.0.0.1:2181
[zk: localhost:2181(CONNECTING) 0] 2022-04-01 14:03:02,412 [myid:localhost:2181] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1394] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x104616124490000, negotiated timeout = 30000WATCHER::WatchedEvent state:SyncConnected type:None path:null# 退出客户端
[zk: localhost:2181(CONNECTED) 5] quit
WATCHER::
WatchedEvent state:Closed type:None path:null
2022-04-01 14:43:43,222 [myid:] - INFO [main:ZooKeeper@1422] - Session: 0x104616124490000 closed
2022-04-01 14:43:43,222 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@524] - EventThread shut down for session: 0x104616124490000
(1)日志消息:
[main:Environment@109]:告诉我们各种各样的环境变量的配置以及客户端使⽤了什么JAR包。
[main:ZooKeeper@868] - Initiating client connection:消息本⾝说明到底发⽣了什么,⽽额外的重要细节说明了客户端尝试连接到客户端发送的连接串localhost/127.0.0.1:2181中的⼀个服务器
[myid:localhost:2181] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1394]:确认信息,说明客户端与本地的ZooKeeper服务器建⽴了TCP连接。后⾯的⽇志信息确认了会话的建⽴,并告诉我们会话ID为:0x104616124490000。最后客户端库通过SyncConncted事件通知了应⽤。应⽤需要实现Watcher对象来处理这个事件。
(2)创建一个会话流程:
① 客户端启动程序来建立⼀个会话。
② 客户端尝试连接到localhost/127.0.0.1:2181。
③ 客户端连接成功,服务器开始初始化这个新会话。
④ 会话初始化成功完成。
⑤ 服务器向客户端发送⼀个SyncConnected事件。
1.4 ZK节点
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
此刻znode树为空,除了节点/zookeeper之外,该节点内标记了ZooKeeper服务所需的元数据树。
(1)创建节点
[zk: localhost:2181(CONNECTED) 1] create /workers ""
Created /workers
[zk: localhost:2181(CONNECTED) 2] ls /
[workers, zookeeper]
(2)删除节点
[zk: localhost:2181(CONNECTED) 3] delete /workers
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper]
2、伪集群模式
2.1 创建三个server的数据目录和日志目录
以zoo1为例,其余两个服务重复操作。
[root@S-CentOS zookeeper-3.5.7]# mkdir -p pseudo/zoo1
[root@S-CentOS zookeeper-3.5.7]# cd pseudo/zoo1
[root@S-CentOS zoo1]# mkdir data logs conf
2.2 配置服务器编号
其他服务分别输入2、3…
[root@S-CentOS zoo1]# cd data
[root@S-CentOS data]# echo 1 > myid
2.3 修改配置文件
[root@S-CentOS zookeeper-3.5.7]# cp conf/zoo_sample.cfg ../conf/zoo1.cfg
[root@S-CentOS data]# vim ../conf/zoo1.cfg
zoo1.cfg
dataDir=/app/zookeeper-3.5.7/pseudo/zoo1/data
dataLogDir=/app/zookeeper-3.5.7/pseudo/zoo1/logs
clientPort=2181
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
注意:server.1=localhost:2881:3881
之后不能有空格,否则会报错
配置参数解读
server.A=B:C:D。
A 是一个数字,表示这个是第几号服务器;
集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据,就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较,从而判断到底是哪个 server。
B :是这个服务器的地址或主机名;
C :TCP端口,用于仲裁通信,即这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
D :TCP端口,用于群首选举,即是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口
2.4 启动zookeeper实例
启动第一个服务器节点:
[root@S-CentOS data]# cd /app/zookeeper-3.5.7/bin
[root@S-CentOS bin]# ./zkServer.sh start /app/zookeeper-3.5.7/pseudo/zoo1/conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /app/zookeeper-3.5.7/pseudo/zoo1/conf/zoo1.cfg
Starting zookeeper ... STARTED
查看服务器日志记录:
… [myid:1] - INFO [QuorumPeer[myid=1]/…:2181:QuorumPeer@670] - LOOKING … [myid:1] - INFO [QuorumPeer[myid=1]/…:2181:FastLeaderElection@740] -
New election. My id = 1, proposed zxid=0x0 … [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@542] - Notification: 1 …, LOOKING (my state) … [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@368] - Cannot open channel to 2 at election address /127.0.0.1:3334 Java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
这个服务器疯狂地尝试连接到其他服务器,然后失败,如果我们启动另⼀个服务器
[root@S-CentOS bin]# ./zkServer.sh start /app/zookeeper-3.5.7/pseudo/zoo1/conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /app/zookeeper-3.5.7/pseudo/zoo2/conf/zoo2.cfg
Client port found: 2182. Client address: localhost.
Mode: leader
此时构成仲裁的法定⼈数,第⼆个服务器的⽇志记录zookeeper.out:
… [myid:2] - INFO [QuorumPeer[myid=2]/…:2182:Leader@345] - LEADING - LEADER ELECTION TOOK - 279 … [myid:2] - INFO [QuorumPeer[myid=2]/…:2182:FileTxnSnapLog@240] - Snapshotting: 0x0 to ./data/version-2/snapshot.0
该⽇志指出服务器2已经被选举为群⾸。
此时服务器1的⽇志:
… [myid:1] - INFO [QuorumPeer[myid=1]/…:2181:QuorumPeer@738] - FOLLOWING … [myid:1] - INFO [QuorumPeer[myid=1]/…:2181:ZooKeeperServer@162] - Created server … … [myid:1] - INFO [QuorumPeer[myid=1]/…:2181:Follower@63] - FOLLOWING - LEADER ELECTION TOOK - 212
服务器1 作为服务器2 的追随者被激活。
此时具有了符合法定仲裁 (三分之⼆)的可⽤服务器,在此刻服务开始可⽤。
我们现在需要配置客户端来连接到服务上,连接字符串需要列出所有组成服务的服务器host:port对。
对于这个例⼦,连接串为"127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"(我们包含第三个服务器的信息,即使我们永远不启动它,因为这可以说明ZooKeeper⼀些有⽤的属性)。
使⽤zkCli.sh来访问集群:
[root@S-CentOS bin]# ./zkCli.sh -server localhost:2181,localhost:2182,localhost:2183
当连接到服务器后,我们会看到以下形式的消息:
[myid:localhost:2182] - INFO [main-SendThread(localhost:2182):ClientCnxn$SendThread@1394] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2182, sessionid = 0x20461e0bb3a0000, negotiated timeout = 30000
注意⽇志消息中的端口号,在本例中的2182。
如果通过 Ctrl + C
来停⽌客户端并重启多次它,我们将会看到端口号在2181-2182之间来回变化。
我们也许还会注意到尝试2183端连接失败的消息,之后成功连接到某⼀个服务器端的消息。
客户端以随机顺序连接到连接串中的服务器,这样可以用ZooKeeper 来实现⼀个简单的负载均衡。不过,客户端⽆法指定优先选择的服务器来进⾏连接。例如,如果我们有5个ZooKeeper服务器的⼀个集合,其中3个在美国西海岸,另外两个在美国东海岸,为了确保客户端只连接到本地服务器上,我们可以使在东海岸客户端的连接串中只出现东海岸的服务器, 在西海岸客户端的连接串中只有西海岸的服务器。
2.5 报错
- org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Address unresolved: 10.200.202.41:3882
server.1=localhost:2881:3881
配置之后存在空格,去掉重启即可
3、集群模式
假定三台服务器ip分别为:192.168.10.11
、192.168.10.12
、192.168.10.13
部署 ZK:
# 获取安装包
# 若服务器不能联网,则手动下载上传,官网:https://zookeeper.apache.org/releases.html
[root@S-CentOS app]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz# 解压
[root@S-CentOS app]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz# 重命名
[root@S-CentOS app]# mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7# 创建目录
[root@S-CentOS app]# cd zookeeper-3.5.7
[root@S-CentOS zookeeper-3.5.7]# mkdir data logs# 修改配置
[root@S-CentOS zookeeper-3.5.7]# cd conf
[root@S-CentOS conf]# cp zoo_sample.cfg zoo.cfg
[root@S-CentOS conf]# vim zoo.cfg
zoo.cfg 文件:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/app/zookeeper-3.5.7/data
dataLogDir=/app/zookeeper-3.5.7/logs
server.1=192.168.10.11:3188:3288
server.2=192.168.10.12:3188:3288
server.3=192.168.10.13:3188:3288
将 Zookeeper 拷贝至其他两台机器:
scp -r /app/zookeeper-3.5.7 192.168.10.11:/app/zookeeper-3.5.7/
scp -r /app/zookeeper-3.5.7 192.168.10.12:/app/zookeeper-3.5.7/
每个节点的dataDir指定的目录下创建一个 myid 的文件:
# 每个节点ID不同,192.168.10.11 -> 1、 192.168.10.12 -> 2、 192.168.10.13 -> 3
echo 1 > /app/zookeeper-3.5.7/data/myid
启动ZK服务(每个节点都启动)
# 启动ZK
[root@S-CentOS zookeeper-3.5.7]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /app/zookeeper-3.5.7/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
4、ZK 配置参数
(1)tickTime = 2000:通信心跳时间,单位毫秒
Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小的session过期时间为2倍tickTime
(2)initLimit = 10:LF 初始通信时限
Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)
Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。
Leader允许Follower在 ( initLimit * tickTime ) 时间内完成这个工作
(3)syncLimit = 5:LF 同步通信时限
Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer下线了,从服务器列表中删除Follwer
(4)dataDir:保存存储快照文件snapshot的目录
默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。
默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能
(5)clientPort = 2181:客户端连接端口,即对外服务端口,通常不做修改
(6)maxClientCnxns:单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60
如果设置为0,那么表明不作任何限制
(7)autopurge.snapRetainCount:指定了需要保留的文件数目,默认是保留3个
这个参数和下面参数配合使用
(8)autopurge.purgeInterval:指定了清理频率,单位是小时
3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能
需要配置一个1或更大的整数,0表示不开启自动清理功能
(9)globalOutstandingLimit:最大请求堆积数,默认是1000
ZK运行的时候, 尽管server已经没有空闲来处理更多的客户端请求了,但是还是允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下的
5、脚本
(1)伪集群
pseudoCluster.sh:
#!/bin/bash
case $1 in"start"){# 启动zookeeper服务器cd /app/zookeeper-3.5.7/bin./zkServer.sh start ../pseudo/zoo1/zoo1.cfg./zkServer.sh start ../pseudo/zoo2/zoo2.cfg./zkServer.sh start ../pseudo/zoo3/zoo3.cfg};;"stop"){# 停止Zookeeper集群cd /app/zookeeper-3.5.7/bin./zkServer.sh stop ../pseudo/zoo1/zoo1.cfg./zkServer.sh stop ../pseudo/zoo2/zoo2.cfg./zkServer.sh stop ../pseudo/zoo3/zoo3.cfg# 清除遗留数据cd ../pseudorm -rf zoo1/data/*rm -rf zoo1/logs/*echo 1 > zoo1/data/myidrm -rf zoo2/data/*rm -rf zoo2/logs/*echo 2 > zoo2/data/myidrm -rf zoo3/data/*rm -rf zoo3/logs/*echo 3 > zoo3/data/myid};;"status"){cd /app/zookeeper-3.5.7/bin./zkServer.sh status ../pseudo/zoo1/zoo1.cfg./zkServer.sh status ../pseudo/zoo2/zoo2.cfg./zkServer.sh status ../pseudo/zoo3/zoo3.cfg};;"client"){cd ../bin./zkCli.sh -server localhost:2181,localhost:2182,localhost:2183};;*){printf "参数仅支持:start、stop、status、stop、client\n"};;
esac
(2)分布式集群
cluster.sh
#!/bin/bash
case $1 in"start"){for i in hadoop102 hadoop103 hadoop104doecho ---------- zookeeper $i 启动 ------------ssh $i "/app/zookeeper-3.5.7/bin/zkServer.sh start"done};;"stop"){for i in hadoop102 hadoop103 hadoop104doecho ---------- zookeeper $i 停止 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"done};;"status"){for i in hadoop102 hadoop103 hadoop104doecho ---------- zookeeper $i 状态 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"done};;
esac
(3)脚本使用
# 编辑脚本
[root@S-CentOS zookeeper-3.5.7]# vim zkStop.sh# 增加脚本执行权限
[root@S-CentOS zookeeper-3.5.7]# chmod u+x zkStop.sh# 启动集群
[root@S-CentOS zookeeper-3.5.7]# zkStop.sh start# 停止集群
[root@S-CentOS zookeeper-3.5.7]# zkStop.sh stop
6、xsync 同步脚本
https://blog.csdn.net/nalw2012/article/details/98322637
相关文章:
【Linux】Zookeeper 部署
Zookeeper 搭建方式 单机模式:Zookeeper只运行在一台服务器上,适合测试环境伪集群模式:就是在一台物理机上运行多个Zookeeper 实例;集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算…...
配置mysql 主主模式 GTID
文章目录 一、前提二、修改my.cnf主1 10.255.131.9主2 10.255.131.10 三、配置主主3.1 配置主 10.255.131.93.2 配置从 10.255.131.103.3 配置主 10.255.131.103.4 配置从 10.255.131.9 四、验证五、同步问题排查以及恢复5.1 查看同步状态5.2 查看同步是否数据一致性࿰…...
推荐一款多显示器屏幕亮度调节工具:Twinkle Tray
Twinkle Tray中文版使您可以轻松管理多台显示器的亮度级别。 尽管 Windows 10 能够调节大多数显示器的背光,但它通常不支持外部显示器。 Windows 还缺乏管理多台显示器的亮度的任何功能。 该应用程序将一个新图标插入系统托盘,您可以在其中单击以立即访问…...
第十一章 Shiro会话管理和加密
学习目标 11.1 会话管理11.1.1 会话相关API一、获取会话二、会话属性管理三、会话信息获取四、会话控制五、会话监听六、会话DAO七、会话验证 11.2 缓存一、缓存接口二、内置缓存实现三、配置缓存四、使用缓存五、缓存清理六、注意事项 前面两章我们已经掌握了Shiro四大基石的认…...
DDR4单个DQ仿真实战(一)
目录 引言1、新建Workspace2、导入brd文件3、在SiPro中打开Layout:查看并编辑叠层4、PCB剪裁(可选)5、创建SiPro6、创建分析模型7、查看分析结果8、创建原理图9、系统行为级仿真 引言 DDR4仿真将按照以下几个步骤进行: 新建Work…...
Android Studio插件版本与Gradle 版本对应关系
一、背景 Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。 虽然 Android 插件通常会与 Android Studio 的更新步调保持一致,但插件(以及 Gradle 系统的其余部分)可…...
Uni-App-01
HBuilder安装卸载 安装 官网地址:https://www.dcloud.io/hbuilderx.html 下载HBuilder最新版 解压到安装目录,路径中不要有中文和空格 在桌面上增加快捷方式 卸载 执行reset.bat 删除HBuilder文件夹(如果提示文件被占用࿰…...
Java版本鸿鹄工程项目管理系统源码概述
项目背景 随着企业规模的扩大和业务的复杂化,传统的工程项目管理方式已经无法满足高效、准确、实时的管理需求。为了提高工程管理效率、优化资源配置、降低风险并控制成本,企业决定通过数字化转型,构建一个基于Spring Cloud、Spring Boot、M…...
基于echarts、php、Mysql开发的数据可视化大屏
大屏效果展示 管理员进入数据可视化页面将看到数据可视化大屏。大屏内容包括两个条形图,用于统计当前网站所有用户的MBTI 16型人格分布;玫瑰图,用于展示当前网站用户MBTI四个维度,八个字母的占比;折线图,用…...
Me-and-My-Girlfriend-1
Me-and-My-Girlfriend-1 解题 信息收集 nmap扫描存活主机 我的虚拟机为131 所以发现130为目标靶机。 查看网站,找到可利用点 使用浏览器查看,使用xff伪造本地用户。 注册用户cat,观察url有url_id,改为5,发现alice用户。 将…...
R语言实现GWAS meta分析(1)
1、基于数据集的Meta分析 datafilenamec("data1.txt","data2.txt"), setwd(workdir) library(Metalgwas) a1 name1c() for(i in datafilename){ assign(paste("file",a,sep""),data.table::fread(paste(getwd(),"/","…...
Kafka-代码示例
一、构建开发环境 File > New > Project 选择一个最简单的模板 项目和坐标命名 配置maven路径 添加maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients --><dependency><groupId>org.apache.kaf…...
LLVM - 编译器前端-llvm 基本块、指令、函数 的关系
一:基础概念: 在 LLVM 中,基本块、指令和函数是构建中间表示(IR)的核心概念,它们之间有着紧密的关系,首先了解下基本概念。 1. 基本块(Basic Block) 定义:基本块是一个不包含任何跳转指令的线性代码段,执行顺序是从头到尾。每个基本块至少有一个入口和一个出口。特…...
探索人工智能在自然语言处理中的应用
探索人工智能在自然语言处理中的应用 前言1. 机器翻译2. 情感分析3. 智能客服4. 文本生成未来展望 结语 前言 在信息爆炸的时代,自然语言处理(NLP)作为人工智能(AI)的一个重要分支,正以前所未有的速度改变着…...
IFC模型文本的含义
以下代码是一个STEP文件(ISO-10303-21标准),它是一种用于表示产品数据的国际标准。STEP文件通常用于在不同的计算机辅助设计(CAD)系统之间交换数据。下面是对这段代码的逐行解释: HEADER部分: …...
构建高效评奖系统:SpringBoot在教育领域的应用
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生评奖评优管理系统的开发全过程。通过分析学生评奖评优管理系统管理的不足,创建了一个计算机管理学生评奖评优管理系统的方案。文章介绍了学生评奖…...
「二叉树进阶题解:构建、遍历与结构转化全解析」
文章目录 根据二叉树创建字符串思路代码 二叉树的层序遍历思路代码 二叉树的最近公共祖先思路代码 二叉搜索树与双向链表思路代码 从前序与中序遍历序列构造二叉树思路代码 总结 根据二叉树创建字符串 题目: 样例: 可以看见,唯一特殊的就…...
在使用代理IP时,需要注意以下几点:
1. 代理IP的质量和稳定性直接影响爬虫的效果。因此,我们需要定期更新代理IP列表,并筛选出可用的代理IP。 2. 有些代理IP可能存在被目标网站封禁的风险。因此,我们需要合理使用代理IP,避免过度频繁地访问目标网站。 3. 在使用代…...
深入理解Java基础概念的高级应用(1/5)
目录 1. Java内存模型:堆、栈与方法区 示例代码:对象存储位置 2. 类加载器的工作原理 示例代码:自定义类加载器 3. JVM如何执行字节码 字节码指令示例 4. Java基础数据类型的存储与操作 自动装箱与拆箱 示例代码:基础类型…...
高可用HA软件
高可用HA(High Availability)软件在分布式系统架构设计中至关重要,它们能够减少系统停机时间,确保应用程序持久、不间断地提供服务。以下是四款常用的高可用HA软件介绍: Keepalived Keepalived起初是为LVS(…...
《近似线性可分支持向量机的原理推导》 拉格朗日函数 公式解析
本文是将文章《近似线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 公式 9-41 解释: L ( w , b , ξ , α , μ ) 1 2 ∥ w ∥ 2 C ∑ i 1 N ξ i − ∑ i 1 N α i ( y i ( w T x i b ) − ( 1 − ξ …...
9.指针和字符串string类型
指针和字符串string类型 1.指针2.字符串string类型 1.指针 C完全兼容C语言指针,C多出一个this指针 交换两数 #include <iostream>using namespace std;void swap(int *a,int *b){int temp;temp *a;*a *b;*b temp; }int main() {//交换前int a 50;int b …...
八,Linux基础环境搭建(CentOS7)- 安装Mysql和Hive
Linux基础环境搭建(CentOS7)- 安装Mysql和Hive 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、Mysql下载及安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Orac…...
海量数据面试题
⭐️前言⭐️ 本篇文章主要针对在面试时可能涉及到的海量数据的面试题,该类型面试题常常考虑通过位图、布隆过滤器或者哈希的方式来解决。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何…...
基于SSM积分商城管理系统的设计与实现(源码+lw+部署文档+讲解等)
前言 伴随着基础网络设施的不断进步和终端电子设备的高度普及,互联网用户规模越来越大。现在人们越来越离不开计算机网络、互联网所带来的好处了,现如今不同的网站系统遍地都是,现在已经不同于以往的传统的管理方式了,只有跟上时代…...
MLP预售开启,革新去中心化通信生态:智能手机与AI Agent齐上阵
2024年10月22日,Matrix Layer Protocol(MLP)宣布其备受期待的第一期产品正式进入预售阶段。随着Web3世界的不断发展,去中心化技术已经深入到我们日常生活的方方面面。作为Web3世界中炙手可热的创新项目,Matrix Layer P…...
js获取浏览器指纹
Canvas指纹法 来源:https://www.cnblogs.com/leijing0607/p/8044218.html 从根本上来说,每一种浏览器都会使用不同的图像处理引擎,不同的导出选项,不同的压缩等级,所以每一台电脑绘制出的图形都会有些许不同…...
乐尚代驾的项目问题
订单状态如果在流转的过程中卡住了,怎么办? 卡住的原因有可能是: 网络问题 网络不稳定或中断可能导致订单状态更新的请求无法及时发送或接收。例如,司机端在更新代驾车辆信息时,如果网络出现故障,可能无法…...
uniapp app.onshow 和 onMounted一样用吗
在uni-app中,onShow和onMounted并不完全相同,它们分别属于应用生命周期和组件生命周期。 应用生命周期中的onShow 在uni-app中,onShow是应用生命周期的一部分,它会在应用启动或从后台进入前台时触发。这意味着它不仅仅局限于页…...
基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)
源码地址:https://download.csdn.net/download/2302_79553009/89933699 项目简介 本项目旨在构建一个基于MBTI(迈尔斯-布里格斯性格分类指标)理论的在线平台——“16Personalities”。该平台利用PHP、MySQL、JavaScript等技术栈开发…...
做网站内容/网络推广网站推广方法
unix早期通信机制中的信号能够传送的信息量有限,管道则只能传送无格式字节流,这远远是不够的。 消息队列(也叫报文队列)客服了这些缺点: 消息队列就是一个消息的链表。 可以把消息看作一个记录,…...
为什么做电商网站/如何制作网页
live555源代码简介 liveMedia项目的源代码包括四个基本的库,各种测试代码以及IVE555 Media Server。 四个基本的库分别是UsageEnvironment&TaskScheduler,groupsock,liveMedia,BasicUsageEnvironment。 UsageEnvironment和T…...
各大网站logo图标/中国网络营销公司
计算机概念 很早期的计算机是一个庞然大物,可能都有几层楼那么高,随着技术的发展、更新,体型就变得越来越小,也越来越普及。 这个时候计算机与计算机之间就需要数据交流和信息的共享,早期是美国那边主要用于大学之间或…...
网站中二级导航栏怎么做/semir是什么品牌
Win7桌面小工具打不开怎么办?在Win7系统中,桌面自带有小工具功能,里面有日历、时钟、天气等,只要双击某功能图标,该功能就会显示在桌面上,非常的方便。通常情况下,我们在电脑桌面空白处右键即可看到小工具…...
石景山网站建设推广/优化seo教程技术
在PyQt中,QWidget类对应基础的窗口组件,如果要在窗口组件关闭时截获关闭事件,提供自己的控制机制,则可以通过在自定义的派生类中重写closeEvent方法。 重写closeEvent方法的语法如下:def closeEvent(self…...
合肥肥东网站建设/友情链接交换网址大全
华为手机哪一款最好用 华为手机投屏到电视的5种方法2021-02-23 16:26:120点赞0收藏0评论【一、华为手机哪一款最好用1、华为P20Pro配置:CPU麒麟970、内存6GB、电池4000mAh、操作系统AndroidOreo、前置摄像头2400万像素、后置摄像头4000万2000万800万像素。它是目前华…...