ZooKeeper 注册中心

微服务

微服务是指将单一应用程序拆分为一组小型服务的方法,每个服务运行在自己的进程中,更有效利用资源,实现服务可用性和可扩展性

微服务参与:
1,微服务如何落地 docker
2,微服务如何动态发现 注册中心 zookeeper
3,微服务治理 k8s
4,微服务监控 prometheus
5,微服务代码部署与回滚 jenkins
6,微服务日志 elk

微服务开发工具: spring cloud,dubbo

zookeeper 介绍

微服务注册中心: zookeeper

ZooKeeper是一个开源的分布式应用程序协调服务。为分布式应用提供一致性服务的软件,功能包括:命名服务、状态同步、配置中心、集群管理等

命名服务:
命名服务是分布式系统最基本的公共服务之一。在分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等,客户端应用能够根据指定名字来获取资源的实体、服务地址和提供者的信息等

状态同步:
每个节点除了存储数据内容和node节点状态信息之外,还存储了已经注册的APP的状态信息,当有些节点或APP不可用,就将当前状态同步给其他服务

集群管理:
所谓集群管理,包括集群监控与集群控制两大块,前者侧重对集群运行状态监控,后者则是对集群进行操作与控制,对节点进行上下线操作等

zookeeper两大特性

1,客户端如果对ZooKeeper的一个数据节点注册 Watcher 监听,那么当该数据节点的内容或是其子节点列表发生变更时,ZooKeeper 服务器就会向订阅的客户端发送变更通知
2,ZooKeeper上创建的临时节点,一旦客户端与服务器之间的会话失效,那么该临时节点也就被自动清除

优势: 数据一致性,写入的数据顺序,集群可靠性,高性能

ZooKeeper 单机安装
https://archive.apache.org/dist/zookeeper/ #下载地址

apt install openjdk-8-jdk -y
tar xvf zookeeper-3.4.14.tar.gz -C /opt/
ln -s /opt/zookeeper-3.4.14/ /opt/zookeeper
mkdir /opt/zookeeper/data
cd /opt/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
grep ^[a-Z] zoo.cfg
  tickTime=2000
  initLimit=10
  syncLimit=5
  dataDir=/opt/zookeeper/data   #数据目录
  clientPort=2181    #客户端端口
  maxClientCnxns=128 #单个客户端IP可以和zookeeper保持的连接数
  autopurge.snapRetainCount=3
  
echo "PATH=/opt/zookeeper/bin/:$PATH" >> /etc/profile.d/zookeeper.sh
. /etc/profile.d/zookeeper.sh
zkServer.sh start   #启动服务
ps aux |grep zookeeper

ZooKeeper 集群安装

ZooKeeper 集群用于解决单点和单机性能及数据高可用等问题
整个集群中只要有超过集群数量一半的zookeeper工作只正常的,那么整个集群对外就是可用的,所以生产中建议集群环境主机数量为3,5,7等奇数
集群服务器角色: 
    领导者(Leader)--事务请求的唯一处理者,保证集群事务处理的顺序性,集群内部服务器的调度者
    跟随者(Follower)--处理客户端非事务请求,转发事务给Leader,参与Leader选举的投票
    参观者(Observer)--与Follower区别在于不参与Leader的投票,提升集群读性能
    客户端(Client)--请求发起方
    #注:Leader既可以为客户端提供写服务又能提供读服务。Follower和Observer都只能提供读服务

10.0.0.3  10.0.0.13  10.0.0.23 #每台主机进行单机安装

vim /opt/zookeeper/conf/zoo.cfg
 server.1=10.0.0.3:2888:3888  #server.编号=IP : LF 数据同步端口 : LF选举端口
 server.2=10.0.0.13:2888:3888
 server.3=10.0.0.23:2888:3888
 
scp /opt/zookeeper/conf/zoo.cfg 10.0.0.13:/opt/zookeeper/conf/zoo.cfg
scp /opt/zookeeper/conf/zoo.cfg 10.0.0.23:/opt/zookeeper/conf/zoo.cfg

#myid:集群服务器的唯一标识(SID)
echo "1" > /opt/zookeeper/data/myid   #10.0.0.3
echo "2" > /opt/zookeeper/data/myid   #10.0.0.13
echo "3" > /opt/zookeeper/data/myid   #10.0.0.23
zkServer.sh start   #重启服务
zkServer.sh status   #查看集群状态,其中两个是Follower,一个是Leader

tail -f /opt/zookeeper/conf/zookeeper.out  #选举Leader过程文件

命令行写入数据

zkCli.sh -server 10.0.0.23:2181   #连接到任意集群节点
  help

zookeeper 客户端 ZooInspector

