docker的zookeeper官网地址:https://hub.docker.com/_/zookeeper
安装步骤
拉去image:
docker pull zookeeper
启动3台容器,该方法可用于一台服务器伪集群也可用于多台服务器真集群
docker run -d -p 2111:2181 -p 2881:2888 -p 3881:3888 \
-v /home/zookeeper/zookeeper1/data:/data/ \
-v /home/zookeeper/zookeeper1/datalog:/datalog/ \
-v /home/zookeeper/zookeeper1/logs:/logs/ \
-v /home/zookeeper/zookeeper1/conf:/conf/ \
-e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" \
-e ZOO_SERVERS="server.1=0.0.0.0:2888:3888;2181 server.2=106.152.239.39:2882:3882;2121 server.3=106.152.239.39:2883:3883;2131" \
-e ZOO_MY_ID=1 \
--name=myzookeeper1 \
--privileged zookeeper \
docker run -d -p 2121:2181 -p 2882:2888 -p 3882:3888 \
-v /home/zookeeper/zookeeper2/data:/data/ \
-v /home/zookeeper/zookeeper2/datalog:/datalog/ \
-v /home/zookeeper/zookeeper2/logs:/logs/ \
-v /home/zookeeper/zookeeper2/conf:/conf/ \
-e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" \
-e ZOO_SERVERS="server.1=106.152.239.39:2881:3881;2111 server.2=0.0.0.0:2888:3888;2181 server.3=106.152.239.39:2883:3883;2131" \
-e ZOO_MY_ID=2 \
--name=myzookeeper2 \
--privileged zookeeper \
docker run -d -p 2131:2181 -p 2883:2888 -p 3883:3888 \
-v /home/zookeeper/zookeeper3/data:/data/ \
-v /home/zookeeper/zookeeper3/datalog:/datalog/ \
-v /home/zookeeper/zookeeper3/logs:/logs/ \
-v /home/zookeeper/zookeeper3/conf:/conf/ \
-e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" \
-e ZOO_SERVERS="server.1=106.152.239.39:2881:3881;2111 server.2=106.152.239.39:2882:3882;2121 server.3=0.0.0.0:2888:3888;2181" \
-e ZOO_MY_ID=3 \
--name=myzookeeper3 \
--privileged zookeeper \
这里一定注意官网的说明
3.5之后的版本已经开始不再使用clientPortAddress
故此ZOO_SERVERS里的本机信息是用于端口配置的并非用于集群通信,所以千万不要写映射端口,这里千万要注意
例如容器3的配置文件中
-e ZOO_SERVERS="server.1=106.152.239.39:2881:3881;2111 server.2=106.152.239.39:2882:3882;2121 server.3=0.0.0.0:2888:3888;2181" \
-e ZOO_MY_ID=3 \
正确
-e ZOO_SERVERS="server.1=106.152.239.39:2881:3881;2111 server.2=106.152.239.39:2882:3882;2121 server.3=106.152.239.39:2883:3883;2131" \
-e ZOO_MY_ID=3 \
错误
至少3.5之后这种配置是走不通的
注意
-e ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
该配置是开启日志,若不需要日志可以去掉该配置
请在conf文件夹中放入 log4j.properties
#
# ZooKeeper Logging Configuration
#
log4j.rootLogger=INFO, DEBUG, ERROR
# DEBUG
log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.Threshold=DEBUG
log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUG.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n
log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd'.log'
log4j.appender.DEBUG.append=true
log4j.appender.DEBUG.File=/logs/zk_debug.log
# INFO
log4j.appender.INFO=org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFO.Threshold=INFO
log4j.appender.INFO.layout=org.apache.log4j.PatternLayout
log4j.appender.INFO.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n
log4j.appender.INFO.datePattern='.'yyyy-MM-dd'.log'
log4j.appender.INFO.append=true
log4j.appender.INFO.File=/logs/zk_error.log
# ERROR
log4j.appender.ERROR=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ERROR.Threshold=ERROR
log4j.appender.ERROR.layout=org.apache.log4j.PatternLayout
log4j.appender.ERROR.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n
log4j.appender.ERROR.datePattern='.'yyyy-MM-dd'.log'
log4j.appender.ERROR.append=true
log4j.appender.ERROR.File=/logs/zk_error.log
运行就会打印日志在logs文件夹,具体日志需求可配置相应级别减少日志输出
记得云服务器(阿里云、腾讯云)安全组的端口设置问题
具体其他配置和机关还是建议查看开头提供的官网