虚拟机搭建伪zk集群

参考资料
https://www.jianshu.com/p/d6414b5295b8
http://www.cnblogs.com/zhangzl419/p/7274151.html
https://www.jianshu.com/p/f604faff2424

基础环境
虚拟化软件:VMware Workstation Pro 12.5.7 下载地址:http://www.nruan.com/vmware12.html
虚拟机系统版本:CentOS-7-x86_64
zk版本:3.4.11
JDK版本:1.8

本机xshell连接虚拟机(如果需要使用xshell连接的话)
1、网络配置改为“仅主机模式”
2、虚拟机系统内修改网络配置文件

cd /etc/sysconfig/network-scripts/ifcfg-ens33

配置内容如下:

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"#刚开始dhcp,后来改成static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="15bb16c3-19f4-434c-a926-2147fc74de0f"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.197.2"#IP地址
NETMASK="255.255.255.0"# 子网掩码

3、重启服务,使配置生效

service network restart # 重启网络服务`

4、本机网络配置,找到VMnet1,修改ipv4设置
子网掩码和步骤2中的一致,ip地址和步骤2中的处在同一网段

5、使用xshell,因为网络使用了主机模式,所以无法使用yum命令,解析域名,需要改为NAT,然后在虚拟机里跑命令

安装jdk

mkdir /home/zpzeng/app
tar -zxvf jdk-8u162-linux-x64.tar.gz -C /home/zpzeng/app #解压

配置环境变量

vi /etc/profile

在文件最后添加一下内容:

export JAVA_HOME=/home/zpzeng/app/jdk1.8.0_162
export PATH=$PATH:$JAVA_HOME/bin

刷新配置,使其生效

source /etc/profile

搭建伪zk集群
1、将zk安装包copy到/home/zpzeng/zk34/
2、创建三个节点路径:node1,node2,node3,并将zk压缩包分别解压到三个节点路径下,形成如下的结构
/home/zpzeng/zk34/node1
/home/zpzeng/zk34/node2
/home/zpzeng/zk34/node3
3、在node路径下,建立data路径,logs路径,在data路径下创建myid文件。myid文件的内容是当前节点在集群中的编号,node1节点的编号就写成1,后边的node2的编号是2,node3的编号就是3。
4、为每个节点创建配置文件
文件解压后自带一个sample的配置文件,/node1/conf/zoo_sample.cfg。要么新建一个zoo.cfg的配置文件,要么将sample文件改成zoo.cfg,需要在每个节点上都修改
配置内容如下,可以按照各自需求修改。此处因为是在一台虚拟机上模拟3个zk机器,实际zk配置在3台机器上,配置上有些不一样,后文会提到。
模拟的时候,每个节点的dataDir,dataLogDir,clientPort要注意不一样

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/zpzeng/zk34/node1/data
dataLogDir=/home/zpzeng/zk34/node1/logs
clientPort=2181
server.1=192.168.197.2:8881:7771
server.2=192.168.197.2:8882:7772
server.3=192.168.197.2:8883:7773

字段的解释如下:

tickTime: zookeeper中使用的基本时间单位,毫秒值,比如可以设为1000,那么基本时间单位就是1000ms,也就是1s。
initLimit: zookeeper集群中的包含多台server,其中一台为leader,集群中其余的server为follower,initLimit参数配置初始化连接时,follower和leader之间的最长心跳时间。如果该参数设置为5,就说明时间限制为5倍tickTime,即5*1000=5000ms=5s。
syncLimit: 该参数配置leader和follower之间发送消息,请求和应答的最大时间长度。如果该参数设置为2,说明时间限制为2倍tickTime,即2000ms。
dataDir: 数据目录. 可以是任意目录,一般是节点安装目录下data目录。
dataLogDir: log目录, 同样可以是任意目录,一般是节点安装目录下的logs目录。如果没有设置该参数,将使用和dataDir相同的设置。
clientPort: 监听client连接的端口号。
server.X=A:B:C 其中X是一个数字, 表示这是第几号server,它的值和myid文件中的值对应。A是该server所在的IP地址。B是配置该server和集群中的leader交换消息所使用的端口。C配置选举leader时所使用的端口。由于配置的是伪集群模式,所以各个server的B, C参数必须不同,如果是真正分布式集群,那么B和C在各个节点上可以相同,因为即使相同由于节点处于不同的服务器也不会导致端口冲突。

5、启动zk集群

bin/zkServer.sh start

如果没有执行权限

chmod a+xwr bin/zkServer.sh

6、启动之后通过bin/zkServer.sh status 查看是否真的启动成功,start之后的结果并不一定是真的启动成功了
正常结果如下

ZooKeeper JMX enabled by default
Using config: /home/zpzeng/zk34/node3/bin/../conf/zoo.cfg
Mode: leader
ZooKeeper JMX enabled by default
Using config: /home/zpzeng/zk34/node2/bin/../conf/zoo.cfg
Mode: follower

7、如果没有启动成功,可以通过Zookeeper.out查看日志。
如果打开out报错

nohup: failed to run command ‘java’: No such file or directory

那么在zkServer.sh开头加入之前配置的jdk地址,重新启动就好了

export JAVA_HOME=/home/zpzeng/app/jdk1.8.0_162
export PATH=$PATH:$JAVA_HOME/bin

8.在虚拟机里启动

bin/zkCli.sh -server 192.168.197.2

如果是同样java的报错,在sh里加上第7步的环境变量配置
如此在虚拟机里已经能正常连接了。

**但是!**在主机里面,cmd连接虚拟机集群连接不上,能ping通ip,但是端口就是连接不上。
然后把虚拟机的防火墙给干掉了,下面命令重启后生效

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

真机部署
1、防火墙应该是开放部分端口
2、zoo.cfg的配置,每个机器的端口可以一样, 只要配置的ip不一样就可以

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值