在一台机器上模拟3个 zk server的集群安装

一、安装部署

本文在一台机器上模拟3个 zk server的集群安装

1.1 下载解压

解压到3个目录(模拟3台zk server):

  /home/hadoop/zookeeper-1

  /home/hadoop/zookeeper-2

  /home/hadoop/zookeeper-3

1.2 创建每个目录下conf/zoo.cfg配置文件 

/home/hadoop/zookeeper-1/conf/zoo.cfg 内容如下:

复制代码

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zk1/data
dataLogDir=/home/hadoop/tmp/zk1/log
clientPort=2181
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

复制代码

/home/hadoop/zookeeper-2/conf/zoo.cfg 内容如下:

复制代码

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zk2/data
dataLogDir=/home/hadoop/tmp/zk2/log
clientPort=2182
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

复制代码

/home/hadoop/zookeeper-3/conf/zoo.cfg 内容如下:

复制代码

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zk3/data
dataLogDir=/home/hadoop/tmp/zk3/log
clientPort=2183
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

复制代码

注:因为是在一台机器上模拟集群,所以端口不能重复,这里用2181~2183,2287~2289,以及3387~3389相互错开。另外每个zk的instance,都需要设置独立的数据存储目录、日志存储目录,所以dataDir、dataLogDir这二个节点对应的目录,需要手动先创建好。

另外还有一个灰常关键的设置,在每个zk server配置文件的dataDir所对应的目录下,必须创建一个名为myid的文件,其中的内容必须与zoo.cfg中server.x 中的x相同,即:

/home/hadoop/tmp/zk1/data/myid 中的内容为1,对应server.1中的1
/home/hadoop/tmp/zk2/data/myid 中的内容为2,对应server.2中的2
/home/hadoop/tmp/zk3/data/myid 中的内容为3,对应server.3中的3

生产环境中,分布式集群部署的步骤与上面基本相同,只不过因为各zk server分布在不同的机器,上述配置文件中的localhost换成各服务器的真实Ip即可。分布在不同的机器后,不存在端口冲突问题,可以让每个服务器的zk均采用相同的端口,这样管理起来比较方便。

1.3 启动验证 

/home/hadoop/zookeeper-1/bin/zkServer.sh start

/home/hadoop/zookeeper-2/bin/zkServer.sh start

/home/hadoop/zookeeper-3/bin/zkServer.sh start

启用成功后,输入 jps 看下进程

20351 ZooKeeperMain
20791 QuorumPeerMain
20822 QuorumPeerMain
20865 QuorumPeerMain

应该至少能看到以上几个进程。

可以启动客户端测试下:

bin/zkCli.sh -server localhost:2181   

quit  退出客户端

(注:如果是远程连接,把localhost换成指定的IP即可)

成功后,应该会进到提示符下,类似下面这样:

[zk: localhost:2181(CONNECTED) 0]  

然后,就可以用一些基础命令,比如 ls ,create ,delete ,get 来测试了(关于这些命令,大家可以查看文档),特别提一个很有用的命令rmr 用来递归删除某个节点及其所有子节点

转载:https://www.cnblogs.com/yjmyzz/p/4587663.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
我理解到您需要一个代码实现来模拟zk-SNARK协议的过程。请注意,zk-SNARK是一种复杂的加密协议,需要深入的数学和计算机科学知识来理解和实现。在此,我将为您提供一个基本的实现框架,但这只是一个简化版本,没有进行实际的加密处理。 首先,让我们来了解一下zk-SNARK协议的基本流程: 1. 生成公私钥对 2. 生成证明 3. 验证证明 我们将按照这个流程来实现这个协议。 1. 生成公私钥对 我们首先需要一个密钥对,用于加密和解密。在zk-SNARK中,这个密钥对由一个大素数p和一个随机数g生成。我们可以使用Java的`java.util.Random`类来生成随机数,并使用`java.math.BigInteger`类来进行大数运算。 ```java import java.math.BigInteger; import java.util.Random; public class Zksnark { private BigInteger p, g, privateKey, publicKey; public Zksnark() { // Generate a random prime p and a random number g Random rand = new Random(); p = BigInteger.probablePrime(512, rand); g = new BigInteger(512, rand); // Generate a random private key and corresponding public key privateKey = new BigInteger(512, rand).mod(p); publicKey = g.modPow(privateKey, p); } public void printKeys() { System.out.println("Private key: " + privateKey.toString()); System.out.println("Public key: " + publicKey.toString()); } } ``` 2. 生成证明 下一步是生成证明。在zk-SNARK中,证明包含两个部分:一个公共部分和一个私有部分。公共部分可以由任何人验证,而私有部分只能由拥有私钥的人生成。我们将使用Java的`MessageDigest`类来生成哈希值,并使用`java.security.Signature`类来生成签名。 ```java import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Signature; import java.security.SignatureException; public class Zksnark { private BigInteger p, g, privateKey, publicKey; public Zksnark() { // ... } public void printKeys() { // ... } public String generateProof(String message) { // Generate a public hash of the message String publicHash = generateHash(message); // Sign the message using the private key byte[] signature = signMessage(publicHash); // Combine the public hash and signature to generate the proof return publicHash + ":" + new BigInteger(signature).toString(); } private String generateHash(String message) { try { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] hash = md.digest(message.getBytes()); return new BigInteger(hash).toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } private byte[] signMessage(String message) { try { Signature sig = Signature.getInstance("SHA256withRSA"); sig.initSign(privateKey); sig.update(message.getBytes()); return sig.sign(); } catch (Exception e) { e.printStackTrace(); } return null; } } ``` 3. 验证证明 最后一步是验证证明。在zk-SNARK中,验证者可以通过公共证明来验证证明的正确性。我们将使用Java的`java.security.Signature`类来验证签名,并使用`java.math.BigInteger`类来进行大数运算。 ```java import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Signature; import java.security.SignatureException; import java.util.Arrays; public class Zksnark { private BigInteger p, g, privateKey, publicKey; public Zksnark() { // ... } public void printKeys() { // ... } public String generateProof(String message) { // ... } public boolean verifyProof(String proof, String message) { // Split the proof into public hash and signature String[] parts = proof.split(":"); String publicHash = parts[0]; byte[] signature = new BigInteger(parts[1]).toByteArray(); // Generate the public hash of the message String expectedHash = generateHash(message); // Verify the signature using the public key boolean signatureValid = verifySignature(signature, publicHash); // Verify that the public hash matches the expected hash boolean hashValid = publicHash.equals(expectedHash); // Return true if the signature and hash are both valid return signatureValid && hashValid; } private boolean verifySignature(byte[] signature, String message) { try { Signature sig = Signature.getInstance("SHA256withRSA"); sig.initVerify(publicKey); sig.update(message.getBytes()); return sig.verify(signature); } catch (Exception e) { e.printStackTrace(); } return false; } private String generateHash(String message) { try { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] hash = md.digest(message.getBytes()); return new BigInteger(hash).toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } } ``` 这就是一个简单的zk-SNARK协议的Java实现。请注意,这只是一个基本的实现框架,没有进行实际的加密处理。如果您需要更高级的实现,请参考相关的文献和代码库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值