ZOOKEEPER部署(集群/伪集群)+zkui部署

(一)服务注册与发现

服务注册:服务进程在注册中心注册自己的位置。它通常注册自己的主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的详细资料。

服务发现:客户端应用进程向注册中心发起查询,来获取服务的位置。服务发现的一个重要作用就是提供一个可用的服务列表,如DNS(缓存机制有时会造成不便),nginx+hosts(人工维护)

(二)zookeeper应用部署

1,关闭防火墙,关闭selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2,安装JDK

yum -y install java-11-openjdk java-11-openjdk-devel
java -version

3,zookeeper包下载地址:

wget -c -O zookeeper.tar.gz https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
tar -xvf zookeeper.tar.gz
mv apache-zookeeper-3.5.7-bin/ /usr/local/zookeeper
cd !$
mkdir /usr/local/zookeeper/logs /usr/local/zookeeper/data
cd /usr/local/zookeeper/conf
cat zoo_sample.cfg |grep -v ^$ |grep -v ^"#" > zoo.cfg
vim zoo.cfg

Ps:在使用zookeeper 3.6之后的版本,开启服务器,zk会自动占用8080端口用来支持jmx调用,而后端服务器大部分都需要使用8080端口,因此需要zk的配置文件即可。在zk conf目录里面,修改zoo.cfg,在其中定义admin.serverPort

# admin.serverPort 默认占8080端口
admin.serverPort=8888

Ps:如果不用admin端口,在启动脚本zkServer.sh加上"-Dzookeeper.admin.enableServer=false",重启即可,大概在159行,启动命令那里。
在这里插入图片描述
Observer是一种新型的Zookeeper节点,可以在不伤害写性能的情况下扩展Zookeeper。Observer不参与投票,只是简单的接收投票结果,因此我们增加再多的Observer,也不会影响集群的写性能。除了这个差别,其他的和Follower基本上完全一样。使用Observer模式,可以在对应节点的配置文件添加peerType配置及指定observer角色.Zookeeper之基于Observer部署架构

peerType=observer
server.1:localhost:2181:3181:observer

跳过acl检查,如果不设置成yes,则需要superuser权限才能执行reconfig,动态配置时候需要用到,参考文章:zookeeper动态配置

skipACL=yes
#zkp服务端与客户端心跳时间,单位ms,这里是2s。
tickTime=2000
#leader和follwer初始连接时候最多忍受时间。initLimit*tickTime
initLimit=10
#leader和follwer通信超时时间,syncLimit*tickTime,leader认为follwer死掉,从服务器列表中删除follwer。
syncLimit=5
#zkp日志目录(自定义更改)
dataLogDir=/usr/local/zookeeper/logs
#zkp数据目录(自定义更改)
dataDir=/usr/local/zookeeper/data
#客户端连接端口
clientPort=2181
#admin.serverPort 默认占8080端口
admin.serverPort=8080
#IP1指的是组成Zookeeper服务器的IP地址,3188为组成zookeeper服务器之间的通信端口,3288为用来选举leader的端口(这里用单机集群(伪集群)。)
server.1=ip1:3188:3288
server.2=ip1:3388:3488
server.3=ip1:3588:3688:observer
#可合并写成
#server.1=ip1:3188:3288;0.0.0.0:2181

伪集群模式可如上再创建data1,data2,logs1,logs2,zoo.cfg1,zoo.cf2。配置一一对应。clientPort不要冲突,可以用2181,2182,2183.
在这里插入图片描述
在这里插入图片描述
注意:

  • 并不是非得用 2888:3888,若ip是一样的,将端口改成其他都可以。
  • server.x ,x必须为数字,并且是唯一的。
  • zookeeper 服务集群数必须为奇数,最少支持数为 3
  • 集群这里需要配置外,还需要指定一个 myid文件

在对应的data目录下创建文件myid文件并写入id号

echo "1" > data/myid
echo "2" > data1/myid
echo "3" > data2/myid
/usr/local/zookeeper/bin/zkServer.sh start zoo.cfg*
/usr/local/zookeeper/bin/zkServer.sh status zoo.cfg*
/usr/local/zookeeper/bin/zkServer.sh stop zoo.cfg*

