设置zookeeper的clientPortAddress参数

一、参数解释

clientPortAddress 参数是 ZooKeeper 配置中的一个可选项,它在 3.3.0 版本中引入,用来指定 ZooKeeper 服务器监听来自客户端连接的特定地址(可以是 IPv4 地址、IPv6 地址或主机名)。
官网地址:https://zookeeper.apache.org/doc/r3.4.5/zookeeperAdmin.html#sc_configuration

二、使用场景

这个参数的主要用途是在多网卡或多IP地址环境中提供更灵活的配置选项,以下是一些具体的使用场景:

1.多网卡服务器:

假设你的服务器上有多个网卡(每个网卡有不同的IP地址),而你只希望 ZooKeeper 监听其中一个特定网卡的IP地址。你可以设置 clientPortAddress 参数来实现这一需求,这样 ZooKeeper 只会接受通过该特定IP地址发来的客户端连接请求,而忽略其他网卡的流量。
clientPortAddress=192.168.1.100

2.安全性要求:

在一些安全性要求较高的环境中,你可能希望限制 ZooKeeper 只通过内网特定IP地址进行客户端连接,而不暴露在公网或其它不必要的网络接口上。通过配置 clientPortAddress,可以确保 ZooKeeper 仅在受控的网络接口上监听,从而提升安全性。
clientPortAddress=10.0.0.5

3.IPv6 部署:

如果你的网络环境支持 IPv6,并且你希望利用 IPv6 地址来与 ZooKeeper 进行通信,可以使用 clientPortAddress 来指定一个 IPv6 地址。
clientPortAddress=2001:db8::52001:db8::5

4.服务分离部署:

在某些部署场景中,可能会有多个服务运行在同一台服务器上,这些服务可能分别需要通过不同的IP地址进行通信。配置 clientPortAddress 可以防止 ZooKeeper 占用不必要的网络接口资源,确保其他服务的正常运行。

5.DNS 解析:

如果你的环境中使用了 DNS 解析,你可以通过指定主机名来配置 clientPortAddress。在服务器启动时,ZooKeeper 将解析该主机名并绑定到相应的 IP 地址。
clientPortAddress=zookeeper.example.com

总的来说

clientPortAddress 提供了一种更加灵活的网络配置选项,使得 ZooKeeper 在不同网络环境和部署需求下能够更好地进行客户端连接管理。

三、如果我有一个3台服务器的zookeeper集群,如何进行clientPortAddress设置,每台服务器设置对应服务器的IP,还是可以统一设置?

在有一个由3台服务器组成的ZooKeeper集群的情况下,每台服务器的clientPortAddress应该设置为对应服务器的IP地址。这样做是为了确保客户端可以连接到集群中的特定服务器。
例如,如果你有以下三台服务器的IP地址分别是:
Server 1: 192.168.1.101
Server 2: 192.168.1.102
Server 3: 192.168.1.103
那么你需要在每台服务器上的ZooKeeper配置文件(例如 zoo.cfg)中分别设置clientPortAddress:
在Server 1上:
clientPortAddress=192.168.1.101
在Server 2上:
clientPortAddress=192.168.1.102
在Server 3上:
clientPortAddress=192.168.1.103

这样的配置会确保每个服务器只监听自己的IP地址,客户端连接到集群时可以通过指定特定的服务器IP地址来连接到特定的服务器。

另外,如果你不设置clientPortAddress(即保留默认设置),ZooKeeper服务器将监听它所在服务器的所有接口上的clientPort。这意味着ZooKeeper将接受绑定到该端口的任何地址/接口/网卡上的客户端连接。对于大多数部署来说,这种配置是可接受并且足够安全的,特别是当集群是在受限或受信任的网络环境内部署时。

如果你的ZooKeeper集群在生产环境中部署,并且需要考虑网络隔离或安全性,则为每个服务器单独指定clientPortAddress更为适宜。同时,这样的配置是必要的,如果你需要从网络架构上限制ZooKeeper监听的网络接口,例如在某些接口是面向公网,而ZooKeeper应该只在内网工作的情况下。

四、注意事项

1.需要为每个zookeeper角色实例设置对应的IP,即设置实例所在服务器的IP。
2.设置clientPortAddress参数需要重启CDH集群。

### 如何在 Docker 中部署 ZooKeeper 后进行访问 #### 使用命令行工具连接到 ZooKeeper 容器内部 为了验证 ZooKeeper 是否正常运行以及对其进行基本操作,可以进入正在运行的 ZooKeeper 容器内执行 zkCli.sh 脚本。这允许用户通过交互式的客户端界面来管理和服务于 ZooKeeper。 ```bash docker exec -it <zookeeper_container_id> /bin/bash cd /opt/zookeeper/bin/ ./zkCli.sh ``` 上述命令会启动 ZooKeeper 命令行接口[^1]。 #### 设置外部主机访问 ZooKeeper 服务 为了让宿主机或其他网络中的计算机能够访问由 Docker 托管的 ZooKeeper 实例,在创建容器的时候应该指定端口映射参数 `-p` 或者 `--publish` 来暴露必要的 TCP/UDP 端口号给外界。对于标准配置下的 ZooKeeper,默认监听的是2181端口用于客户端通信。 ```bash docker run -d \ --name zookeeper \ -e ALLOW_ANONYMOUS_LOGIN=yes \ -p 2181:2181 \ bitnami/zookeeper:latest ``` 此设置使得任何位于同一局域网内的设备都可以尝试通过 `<host_ip>:2181` 访问该实例的服务。 #### 利用 Java 应用程序编程方式接入 ZooKeeper 除了直接利用命令行外,开发人员还可以借助官方提供的 Java API 构建应用程序并与远程或本地的 ZooKeeper 进行互动。下面给出了一段简单的例子展示怎样建立一个基础链接: ```java import org.apache.zookeeper.ZooKeeper; public class ZKClient { public static void main(String[] args) throws Exception{ String connectString = "localhost:2181"; // IP 地址加上端口号 int sessionTimeout = 3000; // Session超时时间 ZooKeeper zk = new ZooKeeper(connectString, sessionTimeout, event -> {}); System.out.println("ZooKeeper client initialized."); Thread.sleep(1000); zk.close(); } } ``` 这段代码展示了如何初始化一个新的 ZooKeeper 对象,并指定了服务器地址和会话超时时长。之后便可以通过这个对象调用各种方法来进行节点的操作等更多功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值