Zookeeper的安装和运维(一)

编程

背景

最近发现了zookeeper开启全局的一个端口(绑定全部网卡),经过排查发现是JMX端口,所以这里总结一下,zookeeper的正确安装方法,以及谈一下运维安全。

zookeeper是什么

zookeeper简称zk, 是用来解决分布式协同问题的一个工具,分布式协同问题主要有:

1.数据一致性;2.节点高可用;3.网络分区等

它常见的功能有:

1.节点管理; 2.配置文件管理;3.分布式锁;4.集群管理;5.发布和订阅

zookeeper的安装

详见参考1

# 下载

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

# 解压

tar -zxvf zookeeper-3.4.6.tar.gz

# 修改配置文件

cd zookeeper-3.4.6/conf

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

## 增加以下内容

#客户端访问zk的端口

clientPort=2181

clientPortAddress=127.0.0.1

#master对应于前面在hosts里面配置的主机映射 2888是数据同步和消息传递端口,3888是选举端口

server.1=master:2888:3888

#master对应于前面在hosts里面配置的主机映射 2889是数据同步和消息传递端口,3889是选举端口

server.2=master:2888:3888

#master对应于前面在hosts里面配置的主机映射 2890是数据同步和消息传递端口,3890是选举端口

server.3=master:2888:3888

注意:

  1. 上述配置文件需自行根据实际情况修改, 例如clientPortAddress最好绑定为内网的网卡地址,避免外网访问
  2. 如果是standalone模式,非集群部署(集群部署一般是三台或者五台等奇数台),则不需要配置server.1/server.2等

zookeeper开启的端口

按照网上的说法,一般是默认打开三个端口:

  1. 2181: 对cline端提供服务
  2. 2888: zk集群内同步和消息传递端口
  3. 3888:zk选举过程中,给其它zk跟随者连接使用

但是实际上安装后,发现zookeeper还会多开启一个JMX端口,用作远程调试,这个是随机的端口号,每次启动都不一样。

下面的命令可以自行查询 zookeeper占用的所有端口

ps -ef | grep zookeeper

netstat -antlp | grep -w ${pid}

运维安全

每一个端口都对应一个服务,如果端口绑定的是全部网卡的话,则说明服务对外可以访问,如果该服务是有0-day漏洞的,则外面的黑客可以通过该端口访问到该服务,利用服务的漏洞,渗透到主机。因此,定期检查global的端口,并关闭不必要的端口显得尤为重要。

查看zookeeper开启的端口, 如下 第一行

tcp6       0      0 :::60547                :::*                    LISTEN      30147/java          

tcp6 0 0 192.168.1.5:2181 :::* LISTEN 30147/java

如需关闭,需要修改bin目录下的zkServer.sh文件

找到第46行

if [ "x$JMXDISABLE" = "x" ] || [ "$JMXDISABLE" = "false" ]

修改为

if [ 1 = 2 ]

相当于强制为false,不走打开jmx端口的逻辑

最后重启

./zkServer restart

重新查看开启的端口,发现绑在全部网卡上的随机端口消失了。

参考

https://www.cnblogs.com/leeSmall/p/9563547.html

以上是 Zookeeper的安装和运维(一) 的全部内容, 来源链接: utcz.com/z/517477.html

回到顶部