linux中zookeeper
安装jdk
tar -zxvf jdk-11.0.1_linux-x64_bin.tar.gz -C /usr/src
sudo vim /etc/profile
输入如下内容
export JAVA_HOME=/usr/src/jdk-11.0.1
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
shutdown -r now
java -version
安装zookeeper
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/src
配置zookeeper
zookeeper工作原理,leader选举作为主服务器使用,最少3台服务器
cd /usr/src/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
sudo zoo.cfg
输入如下内容
# tick时间
tickTime=2000
# tick数量
initLimit=10
# 请求和响应能够传递的tick数量
syncLimit=5
# 保存snapshots的数据目录
dataDir=/root/zookeeper
# 客户端端口
clientPort=2181
# 最大客户端连接数
maxClientCnxns=60
# snapshots保存数量
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
# server.serverid=你的服务器ip:leader和follower通信端口:选举投票端口
server.1=yourserverip1:2888:3888
server.2=yourserverip2:2888:3888
server.3=yourserverip3:2888:3888
记录serverid到dataDir中
mkdir /root/zookeeper
cd /root/zookeeper
echo 1 > myid
禁用防火墙
sudo ufw disable
sudo ufw status
开启zookeeper
cd /usr/src/zookeeper-3.4.10/bin
./zkServer.sh start
./zkServer.sh status
zookeeper结点操作
zookeeper提供的数据保管功能,leader服务器实现更新数据
连接zookeeper
./zkCli.sh
connect yourip:2181 // 连接其他机器的zookeeper
ls / // 查看根结点
create /node1 "testnode1" // 创建结点
create /node1/node11 "testnode11"
get /node1/node11 // 获取结点数据
get /node1/node11 watch // 监听结点数据
set /node1 "data" // 修改结点值
delete /node1 // 删除节点
短暂结点和持久结点
create -e /node2 // 断开连接,自动删除
create /node2 // 持久保存
序列号结点
create -s /node3 // 结点名称后面自动添加序号
在java中使用
依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.4-beta</version>
</dependency>
示例
package test;
import java.util.List;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.Stat;
public class App
{
private static final String connectString = "yourip1:2181,yourip2:2181,yourip3:2181";
private static final Integer sessionTimeout = 3000;
private static ZooKeeper zk = null;
public static void main( String[] args ) throws Exception
{
zk = new ZooKeeper(connectString, sessionTimeout, new Watcher(){
@Override
public void process(WatchedEvent event) {
System.out.println(event.getType() + "----" + event.getPath());
}
});
}
public void NodeOperation() {
try {
// 创建结点
String path = zk.create("/node", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// 获取结点
List<String> c = zk.getChildren("/", true);
// 判断结点是否存在
Stat stat = zk.exists("/node", false);
if(stat == null) {
System.out.println("结点不存在");
}
// 获取结点数据
byte[] data = zk.getData("/node", false, null);
// 设置结点
zk.setData("/node", "data".getBytes(), -1);
// 删除结点
zk.delete("/node", -1);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}