节点之间配置ssh免密,第一台节点配置完成后将目录scp到其他节点,除了5. 节点ID配置
不同以外,其他都一致
1. 安装Java环境
bash
# 安装OpenJDK 8
apt-get update
apt-get install openjdk-8-jdk -y
2. 下载并安装ZooKeeper
bash
# 下载指定版本
cd /data
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
# 解压安装
tar -zxf apache-zookeeper-3.6.2-bin.tar.gz
mv apache-zookeeper-3.6.2-bin zookeeper
# 创建必要目录
mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs
3. 配置环境变量
创建环境变量配置文件
bash
vim /etc/profile.d/zookeeper.sh
添加以下配置
bash
# ZooKeeper Environment
export ZOOKEEPER_HOME=/data/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
# Java Environment
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
# ZooKeeper Security Configuration
export ZK_CLIENT_OPTS="-Djava.security.auth.login.config=/data/zookeeper/conf/zookeeper_jaas.conf"
export JVMFLAGS="-Djava.security.auth.login.config=/data/zookeeper/conf/zookeeper_jaas.conf"
使环境变量生效
bash
source /etc/profile.d/zookeeper.sh
4. ZooKeeper配置
创建配置文件
bash
vim /data/zookeeper/conf/zoo.cfg
添加以下配置内容
properties
# 基础配置
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
admin.serverPort=8081
# 监听配置
quorumListenOnAllIPs=true
# 集群配置
server.1=172.24.77.10:2888:3888
server.2=172.24.77.11:2888:3888
server.3=172.24.77.12:2888:3888
# 四字母命令配置
4lw.commands.whitelist=*
# 自动清理配置
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
# 会话超时配置
maxSessionTimeout=60000
minSessionTimeout=4000
# 安全认证配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
jaas配置
Server是zk之间加密通信用的,Client是kafka或者zkClient使用的。默认情况下,zk谁都可以连接查询数据
yaml
$ cat zookeeper_jaas.conf
# 1. Server部分 - ZooKeeper服务器认证配置
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_super="super_password" # super是用户名,super_password是密码
user_kafka="kafka_password"; # kafka是用户名,kafka_password是密码
};
# 2. Client部分 - ZK客户端认证配置
Client {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="super" # 使用Server中定义的super用户
password="super_password"; # 必须匹配Server中user_super的密码
};
5. 节点ID配置
bash
# 在每个节点的dataDir目录下创建myid文件
# 节点1
echo "1" > /data/zookeeper/data/myid
# 节点2
echo "2" > /data/zookeeper/data/myid
# 节点3
echo "3" > /data/zookeeper/data/myid
6. 配置说明
配置项 | 说明 | 默认值 |
---|---|---|
tickTime | 基本时间单位(毫秒) | 2000 |
initLimit | 初始同步时限 | 10 |
syncLimit | 同步时限 | 5 |
clientPort | 客户端连接端口 | 2181 |
admin.serverPort | 管理端口 | 8081 |
server.X | 集群服务器配置 | - |
7. 服务管理
bash
# 启动服务
zkServer.sh start
# 检查状态
zkServer.sh status
# 停止服务
zkServer.sh stop
# 重启服务
zkServer.sh restart
8. 验证安装
bash
# 检查进程
ps aux | grep zookeeper
# 检查端口
netstat -nlpt | grep -E '2181|2888|3888|8081'
# 检查日志
tail -f /data/zookeeper/logs/zookeeper.log
9. ACL配置
shell
# 1. 首先确保已正确配置JAAS并连接(前面已经定义,这里检查一下)
export JVMFLAGS="-Djava.security.auth.login.config=/data/zookeeper/conf/zookeeper_jaas.conf"
export ZK_CLIENT_OPTS="-Djava.security.auth.login.config=/data/zookeeper/conf/zookeeper_jaas.conf"
# 2. 使用zkCli连接并认证
zkCli.sh -server localhost:2181
# 3. 查看当前ACL
[zk: localhost:2181(CONNECTED) 0] getAcl /
'world,'anyone
: cdrwa
# 4. 设置新的ACL (使用sasl方案)
[zk: localhost:2181(CONNECTED) 0] setAcl / sasl:super:cdrwa
# 5. 验证ACL已修改
[zk: localhost:2181(CONNECTED) 0] getAcl /
'sasl,'super
: cdrwa