docker zookeeper集群搭建

---------------------------------------------------------

| zookeeper集群的搭建,从两个方法着手,

|      1.   遇见的问题

|      2.   搭建过程

----------------------------------------------------------

遇见的问题

查看日志

zookeeper-2181容器创建成功,但是无法启动,

查看docker容器的日志, 发现有这个错误

Invalid config, exiting abnormally

解决方式:

1.zoo.cfg配置文件中,每行后面有多余的空格,,,,,我的是这个原因引起

2.myid配置文件转中,出现字符(只能是数字),,,,,这个是网上说的,可以试试

 

进入到容器内部,发现集群没有正常工作。

+++++++++++++++++++++++++++++++++++++++++++++++++++++

方法一:

网上查找说的是tomcat服务使用的8080端口,zookeeper使用的也是8080端口,

如果机器上同时安装这两个服务,则需要修改tomcat的端口

查看是否有tomcat服务启动,发现没有tomcat服务启动,则不是这个问题。

安装telnet服务 

 查看8080端口是否通

 

查看防火墙,是否开放8080端口 

 firewall-cmd --zone=public --query-port=8080/tcp

 

查看当前起作用的zone

firewall-cmd --get-active-zones

 

开放8080端口 

  firewall-cmd --zone=public --add-port=8080/tcp --permanent

重启防火墙,配置的规则才会生效 

 

 100的机器开通了8080端口,102的机器没有开通,则连接失败

 8080,2181,2888,3888

开通端口的shell脚本

vim zookeeperPart.sh       

chmod 700 zookeeperPart.sh

. zookeeperPart.sh

#!/src/bin/bash
port1=`firewall-cmd --zone=public --add-port=8080/tcp --permanent`
echo "8080----> $? "
port2=`firewall-cmd --zone=public --add-port=2181/tcp --permanent`
echo "2181----> $? "
port3=`firewall-cmd --zone=public --add-port=3888/tcp --permanent`
echo "3888----> $? "
port4=`firewall-cmd --zone=public --add-port=2888/tcp --permanent`
echo "2888----> $? "
firewalld=`systemctl restart firewalld.service`
echo "firewall----> $? "

 重启zookeeper-2181容器

发现容器集群还是没有启动(给防火墙开放端口失败,应该是还有其它的操作)

这个时候我将101这台机器的防火墙关闭,则该机器变为(leader)(这样是变相的通过端口的方式完成了集群的搭建,不过不可取,防火墙在生产环境是不能关闭的)

 发现:集群中如果有一台机器的防火墙关闭了,则其他子节点都需要通过该机器进行通信,则该机器自然成为 leader

方法二:

简单的方式,将所有机器的防火墙关闭,该方法简单粗暴,适合于开发测试环境

+++++++++++++++++++++++++++++++++++++++++++++++++++++

 

搭建过程

1.准备3台服务器(虚拟机)(我这里使用的centos7.7)

2.设置为固定的ip(192.168.232.100  ,192.168.232.101,   192.168.232.102)