git clone https://github.com/zzhang5/zooinspector.git
apt install maven -y
cd zooinspector/
mvn -T 4 clean package
chmod +x target/zooinspector-pkg/bin/zooinspector.sh
target/zooinspector-pkg/bin/zooinspector.sh    #即可运行

微服务与dubbo
官网: http://dubbo.apache.org/zh-cn/架构: http://dubbo.apache.org/zh-cn/docs/user/preface/architecture.html

配置节点

Provider	#服务生产者
Consumer	#服务消费者
Registry	#服务注册与发现的注册中心
Monitor	    #统计服务的调用次数和调用时间的监控中心
Container	#服务运行容器

服务注册中心 zookeeper

10.0.0.3   zookeeper1
10.0.0.13  zookeeper2
10.0.0.23  zookeeper3

服务生产者 Provider

#10.0.0.33 provider
yum install -y java-1.8.0-openjdk
tar xvf dubbo-demo-provider-2.1.5-assembly.tar.gz -C /opt/
cd /opt/dubbo-demo-provider-2.1.5/
vim conf/dubbo.properties
 dubbo.registry.address=zookeeper://10.0.0.3:2181 | zookeeper://10.0.0.13:2181 | zookeeper://10.0.0.23:2181
bin/start.sh   #启动服务
tail -f logs/stdout.log   #查看日志 
target/zooinspector-pkg/bin/zooinspector.sh  #zookeeper服务器验证provider

服务消费者 Consumer

#10.0.0.43 consumer
yum install -y openjdk-8-jdk
tar xvf dubbo-demo-consumer-2.1.5-assembly.tar.gz -C /opt/
cd /opt/dubbo-demo-consumer-2.1.5/
vim conf/dubbo.properties
 dubbo.registry.address=zookeeper://10.0.0.3:2181 | zookeeper://10.0.0.13:2181 | zookeeper://10.0.0.23:2181
bin/start.sh
tail -f logs/stdout.log  #查看日志
target/zooinspector-pkg/bin/zooinspector.sh  #zookeeper服务器验证consumer

服务管理者 dubbo admin

#基于zookeeper发现并管理provider和consumer
#10.0.0.8 dubbo admin
yum install -y openjdk-8-jdk
tar xvf apache-tomcat-8.5.53.tar.gz -C /opt/
ln -s /opt/apache-tomcat-8.5.53/ /opt/tomcat
echo "PATH=/opt/tomcat/bin:$PATH" > /etc/profile.d/tomcat.sh
. /etc/profile.d/tomcat.sh
mv dubboadmin.war /opt/tomcat/webapps/
cd /opt/tomcat/webapps/
unzip dubboadmin.war 
rm -rf dubboadmin.war
vim dubboadmin/WEB-INF/dubbo.properties
 dubbo.registry.address=zookeeper://10.0.0.3:2181 | zookeeper://10.0.0.13:2181 | zookeeper://10.0.0.23:2181
 dubbo.admin.root.password=root
catalina.sh start  #启动服务
#浏览器访问 10.0.0.8:8080/dubboadmin

微服务编译
http://dubbo.apache.org/zh-cn/docs/dev/build.html

maven 部署准备
maven 下载地址 https://archive.apache.org/dist/maven/maven-3/

Maven 翻译为"专家",是Apache 基金会旗下的一个纯 Java 开发的开源项目,Maven 是一个项目管理工具,可以对Java项目进行构建、解决打包依赖等

apt list maven  #查看maven版本
apt install openjdk-8-jdk -y

java 代码编译

#编译过程
1,进入到包含有“pom.xml”的路径,执行:
   mvn clean install package
2,有的时候受到测试的干扰,导致无法正在进行编译
   mvn clean install package -Dmaven.test.skip=true  #跳过测试,并且不编译测试下的源代码
3,如果需要编译的代码异常庞大
   mvn -T 4 clean install package -Dmaven.test.skip=true  #启动多线程编译

#执行源码编译
cd /opt/
git clone https://github.com/apache/dubbo-admin.git   #克隆源码
cd /opt/dubbo-admin 
vim dubbo-admin-server/src/main/resources/application.properties
  admin.registry.address=zookeeper://10.0.0.3:2181
  admin.config-center=zookeeper://10.0.0.3:2181
  admin.metadata-report.address=zookeeper://10.0.0.3:2181
  dubbo.admin.root.password=root

#服务器修改 node.js 源为淘宝源,加速资源下载
npm config set registry https://registry.npm.taobao.org
mvn clean -T 4 install package -Dmaven.test.skip=true #编译

java -jar dubbo-admin-distribution/target/dubbo-admin-0.2.0-SNAPSHOT.jar #启动服务