• Apollo配置中心搭建和使用教程


    前言

    工作中使用的是apollo配置中心,平时学习也需要使用到,因此自己搭建一套,方便平时在家学习使用。搭建过程遇到了一些坑,也记录下。

    apollo搭建

    我是使用的京东云服务器搭建的单机环境,因此直接下载release包安装方便。

    先说下结论,创建单机环境不要看github上apollo的官方做法使用scripts/startup.sh启动,我没做成功,坑很多,想简单,就按照我这样操作。

    step1:创建apollo数据库

    自己数据库导入下面两个地址的sql,这样就分别创建了ApolloConfigDB、ApolloPortalDB

    sql地址

    https://github.com/nobodyiam/apollo-build-scripts/blob/master/sql/apolloportaldb.sql
    https://github.com/nobodyiam/apollo-build-scripts/blob/master/sql/apolloconfigdb.sql

    step2:安装apollo

    从https://github.com/ctripcorp/apollo/releases/tag/v1.7.1下载

    apollo-adminservice-1.7.1-github.zip
    apollo-configservice-1.7.1-github.zip
    apollo-portal-1.7.1-github.zip

    分别解压到单独的文件夹,进行如下操作

    1:修改下面三个目录内的文件,内容改为数据库地址和用户密码
    apollo-adminservice-1.7.1-github\config\application-github.properties
    apollo-configservice-1.7.1-github\config\application-github.properties
    apollo-portal-1.7.1-github\config\application-github.properties
    
    2:自定义端口,三个服务端口分别如下
    apollo-configservice 18080 注册中心地址
    apollo-adminservice 18090 
    apollo-portal 18070 门户登陆端口
    
    apollo-configservice不以8080端口启动的情况下,要修改ApolloConfigDB库的ServerConfig表的eureka.service.url的value值为http://localhost:18080/eureka/,我是单机环境,因此是localhost,端口从数据库默认的8080改为18080
    
    我自己只是使用了dev环境,其他没使用,因此我的G:\apollo-portal-1.7.1-github\config\apollo-env.properties内容如下
    local.meta=http://localhost:18080
    dev.meta=http://localhost:18080
    #fat.meta=http://fill-in-fat-meta-server:8080
    #uat.meta=http://fill-in-uat-meta-server:8080
    lpt.meta=${lpt_meta}
    #pro.meta=http://fill-in-pro-meta-server:8080
    
    
    3.上传并启动
    上传下面三个文件夹到服务器/mydata/apollo-1.7.1目录下
    apollo-adminservice-1.7.1
    apollo-configservice-1.7.1
    apollo-portal-1.7.1
    4.启动
    启动顺序configservice->adminservice->portal
    nohup java -Dserver.port=18080 -Deureka.instance.ip-address={云服务器公网ip} -Deureka.instance.homePageUrl=http://{云服务器公网ip}:18080 -jar apollo-configservice-1.7.1.jar  &
    
    nohup java -Dserver.port=18090 -Deureka.instance.ip-address={云服务器公网ip} -Deureka.instance.homePageUrl=http://{云服务器公网ip}:18090 -jar apollo-adminservice-1.7.1.jar &
    
    nohup java -Dserver.port=18070 -jar apollo-portal-1.7.1.jar &
    
    cd /mydata/apollo-1.7.1/apollo-configservice-1.7.1-github/
    nohup java -Xmx256m -Xms256m -Xmn128m -Dserver.port=18080 -Deureka.instance.ip-address=114.67.85.120  -jar apollo-configservice-1.7.1.jar &
    
    cd /mydata/apollo-1.7.1/apollo-adminservice-1.7.1-github/
    nohup java -Xmx256m -Xms256m -Xmn128m -Dserver.port=18090 -Deureka.instance.ip-address=114.67.85.120 -jar apollo-adminservice-1.7.1.jar &
    
    cd /mydata/apollo-1.7.1/apollo-portal-1.7.1-github/
    nohup java -Xmx512m -Xms512m -Xmn256m -Dserver.port=18070 -jar apollo-portal-1.7.1.jar &
    
    每个命令输入后等2min再启动下一个服务,因为有依赖关系。
    
    当然加jvm参数启动的命令参考如下(从startup.sh copy来的),不建议加一大堆这样参数,毕竟自己使用
    nohup java -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=18080 -Dlogging.file=/opt/logs/100003171/apollo-configservice.log -XX:HeapDumpPath=/opt/logs/100003171/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/opt/logs/100003171/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled  -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -Deureka.instance.ip-address={云服务器公网ip} -Deureka.instance.homePageUrl=http://{云服务器公网ip}:18080 -jar apollo-configservice-1.7.1.jar &
    
    nohup java -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=18090 -Dlogging.file=/opt/logs/100003172/apollo-configservice.log -XX:HeapDumpPath=/opt/logs/100003172/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/opt/logs/100003172/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled  -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -Deureka.instance.ip-address={云服务器公网ip} -Deureka.instance.homePageUrl=http://{云服务器公网ip}:18090 -jar apollo-adminservice-1.7.1.jar &
    
    nohup java -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=18070 -Dlogging.file=/opt/logs/100003173/apollo-configservice.log -XX:HeapDumpPath=/opt/logs/100003173/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/opt/logs/100003173/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled  -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -jar apollo-portal-1.7.1.jar &
    
    

    step3:验证

    启动configservice服务后,浏览器输入http://云服务器公网ip:18080/ 就可以看到信息

    image-20201010000942415

    step4:登录apollo

    启动portal服务后,就可以登陆了,浏览器输入http://云服务器公网ip:18070/,用户默认密码是apollo/admin

    image-20201010001240574

    step5:使用apollo

    项目使用apollo

    pom.xml引入apollo-client

    <dependency>
    			<groupId>com.ctrip.framework.apollo</groupId>
    			<artifactId>apollo-client</artifactId>
    			<version>1.7.0</version>
    		</dependency>
    

    在springboot启动类上加上@EnableApolloConfig即可开启了apollo。

    那么在启动springboot时候,启动类加入jvm参数启动,这里的启动参数通常都是必须加的,可以记录下。启动参数如下:

    -Denv=dev -Dspring.profiles.active=dev -Dconsole.log=true -Dapollo.cluster=default -Dapp.id=mall-test -Ddev_meta=http://{云服务器公网ip}:18080/
    

    启动参数解释如下

    和apollo相关的配置如下

    -Ddev_meta=http://{云服务器公网ip}:18080/ #连接apollo的地址

    -Denv=dev #使用dev环境

    -Dapp.id=mall-test #使用app.id是mall-test,和上面的图对应,appid是apollo的一个唯一标识,不能重复。

    -Dapollo.cluster=default #使用默认的集群,当然可以创建多个集群,我上面的图就有个dev01集群,这个是不同环境使用不同配置很有用

    -Dapollo.meta=http://{云服务器公网ip}:18080/ #貌似新版

    -Dspring.profiles.active=dev #使用dev配置文件,spring的配置

    -Dconsole.log=true #spring的配置,打印日志到console

    启动使用apollo成功日志会是这样

    image-20201010002332688

    同时在apollo上实例列表也可以验证到,如果有连接到apollo成功,就会在这里显示。

    image-20201010002416473

    这样就可以把配置都放apollo,不需要写本地了。

    apollo的监听器例子

    import java.net.URI;
    import java.util.List;
    import javax.annotation.PostConstruct;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import com.ctrip.framework.apollo.model.ConfigChangeEvent;
    import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
    import lombok.Data;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    @Data
    @Component
    public class StellarApolloConfig {
        
    	@Value("${all.restart.switch}")
    	private String allRestartSwitch = "off";
    	
    	@ApolloConfigChangeListener
    	private void listenRestartChange(ConfigChangeEvent changeEvent) {
    		if (changeEvent.isChanged("all.restart.switch")) {
    			log.info("all.restart.switch变化");
    			allRestartSwitch = changeEvent.getChange("all.restart.switch").getNewValue().trim();
    			log.info("all.restart.switch变化,allRestartSwitch={}", allRestartSwitch);
    		}
    	}
    	
    }
    

    搭建apollo过程中遇到的坑

    刚开始是按照官方文档来安装的,但是启动configservice服务的时候,就遇到了解决不了问题

    按照官方文档启动configservice时候,执行的是apollo-configservice-1.7.1-github\scripts\startup.sh,由于我要让注册中心使用18080端口,也在startup.sh修改了,但是启动就是报错

    启动apollo-configservice-1.7.1时候apollo-1.7.1apollo-configservice-1.7.1-github.log文件报错
    start-stop-daemon: warning: this system is not able to track process names
    longer than 15 characters, please use --exec instead of --name.
    start-stop-daemon: user '197108' not found
    使用系统是ubuntu1604,看了下启动脚本apollo-configservice-1.7.1-github/scripts/startup.sh,里面jar启动不是java -jar xx.jar方式启动,而是xx.jar start方式启动,我第一次遇到这样启动方式,也搞不明白
    

    因此就使用了常规的java -jar方式启动,就是文章开头地方

  • 相关阅读:
    Kafka设计解析(二)- Kafka High Availability (上)
    Kafka设计解析(三)- Kafka High Availability (下)
    Kafka深度解析
    Cloudera Manager(CDH5)内部结构、功能包括配置文件、目录位置等
    Failed to start /etc/rc.d/rc.local Compatibility
    Offset Management For Apache Kafka With Apache Spark Streaming
    maven-assembly-plugin打包可执行的jar包
    How Cigna Tuned Its Spark Streaming App for Real-time Processing with Apache Kafka
    SystemTap Beginners Guide
    数据可视化的开源方案: Superset vs Redash vs Metabase (二)
  • 原文地址:https://www.cnblogs.com/zhangyjblogs/p/14163702.html
Copyright © 2020-2023  润新知