用 Docker 手动部署
本文描述了如何用 Docker 运行 HStreamDB 集群。
注意
本教程只展示了用 Docker 启动 HStreamDB 集群的主要过程。参数的配置没有考虑到任何安全问题,所以请 请不要在部署时直接使用它们
设置一个 ZooKeeper 集群
HServer 和 HStore 需要 ZooKeeper 来存储一些元数据,所以首先我们需要配置一个 ZooKeeper 集群。
你可以在网上找到关于如何建立一个合适的 ZooKeeper 集群的教程。
这里我们只是通过 docker 快速启动一个单节点的 ZooKeeper 为例。
1. docker run --rm -d --name zookeeper --network host zookeeper
在存储节点上创建数据文件夹
存储节点会把数据存储分片(Shard)中。通常情况下,每个分片映射到不同的物理磁盘。 假设你的数据盘被挂载(mount)在/mnt/data0 上
1. # creates the root folder for data
2. sudo mkdir -p /data/logdevice/
4. # writes the number of shards that this box will have
5. echo 1 | sudo tee /data/logdevice/NSHARDS
7. # creates symlink for shard 0
8. sudo ln -s /mnt/data0 /data/logdevice/shard0
10. # adds the user for the logdevice daemon
11. sudo useradd logdevice
13. # changes ownership for the data directory and the disk
14. sudo chown -R logdevice /data/logdevice/
15. sudo chown -R logdevice /mnt/data0/
- See Create data folders
(opens new window) for details
创建配置文件
这里是一个配置文件的最小示例。
在使用它之前,请根据你的情况进行修改。
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. "config_log_deltas": {
16. "replicate_across": {
17. "node": 3
18. }
19. },
20. "config_log_snapshots": {
21. "replicate_across": {
22. "node": 3
23. }
24. },
25. "event_log_deltas": {
26. "replicate_across": {
27. "node": 3
28. }
29. },
30. "event_log_snapshots": {
31. "replicate_across": {
32. "node": 3
33. }
34. },
35. "maintenance_log_deltas": {
36. "replicate_across": {
37. "node": 3
38. }
39. },
40. "maintenance_log_snapshots": {
41. "replicate_across": {
42. "node": 3
43. }
44. }
45. },
46. "metadata_logs": {
47. "nodeset": [],
48. "replicate_across": {
49. "node": 3
50. }
51. },
52. "zookeeper": {
53. "zookeeper_uri": "ip://10.100.2.11:2181",
54. "timeout": "30s"
55. }
56. }
- 如果你有一个多节点的 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. }
- 所有属性的详细解释可以在集群配置
(opens new window) 文档中找到。
存储配置文件
你可以将配置文件存储在 ZooKeeper 中,或存储在每个存储节点上。
在 ZooKeeper 中存储配置文件
假设你的一个 ZooKeeper 节点上有一个路径为 ~/logdevice.conf 的配置文件。
通过运行以下命令将配置文件保存到 ZooKeeper 中:
1. docker exec zookeeper zkCli.sh create /logdevice.conf "`cat ~/logdevice.conf`"
通过以下命令验证创建是否成功:
1. docker exec zookeeper zkCli.sh get /logdevice.conf
配置 HStore 集群
对于存储在 ZooKeeper 中的配置文件,假设配置文件中 zookeeper_uri 字段的值是 "ip:/10.100.2.11:2181" ,ZooKeeper中配置文件的路径是 /logdevice.conf 。
对于存储在每个节点上的配置文件,假设你的文件路径是 `/data/logdevice/logdevice.conf’。
在单个节点上启动 admin 服务器
- 配置文件存储在 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. --config-path zk:10.100.2.11:2181/logdevice.conf \
4. --enable-maintenance-manager \
5. --maintenance-log-snapshotting \
6. --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
在每个节点上启动 logdeviced
- 存储在 ZooKeeper 中的配置文件:
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
Bootstrap 集群
在启动管理服务器和每个存储节点的 logdeviced 之后,现在我们可以 bootstrap 我们的集群。
在管理服务器节点上,运行。
1. docker exec storeAdmin hadmin store nodes-config bootstrap --metadata-replicate-across 'node:3'
你应该看到像这样的信息:
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 实例,你可以修改启动命令以适应你的情况。
1. docker run -d --name hstream-server --network host \
2. hstreamdb/hstream:v0.11.0 /usr/local/bin/hstream-server \
3. --bind-address $SERVER_HOST \
4. --advertised-address $SERVER_HOST \
5. --seed-nodes $SERVER_HOST \
6. --metastore-uri zk://$ZK_ADDRESS \
7. --store-config zk:$ZK_ADDRESS/logdevice.conf \
8. --store-admin-host $ADMIN_HOST \
9. --replicate-factor 3 \
10. --server-id 1
$SERVER_HOST:你的服务器节点的主机 IP 地址,例如192.168.0.1。metastore-uri: 你的元信息存储 HMeta 地址,例如使用zk://$ZK_ADDRESS指定 zookeeper 存储元数据。同时实现性支持使用 rqliterq://$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参数的值一致。--store-admin-host:HStore Admin Server节点的 IP 地址。--server-id:你应该为每个服务器实例设置一个的唯一标识符
你可以以同样的方式在不同的节点上启动多个服务器实例。
