用 Docker 手动部署

    注意

    本教程只展示了用 Docker 启动 HStreamDB 集群的主要过程。参数的配置没有考虑到任何安全问题,所以请 请不要在部署时直接使用它们

    HStore 需要 ZooKeeper 来存储一些元数据,所以首先我们需要配置一个 ZooKeeper 集群。

    你可以在网上找到关于如何建立一个合适的 ZooKeeper 集群的教程。

    这里我们只是通过 docker 快速启动一个单节点的 ZooKeeper 为例。

    在存储节点上创建数据文件夹

    存储节点会把数据存储分片(Shard)中。通常情况下,每个分片映射到不同的物理磁盘。 假设你的数据盘被挂载(mount)在/mnt/data0

    1. # creates the root folder for data
    2. sudo mkdir -p /data/logdevice/
    3. # writes the number of shards that this box will have
    4. echo 1 | sudo tee /data/logdevice/NSHARDS
    5. # creates symlink for shard 0
    6. sudo ln -s /mnt/data0 /data/logdevice/shard0
    7. # adds the user for the logdevice daemon
    8. sudo useradd logdevice
    9. # changes ownership for the data directory and the disk
    10. sudo chown -R logdevice /data/logdevice/
    11. sudo chown -R logdevice /mnt/data0/

    这里是一个配置文件的最小示例。

    在使用它之前,请根据你的情况进行修改。

    1. {
    2. "server_settings": {
    3. "enable-nodes-configuration-manager": "true",
    4. "use-nodes-configuration-manager-nodes-configuration": "true",
    5. "enable-node-self-registration": "true",
    6. "enable-cluster-maintenance-state-machine": "true"
    7. },
    8. "client_settings": {
    9. "enable-nodes-configuration-manager": "true",
    10. "use-nodes-configuration-manager-nodes-configuration": "true",
    11. "admin-client-capabilities": "true"
    12. },
    13. "cluster": "logdevice",
    14. "internal_logs": {
    15. "replicate_across": {
    16. "node": 3
    17. }
    18. },
    19. "config_log_snapshots": {
    20. "replicate_across": {
    21. "node": 3
    22. }
    23. },
    24. "event_log_deltas": {
    25. "node": 3
    26. }
    27. },
    28. "event_log_snapshots": {
    29. "replicate_across": {
    30. "node": 3
    31. }
    32. },
    33. "maintenance_log_deltas": {
    34. "replicate_across": {
    35. "node": 3
    36. }
    37. },
    38. "maintenance_log_snapshots": {
    39. "replicate_across": {
    40. "node": 3
    41. }
    42. }
    43. },
    44. "metadata_logs": {
    45. "nodeset": [],
    46. "replicate_across": {
    47. "node": 3
    48. }
    49. },
    50. "zookeeper": {
    51. "zookeeper_uri": "ip://10.100.2.11:2181",
    52. "timeout": "30s"
    53. }
    • 如果你有一个多节点的 ZooKeeper,修改 zookeeper_uri部分为 ZooKeeper 集群的节点和端口列表:

      1. "zookeeper": {
      2. "zookeeper_uri": "ip://10.100.2.11:2181,10.100.2.12:2181,10.100.2.13:2181",
      3. "timeout": "30s"
      4. }

    存储配置文件

    你可以将配置文件存储在 ZooKeeper 中,或存储在每个存储节点上。

    假设你的一个 ZooKeeper 节点上有一个路径为 ~/logdevice.conf 的配置文件。

    通过运行以下命令将配置文件保存到 ZooKeeper 中:

    通过以下命令验证创建是否成功:

    1. docker exec zookeeper zkCli.sh get /logdevice.conf

    对于存储在 ZooKeeper 中的配置文件,假设配置文件中 zookeeper_uri 字段的值是 "ip:/10.100.2.11:2181" ,ZooKeeper中配置文件的路径是 /logdevice.conf

    对于存储在每个节点上的配置文件,假设你的文件路径是 `/data/logdevice/logdevice.conf’。

    • 配置文件存储在 ZooKeeper 中:

      1. docker run --rm -d --name storeAdmin --network host -v /data/logdevice:/data/logdevice \
      2. hstreamdb/hstream:v0.11.0 /usr/local/bin/ld-admin-server \
      3. --enable-maintenance-manager \
      4. --maintenance-log-snapshotting \
      5. --enable-safety-check-periodic-metadata-update
      • 如果你有一个多节点的 ZooKeeper,请将--config-path替换为: --config-path zk:10.100.2.11:2181,10.100.2.12:2181,10.100.2.13:2181/logdevice.conf
    • 存储在每个节点的配置文件:

      更改 --config-path 参数为 --config-path /data/logdevice/logdevice.conf

      1. docker run --rm -d --name hstore --network host -v /data/logdevice:/data/logdevice \
      2. hstreamdb/hstream:v0.11.0 /usr/local/bin/logdeviced \
      3. --config-path zk:10.100.2.11:2181/logdevice.conf \
      4. --name store-0 \
      5. --address 192.168.0.3 \
      6. --local-log-store-path /data/logdevice
      • 对于每个节点,你应该将--name更新为一个不同的值,并将--address更新为该节点的 IP 地址。
    • 存储在每个节点的配置文件:

      更改 --config-path 参数为 --config-path /data/logdevice/logdevice.conf

    在启动管理服务器和每个存储节点的 logdeviced 之后,现在我们可以 bootstrap 我们的集群。

    在管理服务器节点上,运行。

    你应该看到像这样的信息:

    1. Successfully bootstrapped the cluster, new nodes configuration version: 7
    2. Took 0.019s

    你可以通过运行以下命令来检查集群的状态:

    1. docker exec storeAdmin hadmin store status

    而结果应该是:

    1. +----+---------+----------+-------+-----------+---------+---------------+
    2. | ID | NAME | PACKAGE | STATE | UPTIME | SEQ. | HEALTH STATUS |
    3. +----+---------+----------+-------+-----------+---------+---------------+
    4. | 0 | store-0 | 99.99.99 | ALIVE | 2 min ago | ENABLED | HEALTHY |
    5. | 1 | store-2 | 99.99.99 | ALIVE | 2 min ago | ENABLED | HEALTHY |
    6. | 2 | store-1 | 99.99.99 | ALIVE | 2 min ago | ENABLED | HEALTHY |
    7. +----+---------+----------+-------+-----------+---------+---------------+
    8. Took 7.745s

    现在我们完成了对 HStore 集群的设置。

    配置 HServer 集群

    要启动一个单一的 HServer 实例,你可以修改启动命令以适应你的情况。

    • $SERVER_HOST:你的服务器节点的主机 IP 地址,例如 192.168.0.1
    • metastore-uri: 你的元信息存储 HMeta 地址,例如使用 zk://$ZK_ADDRESS 指定 zookeeper 存储元数据。同时实现性支持使用 rqlite rq://$RQ_ADDRESS
    • $ZK_ADDRESS :你的 ZooKeeper 集群地址列表,例如 10.100.2.11:2181,10.100.2.12:2181,10.100.2.13:2181
    • --store-config:你的 HStore 配置文件的路径。应该与启动 HStore 集群 --config-path 参数的值一致。
    • --server-id:你应该为每个服务器实例设置一个的唯一标识符