Browse Source

first commit

YinBin 1 year ago
commit
5e02f3d66b

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+target/
+.classpath
+.class
+.project
+.settings/

+ 4 - 0
.vscode/settings.json

@@ -0,0 +1,4 @@
+{
+    "java.configuration.updateBuildConfiguration": "automatic",
+    "java.dependency.packagePresentation": "hierarchical"
+}

+ 42 - 0
docker-compose.yml

@@ -0,0 +1,42 @@
+version: "3.1"
+
+# 4lw.commands.whitelist=*
+services:
+  zoo1:
+    image: qtrj.i234.me:8084/zookeeper
+    restart: always
+    stdin_open: true
+    tty: true
+    hostname: zoo1
+    ports:
+      - 2181:2181
+    environment:
+      ZOO_MY_ID: 1
+      ZOO_4LW_COMMANDS_WHITELIST: "*"
+      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
+
+  zoo2:
+    image: qtrj.i234.me:8084/zookeeper
+    restart: always
+    stdin_open: true
+    tty: true
+    hostname: zoo2
+    ports:
+      - 2182:2181
+    environment:
+      ZOO_MY_ID: 2
+      ZOO_4LW_COMMANDS_WHITELIST: "*"
+      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
+
+  zoo3:
+    image: qtrj.i234.me:8084/zookeeper
+    restart: always
+    stdin_open: true
+    tty: true
+    hostname: zoo3
+    ports:
+      - 2183:2181
+    environment:
+      ZOO_MY_ID: 3
+      ZOO_4LW_COMMANDS_WHITELIST: "*"
+      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181

+ 66 - 0
readme.md

@@ -0,0 +1,66 @@
+# zookeeper
+
+zookeeper、集群
+
+## 环境
+
+- docker
+- java8
+- vscode
+
+## 启动
+
+`docker-compose up`
+
+## 手动搭建
+
+### java配置
+
+1. 拉取镜像
+`docker pull qtrj.i234.me:8084/centos`
+2. 启动镜像
+`docker run -it qtrj.i234.me:8084/centos /bin/bash`
+3. 复制jdk到容器
+`docker cp /home/fy/workspaces/zookeeper/jdk-8u131-linux-x64.tar.gz 052aaa61228d:/root`
+4. 解压
+`tar -xvf jdk-8u131-linux-x64.tar.gz`
+5. 配置java环境变量
+vi /etc/profile
+```
+export JAVA_HOME=/root/jdk1.8.0_131
+export CLASSPATH=.:$JAVA_HOME/lib
+export PATH=$PATH:$JAVA_HOME/bin
+```
+6. 测试
+```
+source /ect/profile
+java  -version
+javac -version
+```
+
+### 统一时区
+
+```
+cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+date
+```
+> 需要保证三台机器都的实践都统一
+
+### zookeeper安装
+
+1. 复制zoo到容器
+`docker cp ./apache-zookeeper-3.6.2-bin.tar.gz 052aaa61228d:/root`
+2. 解压
+`tar -xvf apache-zookeeper-3.6.2-bin.tar.gz`
+3. 复制默认配置文件,调整配置项
+`cp zoo_sample.cfg zoo.cfg`
+末尾添加:
+```
+server.1=node-1:2888:3888 #(2888是心跳端口,3888是选举端口)
+server.2=node-2:2887:3887
+server.3=node-3:2886:3886
+```
+设置数据目录:
+`mkdir /root/zkdata`
+设置节点编号:
+`echo 1 /root/zkdata/myid`

+ 90 - 0
zook/pom.xml

@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.qtrj</groupId>
+  <artifactId>zook</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>zook</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.qdqtrj.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>15</maven.compiler.source>
+    <maven.compiler.target>15</maven.compiler.target>
+  </properties>
+
+  <profiles>
+    <profile>
+      <id>downloadSources</id>
+      <properties>
+        <downloadSources>true</downloadSources>
+        <downloadJavadocs>true</downloadJavadocs>
+      </properties>
+    </profile>
+  </profiles>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.zookeeper</groupId>
+      <artifactId>zookeeper</artifactId>
+      <version>3.6.2</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>

+ 13 - 0
zook/src/main/java/org/qtrj/App.java

@@ -0,0 +1,13 @@
+package org.qtrj;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

+ 37 - 0
zook/src/main/java/org/qtrj/TestZkClient.java

