近期在学习Zookeeper,将服务注册进去并能够正常使用。由于Zookeeper依赖于Java和Linux,所以中间还碰到了一些虚拟机上的问题,在此记录一下,共同学习一下。
一:Zookeeper的安装与启动
Zookeeper是一个分布式协调服务,一般用来做服务注册中心。Zookeeper的数据是存储在内存中的,因此效率较高,内部数据的存储类似于windows的文件存储结构,采用分层存储。不同的是,Zookeeper的每个节点称为ZNode,每个节点下都可以存储数据,但是每个节点存储的数据不能超过1M。
1:软件环境
首先需要确保linxu中已经安装了JDK7版本或以上,因为Zookeeper的服务器是由Java创建的。
2:下载安装包并解压
官网:https://zookeeper.apache.org/
点击对应版本下载即可,一般不要下载最新的,下载个稳定版即可。
下载完成之后解压即可。
//切换到opt目录 cd /opt //新建zookeeper文件夹 mkdir zookeeper //切换到zookeeper文件夹 cd /opt/zookeeper //解压到当前目录,注意这里是你下载的版本压缩包 tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
3:配置
解压完毕后,需要添加一些配置,为以后的运行做准备。
1:创建存储目录
//切换目录 cd /opt/zooKeeper/ //创建存储目录 mkdir zkdata //进入conf目录 cd /apache-zookeeper-3.7.1-bin/conf //拷贝一个配置文件 cp zoo_sample.cfg zoo.cfg //修改zoo.cfg配置文件,指定存储目录 vim zoo.cfg //打开文件之后按 i 进行编辑
设置存储目录即可。
2:设置 JAVA_HOME 路径
这一步很重要,不设置的话在之后启动zookeeper客户端时会报错:
JAVA_HOME is not set and java could not be found in PATH.
原因是zookeeper在启动时会执行两个文件:zkServer.sh 和 zkEnv.sh,其中zkEnv.sh的文件中会检查JAVA_HOME,获取不到就会报错。
我们安装JDK时的JAVA_HOME设置在 /etc/profile 文件下,将其复制到zkEnv.sh中即可。注意等号前后不要有空格。
4:启动
注意:需切换到 apache-zookeeper-3.7.1-bin/bin 目录下再执行命令。
zookeeper服务常用命令:
//启动服务 ./zkServer.sh start //查看状态 ./zkServer.sh status //停止服务 ./zkServer.sh stop //重启服务 ./zkServer.sh restart
zookeeper服务端常用命令:
//连接ZooKeeper服务端 ./zkCli.sh //断开连接 quit //查看根节点目录 ls / //查看注册中心中的服务 ls /services //查看指定服务 ls /services/服务名 //获取指定服务详细信息(Json格式) get /services/服务名/服务id
至此,zookeeper安装与启动完毕。
二:虚拟机外网ping通,防火墙端口开放
1:ping通外网
上面我们的服务已经启动成功了,但是现在还不能和idea配合使用将服务注册进去,我们首先要确保我们的虚拟机能够ping通外网。
如果是使用VMware连接的虚拟机,先确认网络的连接方式。有三种。
桥接模式:让虚拟机成真正的计算机,和主机在同一个局域网下,有着相同的网关、子网掩码
NTA模式:网络地址转换,虚拟机的网络都是由主机的 DHCP 服务器进行分配的
仅主机:虚拟机只可以与主机互相访问,不可以连接外网
我这里使用的是NAT模式,只介绍下这个模式。
打开VMware的编辑 -> 虚拟网络编辑器,打开后点击 NAT设置获取网关及子网掩码,点击DHCP设置获取IP地址起始位置。如果想要更改,需要点击更改设置。
之后进入虚拟机修改网络文件。
注意:CentOS7.x网卡文件是 ifcfg-ens33,CentOs6.x网卡文件是 ifcfg-eth0
//修改网络文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 //按 i 开始编辑 //主要把这几个修改了 BOOTPROTO: 改成静态的,不然重启后ip会被重新分配 IPADDR: 当前虚拟机的ip,取值范围在DHCP设置中查看的ip范围 NETMASK: 子网掩码,NTA设置的固定值 GATEWAY: 网关,NTA设置的固定值 //修改之后重启网卡 systemctl restart network //测试是否能ping通外网 ping www.baidu.com
2:防火墙端口开放
Linux下防火墙有两种分别是 iptables 和 firewalld,在centos7之前centos用的防火墙是iptables,自从centos7过后防火墙的使用就从iptables变成了firewalld。相较于传统的防火墙管理工具,firewalld加入了zone(区域)的概念,大体就是实现了防火墙策略之间的快速切换。
防火墙命令:
//查看防火墙状态(running开启,dead关闭) systemctl status firewalld //启动防火墙 service firewalld start //重启防火墙(服务) service firewalld restart //关闭防火墙 service firewalld stop //查询端口是否开放(zookeeper默认端口号2181) firewall-cmd --query-port=2181/tcp //开放端口 firewall-cmd --permanent --add-port=2181/tcp //移除端口 firewall-cmd --permanent --remove-port=2181/tcp //重启防火墙(配置) firewall-cmd --reload
将zookeeper端口号放行,之后才可以注册服务进去。
三:服务注册进Zookeeper
1:添加依赖
一般添加第一个和Springboot整合的依赖即可,这里提供一个报错解决的方案。
org.springframework.cloud spring-cloud-starter-zookeeper-discoveryorg.apache.zookeeper zookeeperorg.apache.zookeeper zookeeper3.7.1
2:添加配置
linux的IP加Zookeeper端口号,默认2181
#配置Spring spring: application: name: cloud-provider-payment #微服务名称,注册中心显示 cloud: zookeeper: connect-string: 192.168.58.128:2181 #zookeeper机器加端口号
3:添加注解
主启动类添加注解,注意不是Eureka的注解
@SpringBootApplication //该注解用于向使用consul或者zookeeper作为注册中心时注册服务 @EnableDiscoveryClient public class PaymentMain8004 { public static void main(String[] args) { SpringApplication.run(PaymentMain8004.class, args); } }
4:启动
项目启动成功之后可以在Zookeeper中查看注册进去的服务。
这里使用上面提到过的一些命令,可以看到我们注册进去的服务。
需要注意的是,Zookeeper默认创建的是临时节点,如果服务挂了,会在一段时间后直接清除,
大概一二十秒,而不是像Eureka那样保持心跳。在这点上,Zookeeper做的很是干脆。
[zk: localhost:2181(CONNECTED) 0] ls / [services, zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /services [cloud-consumer-order, cloud-provider-payment] [zk: localhost:2181(CONNECTED) 2] ls /services/cloud-provider-payment [04b2cf44-95a2-4d29-b452-620e7d4ec53d] [zk: localhost:2181(CONNECTED) 3] get /services/cloud-provider-payment/04b2cf44-95a2-4d29-b452-620e7d4ec53d //后面省略 {"name":"cloud-provider-payment","id":"04b2cf44-95a2-4d29-b452-...
其他的功能就和我们使用Eureka等注册中心一样了,每个注册进去的服务都可以通过服务名进行其他服务的调用。
到这里就结束了,这里只是介绍Zookeeper的简单入门用法。希望能够帮到大家,如果哪里有问题,欢迎大家留言指正。
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章