hopeless-dream

导航

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编辑  收藏  举报