@@ -0,0 +1,37 @@
+package org.qtrj;
+
+import org.apache.zookeeper.CreateMode;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.ZooDefs;
+import org.apache.zookeeper.ZooKeeper;
+
+public class TestZkClient {
+
+    public static void main(String[] args) throws Exception {
+        ZooKeeper zk = new ZooKeeper("zoo1:2181,zoo2:2182,zoo3:2183", 30000, new Watcher() {
+            @Override
+            public void process(WatchedEvent event) {
+                System.out.println(event.getState());
+                System.out.println(event.getType());
+                System.out.println(event.getPath());
+                System.out.println("--------------------");
+            }
+        });
+
+        // zk.create("/myGirls22", "absssc".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
+        // CreateMode.PERSISTENT);
+
+        zk.create("/myGirls22", "absssc".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
+
+        byte[] ss = zk.getData("/myGirls22", true, null);
+        System.out.println(new String(ss));
+        zk.setData("/myGirls22", "22222".getBytes(), -1);
+        zk.setData("/myGirls22", "33333".getBytes(), -1);//
+
+        ss = zk.getData("/myGirls22", true, null);
+        System.out.println(new String(ss));
+        // zk.delete("/myGirls22", -1);
+        zk.close();
+    }
+}

+ 23 - 0
zook/src/main/java/org/qtrj/socket/tcp/TCPSocketClient.java

@@ -0,0 +1,23 @@
+package org.qtrj.socket.tcp;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+public class TCPSocketClient {
+
+    public static void main(String[] args) throws UnknownHostException, IOException {
+        // 创建客户端socket对象
+        // 在socket中指定传输数据的目的ip和端口
+        Socket client = new Socket("127.0.0.1", 12345);
+
+        // 通过socket建立的通道输出数据
+        OutputStream outputStream = client.getOutputStream();
+        outputStream.write("This's TCP!".getBytes());
+
+        // 释放资源
+        client.close();
+    }
+
+}

+ 30 - 0
zook/src/main/java/org/qtrj/socket/tcp/TCPSocketServer.java

@@ -0,0 +1,30 @@
+package org.qtrj.socket.tcp;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+public class TCPSocketServer {
+
+    public static void main(String[] args) throws IOException {
+        // 创建socket对象
+        // 绑定端口
+        ServerSocket server = new ServerSocket(12345);
+
+        // 监听链接,阻塞方法
+        Socket s = server.accept();
+
+        // 获取输入流,读取数据
+        InputStream inputStream = s.getInputStream();
+        byte[] bytes = new byte[1024];
+        int len = inputStream.read(bytes);
+
+        System.out.println(new String(bytes, 0, len));
+
+        // 释放资源
+        s.close();
+        server.close();
+    }
+
+}

+ 29 - 0
zook/src/main/java/org/qtrj/socket/udp/UDPSocketClient.java

@@ -0,0 +1,29 @@
+package org.qtrj.socket.udp;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+
+public class UDPSocketClient {
+
+    public static void main(String[] args) throws IOException {
+        // 创建socket对象
+
+        DatagramSocket client = new DatagramSocket();
+
+        // 数据打包
+        String message = "hello udp";
+        InetAddress ia = InetAddress.getLocalHost();
+        int port = 12222;
+        DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, ia, port);
+
+        // 发送数据
+        client.send(packet);
+
+        // 关闭
+        client.close();
+
+    }
+
+}

+ 31 - 0
zook/src/main/java/org/qtrj/socket/udp/UDPSocketServer.java

@@ -0,0 +1,31 @@
+package org.qtrj.socket.udp;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+
+public class UDPSocketServer {
+
+    public static void main(String[] args) throws IOException {
+        // 创建服务端socket对象
+        int port = 12222;
+        DatagramSocket server = new DatagramSocket(port);
+
+        // 创建数据接收容器
+        byte[] data = new byte[1024];
+        DatagramPacket packet = new DatagramPacket(data, data.length);
+
+        // 接收数据
+        server.receive(packet);
+
+        // 数据解析
+        String host = packet.getAddress().getHostAddress();
+        byte[] bys = packet.getData();
+        System.out.println("接收来自" + host + "的信息:" + new String(bys));
+
+        // 释放资源
+        server.close();
+
+    }
+
+}

+ 20 - 0
zook/src/test/java/org/qtrj/AppTest.java

@@ -0,0 +1,20 @@
+package org.qtrj;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}