zookeeper集群安装
安装ansible
# yum install -y epel-release # yum install -y ansible # vim /etc/ansible/hosts [zk] zk0[1:3]
# ansible zk -m copy -a 'src=/etc/hosts dest=/etc/'
配置免密
zk01节点
# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P "" # yum install -y sshpass # for i in zk0{1..3};do sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" $i;done
其他两节点
# ansible zk0[2:3] -m -a 'ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ""' # ansible zk0[2..3] -m yum -a 'name=sshpass state=installed'
# for i in zk0{1..3};do sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub '-o StrictHostKeyChecking=no' $i;done
安装jdk
# mkdir /opt/module # tar xfz jdk-8u201-linux-x64.tar.gz -C /opt/module # ln -sv /opt/module/jdk1.8.0_201/ /opt/module/jdk # vim /etc/profile export JAVA_HOME=/opt/module/jdk export PATH=$PATH:$JAVA_HOME/bin source /etc/profile
同步文件到其他节点
# ansible zk0[2..3] -m yum -a "name=rsync state=installed" # ansible zk -m file -a "path=/opt/module state=directory" # ansible zk0[2..3] -m synchronize -a "src=/opt/module/jdk1.8.0_201 dest=/opt/module perms=yes" # ansible zk0[2..3] -m file -a "src=/opt/module/jdk1.8.0_201 state=link dest=/opt/module/jdk" # ansible zk0[2..3] -m synchronize -a "src=/etc/profile dest=/etc" # ansible zk0[2..3] -m shell -a "source /etc/profile"
安装zookeeper
# tar xfz apache-zookeeper-3.5.5-bin.tar.gz -C /opt/module/ # ln -sv /opt/module/apache-zookeeper-3.5.5-bin /opt/module/zookeeper # echo -e "export ZOOKEEPER_HOME=/opt/module/zookeeper\nexport PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH" >> /etc/profile # source /etc/profile
配置zookeeper
# 滴答时间,默认是2000毫秒,即2秒。它是zookeeper最小的时间单位 tickTime=2000 #表示用于在从节点与主节点之间建立初始化连接的时间上限 initLimit=10 #表示允许从节点与主节点处于不同步状态的时间上限,和initLimit一样,都是tickTime的倍数 syncLimit=5 # 快照日志目录 dataDir=/opt/module/apache-zookeeper-3.5.5-bin/zkSnapshot # 事务日志目录 dataLogDir=/opt/module/apache-zookeeper-3.5.5-bin/zkTxData # 客户端连接端口 clientPort=2181 # 限制连接到 ZooKeeper 的客户端的数量,此配置选项可以用来阻止某些类别的 Dos 攻击。默认为60,不支持以系统属性方式配置。从Socket层面限制单个客户端与单台服务器之间的并发连接数,即以ip地址来进行连接数的限制。 # 如果设置为0,表示不做任何限制。仅仅是单台客户端与单个Zookeeper服务器连接数的限制,不能控制所有客户端的连接数总和。 #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # 指定了需要保留的文件数目。默认是保留3个。 #autopurge.snapRetainCount=3 # 3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置成1或更大的整数,默认是0,表示不开启自动清理功能。 #autopurge.purgeInterval=1 # 用于配置Zookeeper服务器是否在提交的时候,将日志写入操作强制刷入磁盘,默认情况下,每次事务日志写入操作都会实时刷入磁盘,如果设置为“no”,则能一定程度的提高ZooKeeper的写性能,但会存在类似机器断电等安全风险。 # forceSync=yes # 用于配置Leader服务器是否能够接受客户端的连接,即是否允许Leader向客户端提供服务。默认情况下,Leader服务器能够接受并处理客户端的所有读写请求。 #在Zookeeper的架构设计中,Leader服务器主要用来进行对事务更新。请求的协调以及集群本身的运行时协调,因此可以设置让Leader服务器不接受客户端的连接,以使其专注于进行布式协调。 # leaderServes=yes #服务器地址遵循 server.X=hostname:peerPort:leaderPort 格式,X为服务器的ID,它必须是一个整数,不过不一定要从 0 开始,也不要求是连续的;hostname服务器的机器名或 IP 地址;peerPort用于节点间通信的 TCP 端口;leaderPort用于首领选举的 TCP 端口。 server.1=zk01:2888:3888 server.2=zk02:2888:3888 server.3=zk03:2888:3888
创建日志目录
# mkdir /opt/module/apache-zookeeper-3.5.5-bin/zkTxData # mkdir /opt/module/apache-zookeeper-3.5.5-bin/zkSnapshot
分发配置
# ansible zk0[2..3] -m synchronize -a "src=/opt/module/apache-zookeeper-3.5.5-bin dest=/opt/module/ perms=yes rsync_opts=--exclude=myid "
创建myid文件等
# ansible zk0[2..3] -m file -a "src=/opt/module/apache-zookeeper-3.5.5-bin state=link dest=/opt/module/zookeeper" # echo 1 > /opt/module/zookeeper/zkSnapshot/myid # ansible zk02 -m shell -a 'echo 2 > /opt/module/zookeeper/zkSnapshot/myid' # ansible zk03 -m shell -a 'echo 3 > /opt/module/zookeeper/zkSnapshot/myid' # ansible zk0[2..3] -m synchronize -a "src=/etc/profile dest=/etc" # ansible zk0[2..3] -m shell -a "source /etc/profile"
编写zookeeper启动脚本
# cat /usr/local/bin/zookeeper_manager.sh #!/bin/bash #判断用户是否传参 if [ $# -ne 1 ];then echo "无效参数,用法为: $0 {start|stop|restart|status}" exit fi #获取用户输入的命令 cmd=$1 #定义函数功能 function zookeeperManger(){ case $cmd in start) echo "启动服务" remoteExecution start ;; stop) echo "停止服务" remoteExecution stop ;; restart) echo "重启服务" remoteExecution restart ;; status) echo "查看状态" remoteExecution status ;; *) echo "无效参数,用法为: $0 {start|stop|restart|status}" ;; esac } #定义执行的命令 function remoteExecution(){ for (( i=1 ; i<=3 ; i++ )) ; do tput setaf 2 echo ========== zk0${i} zkServer.sh $1 ================ tput setaf 9 ssh zk0${i} "source /etc/profile ; zkServer.sh $1" done } #调用函数 zookeeperManger
# chmod +x /usr/local/bin/zookeeper_manager.sh
启动zookeeper
# zookeeper_manager.sh start 启动服务 ========== node1 zkServer.sh start ================ ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ========== node2 zkServer.sh start ================ ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ========== node3 zkServer.sh start ================ ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
查看监听情况
[root@zk02 zookeeper]# ss -lntp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* users:(("sshd",pid=6344,fd=3)) LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=6550,fd=13)) LISTEN 0 50 ::ffff:10.0.0.22:2888 :::* users:(("java",pid=8395,fd=48)) LISTEN 0 50 ::ffff:10.0.0.22:3888 :::* users:(("java",pid=8395,fd=46)) LISTEN 0 50 :::8080 :::* users:(("java",pid=8395,fd=41)) LISTEN 0 50 :::37489 :::* users:(("java",pid=8395,fd=32)) LISTEN 0 128 :::22 :::* users:(("sshd",pid=6344,fd=4)) LISTEN 0 100 ::1:25 :::* users:(("master",pid=6550,fd=14)) LISTEN 0 50 :::2181 :::* users:(("java",pid=8395,fd=37))
zookeeper的jetty端口
zookeeper中会使用jetty,其端口是8080,如果使用springboot与zookeeper整合,springboot内置的Tomcat的8080端口会被占用
修改zookeeper的jetty端口,需要在zoo.cfg配置文件中添加:admin.serverPort=端口号
posted on 2020-03-07 15:25 hopeless-dream 阅读(276) 评论(0) 编辑 收藏 举报