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 #启动服务