使用systemd守护进程管理

[Unit]
Description=Zookeeper server daemon
After=network.target
 
[Service]
Type=forking
Environment=JAVA_HOME=xxxx
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zoo.cfg
#ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
PIDFile=/usr/local/zookeeper/data/zookeeper_server.pid
KillMode=none
#Restart=always
Restart=on-failure
RestartSec=42s
 
[Install]
WantedBy=multi-user.target

使用service管理

vim /etc/init.d/zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper'
case $1 in
start)
  echo "zookpeeper 启动"
$ZK_HOME/bin/zkServer.sh start $ZK_HOME/conf/zoo.cfg
;;
stop)
  echo "zookpeeper 停止"
$ZK_HOME/bin/zkServer.sh stop $ZK_HOME/conf/zoo.cfg
;;
restart)
  echo "zookpeeper 重启"
$ZK_HOME/bin/zkServer.sh restart $ZK_HOME/conf/zoo.cfg
;;
status)
  echo "zookpeeper 状态"
$ZK_HOME/bin/zkServer.sh status $ZK_HOME/conf/zoo.cfg
;;
*)
  echo "Usage: $0 {start|stop|restart|status}"
esac
chmod +x /etc/init.d/zkp
chkconfig --add zkp
service zkp status

启动后,会监听leader的集群通信端口,以及所有节点的leader推举端口和cli端口,和admin.serverPort。

参考文档

Zookeeper部署

(三)部署可视化界面zkui

1,安装zkui

cd /usr/local
git clone https://github.com/DeemOpen/zkui.git
cd zkui/
mvn clean install -DskipTests

2,创建守护进程

mkdir -p /data/projects/zkui
cp /usr/local/zkui/target/zkui-2.0-SNAPSHOT-jar-with-dependencies.jar /data/projects/zkui/
cp /usr/local/zkui/config.cfg /data/projects/zkui/
vim /usr/lib/systemd/system/zkui.service
[Unit]
Description=zkui server daemon
After=network.target

[Service]
Type=simple
WorkingDirectory=/data/projects/zkui
ExecStart=/bin/bash -c "exec /usr/bin/java -jar /data/projects/zkui/zkui-2.0-SNAPSHOT-jar-with-dependencies.jar  >>/data/projects/zkui/zkui.log 2>&1"
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
KillMode=process
#Restart=always
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start zkui

配置使用https
在这里插入图片描述

https=true
keystoreFile=/data/ssl/localip/zkui.jks
keystorePwd=123456
#keystoreManagerPwd=password

3,访问账号admin,密码manager配置文件config.cfg中写死的
在这里插入图片描述
点击栏目中的Hosts出现以下内容。
在这里插入图片描述
在这里插入图片描述

cd /usr/local/zookeeper/bin/
./zkCli.sh -server localhost:2181
[zk: localhost:2181(CONNECTED) 0] create /appconfig
Created /appconfig
[zk: localhost:2181(CONNECTED) 1] create /appconfig/hosts
Created /appconfig/hosts
[zk: localhost:2181(CONNECTED) 0] quit

在这里插入图片描述
点击Monitor出现以下内容(使用四字命令或者zk ui界面查看zookeeper集群时)
在这里插入图片描述
解决方法1
在zoo.cfg 文件里加入配置项让这些指令放行

#开启四字命令
4lw.commands.whitelist=*

解决方法2
在zk的启动脚本zkServer.sh中新增放行指令

    ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=$JMXPORT -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH -Dcom.sun.management.jmxremote.ssl=$JMXSSL -Dzookeeper.jmx.log4j.disable=$JMXLOG4J org.apache.zookeeper.server.quorum.QuorumPeerMain"
  fi
else
    echo "JMX disabled by user request" >&2
    ZOOMAIN="org.apache.zookeeper.server.quorum.QuorumPeerMain"
fi
 
#添加VM环境变量-Dzookeeper.4lw.commands.whitelist=*
ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}"
 
if [ "x$SERVER_JVMFLAGS" != "x" ]
then
    JVMFLAGS="$SERVER_JVMFLAGS $JVMFLAGS"
fi

在这里插入图片描述
保存修改后重启zookeeper
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值