3.拉取zookeeper的docker镜像(拉取的时候尽量配置一下aliyun的docker加速器,https://blog.csdn.net/yang_zzu/article/details/104849132 这篇文章我有说明怎么使用aliyun加速器,搜索:阿里云,就能看到)每台服务器都要拉取镜像。

4.执行安装脚本,脚本内容如下

vim zookeeper.sh

chmod 700 zookeeper.sh

. zookeeper.sh 

脚本的数据需要根据自己服务器的情况进行修改,

网卡,ip,server.xxx,配置文件地址(如果有reshuffle要求自己进行修改)

脚本内容 

#!/usr/bin/bash
#zookeeper集群搭建
#创建文件夹
if [ ! -d /zookeeper/conf ];then
	mkdir -p /zookeeper/conf
	if [ $? -eq 0 ];then
		echo '创建 /zookeeper/conf 成功.................'
	else
		echo '创建 /zookeeper/conf 失败!!!!!!!!!!'
		exit 1
	fi
fi
if [ ! -d /zookeeper/data ];then
	mkdir -p /zookeeper/data
    if [ $? -eq 0 ];then
		echo '创建 /zookeeper/conf 成功.................'
    else
		echo '创建 /zookeeper/conf 失败!!!!!!!!!!'
        exit 1
    fi	
fi
#创建配置文件
if [ -d /zookeeper/conf ];then
	echo "#客户端连接端口,监听客户端连接的端口
clientPort=2181
#数据文件目录+数据持久化路径
dataDir=/data
#日志文件目录
dataLogDir=/data/log
#通信心跳数,单位ms 
tickTime=2000
#leader(L)-follower(F)初始通信时限,initLimit*tickTime
initLimit=5
#leader(L)-follower(F)同步通信时限,syncLimit*tickTime
syncLimit=2
#
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
#根据集群的ip地址,进行设置,server.XXX,这个XXX在后面还要用到
server.000=192.168.232.100:2888:3888
server.001=192.168.232.101:2888:3888
server.002=192.168.232.102:2888:3888" > /zookeeper/conf/zoo.cfg
	if [ $? -eq 0 ];then
		echo "创建 /zookeeper/conf/zookeper.cfg 成功................."
	else
		echo "创建 /zookeeper/conf/zookeper.cfg 失败!!!!!!!!!"
		exit 1
	fi
fi
#获得该服务器的IP地址,网卡 ens33 需要查看服务器的网卡名称,进行调整
ip=`ifconfig ens33 | grep 'inet' | awk '{ print $2}' | egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'`

#创建 /zookeeper/data/myid 用到前面设置的 XXX 内容
if [ "$ip" = "192.168.232.100" ];then
	echo "ip地址为:$ip"
	echo "000" > /zookeeper/data/myid
	if [ $? -eq 0 ];then
		echo "创建 /zookeeper/data/myid 成功................."
	else
		echo "创建 /zookeeper/data/myid 失败!!!!!!!!!"
		exit 1
	fi
elif [ "$ip" = "192.168.232.101" ];then
	echo "ip地址为:$ip"
    echo "001" > /zookeeper/data/myid
	if [ $? -eq 0 ];then
		echo "创建 /zookeeper/data/myid 成功................."
	else
		echo "创建 /zookeeper/data/myid 失败!!!!!!!!!"
		exit 1
	fi
elif [ "$ip" = "192.168.232.102" ];then
	echo "ip地址为:$ip"
    echo "002" > /zookeeper/data/myid
	if [ $? -eq 0 ];then
		echo "创建 /zookeeper/data/myid 成功................."
	else
		echo "创建 /zookeeper/data/myid 失败!!!!!!!!!"
		exit 1
	fi
fi

#启动docker服务
echo '启动docker服务...............'
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
restartdocker=`systemctl restart docker.service`
if [ $? -eq 0 ];then
	echo 'docker服务启动成功........................'
else
	echo 'docker服务启动失败!!!!!!!!!!!!'
	exit 1
fi

#开启防火墙
echo '启动firewalld服务...............'
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
restartfirewalld=`systemctl restart firewalld.service`
if [ $? -eq 0 ];then
    echo 'firewalld服务启动成功......................'
else
	echo 'firewalld服务启动失败!!!!!!!!!!!!'
    exit 1
fi

#判断是否之前存在zookeeper-2181容器,如果有则清除容器,没有则创建容器
zookeeperId=`docker ps -a | grep zookeeper-2181 | awk '{print $1}'`
if [ ! -n "$zookeeperId" ];then
	echo "容器id为:$zookeeperId"
else
	echo "容器id为:$zookeeperId"
	echo "正在清除之前的zookeeper-2181容器..................."
	echo ">>>>>>>>>>>>>>>>>>>>>>>"
	zookeeperStop=`docker stop $zookeeperId`
	if [ $? -eq 0 ];then
		echo "zookeeper-2181容器停止成功..................."
		zookeeperRm=`docker rm $zookeeperId`
		if [ $? -eq 0 ];then
			echo "zookeeper-2181容器清除成功..................."
		else
			echo "zookeeper-2181容器清除失败!!!!!!!!!!!!"
			exit 1
		fi
	else
		echo "zookeeper-2181容器停止失败!!!!!!!!!!!!"
		exit 1
	fi
fi

#运行zookeeper镜像
echo '创建zookeeper容器...............'
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
irunzookeeper=`docker run -i -t -d --network host -v /zookeeper/data:/data -v /zookeeper/conf:/conf --name zookeeper-2181 zookeeper`
if [ $? -eq 0 ];then
    echo 'docker服务启动成功.................'
else
	echo 'docker服务启动失败!!!!!'
	exit 1
fi




5.将脚本推到其他服务器(或者在其他服务器上面再进行复制粘贴,权限修改,执行)

推送 scp zookeeper.sh [email protected]:~

将zookeeper.sh 文件推送到 101 服务器的root用户的根目录下。

推送完成后,执行脚本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章