环境
三台阿里云服务器,在一个VPC网络里,就是三台服务器在一个局域网里。
在这三台服务器上,我均以host网络模式启动了一个docker容器,容器内部是ubuntu1804操作系统。host网络模式就是容器内部直接使用宿主机的网络,所以和直接在宿主机上操作其实没有区别,因此本文的搭建方法在非docker环境完全适用。
之所以选择docker,是希望可以一劳永逸,搭建这一次,搭好了把镜像存到镜像仓库,以后再部署zk集群就可以直接用了。
三台机器的内网ip如下:
服务器1:172.17.119.207
服务器2:172.17.119.206
服务器3:172.17.119.204
zookeeper的安装和配置
1.从官网下载包,这个下载过程会有些慢,耐心等待即可
cd /home/pdds
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.4-beta/zookeeper-3.5.4-beta.tar.gz
其中,/home/pdds是我的主文件夹,下载到哪以及安装在哪无所谓,根据你的情况而定,我这次安装就都直接装在主文件夹里了。
2.解压
tar -xf zookeeper-3.5.4-beta/zookeeper-3.5.4-beta.tar.gz
3.创建data和logs目录,分别用于存放数据和日志,建在哪里也根据你的情况而定,我就直接放在zookeeper文件夹里
cd /home/pdds/zookeeper-3.5.4-beta
mkdir data
mkdir logs
4.编写配置文件,具体含义不解释了(我也说不太清),都可以根据你的项目需求而改
vi /home/pdds/zookeeper-3.5.4-beta/conf/zoo.cfg
加入以下内容:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/pdds/zookeeper-3.5.4-beta/data
dataLogDir=/home/pdds/zookeeper-3.5.4-beta/logs
clientPort=2181
server.1=172.17.119.207:2888:3888
server.2=172.17.119.206:2889:3889
server.3=172.17.119.204:2890:3890
5.前4步,三台服务器的操作完全一致,包括配置文件也写成一样的,最后,需要告诉每个服务器自己的id是多少
在三台服务器的data路径下创建myid文件,并将服务器序号写入
vi /home/pdds/zookeeper-3.5.4-beta/data/myid
在3台服务器上分别写入1,2,3,注意要和配置文件里的server序号相对应。
安装jdk
zookeeper服务运行需要java环境,需要安装jdk。
安装方法参考ubuntu16.04搭建jdk1.8运行环境
完全按照里面的步骤执行即可,亲测可用。
启动集群
在三台服务器上,均执行以下命令,启动zookeeper服务器。
cd /home/pdds/zookeeper-3.5.4-beta/bin
./zkServer.sh start
看到以下内容说明启动成功。
验证
验证分为两步,首先,验证3个zk节点是否完成了选举。
在3个节点均执行以下命令:
cd /home/pdds/zookeeper-3.5.4-beta/bin
./zkServer.sh status
此时应有一个leader和两个follower,所以如果在两台服务器看到mode是follower,一台服务器上看到mode是leader,说明集群正常运行了。
然后,就可以试着在一个节点写数据,然后看另外2个节点是不是同步上了。
首先,在三台机器上都打开zk客户端。
cd /home/pdds/zookeeper-3.5.4-beta/bin
./zkCli.sh
执行完应该是这样的:
然后,查看当前的根路径:
ls /
会发现目前只有一个zookeeper节点:
接下来,在任意一个节点上创建一个test节点:
然后在其他两个节点上查看,如果能看到test,说明同步上了。