配置中心Apollo安装
简介
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
- apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象为Apollo客户端
- apollo-adminservice:提供配置管理接口,提供配置修改、发布等接口,接口服务对象为Portal,以及Eureka
- apollo-portal:提供Web界面供用户管理配置
- apollo-client:Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能
上图简要描述了配置发布的大致过程:
- 用户在Portal操作配置发布
- Portal调用Admin Service的接口操作发布
- Admin Service发布配置后,发送ReleaseMessage给各个Config Service
-
Config Service收到ReleaseMessage后,通知对应的客户端
安装部署
docker安装
#关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service firewall-cmd --state #关闭selinux sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config && setenforce 0 #安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce-19.03.5 -y #启动docker并设置开机自启 systemctl start docker && systemctl enable docker #docker-compose编排工具安装方式 curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose && ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose #查看版本 docker version && docker-compose --version #设置容器镜像加速器 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://zx28up8j.mirror.aliyuncs.com"] } EOF #重载配置并重启docker systemctl daemon-reload && systemctl restart docker
apollo安装
cd /usr/local/src git clone -b 1.5.1 https://github.com/ctripcorp/apollo.git 或者 wget https://github.com/ctripcorp/apollo/archive/v1.5.1.tar.gz #解压后更改目录名为apollo mkdir -p apollo-adminservice apollo-portal apollo-configservice portal-sql config-sql cp apollo/scripts/docker-quick-start/sql/apolloconfigdb.sql config-sql/ cp apollo/scripts/docker-quick-start/sql/apolloportaldb.sql portal-sql/ #防止容器ip注册到Eureka的方案有: #方案一:把docker0和veth.*的网卡在注册到Eureka时忽略掉(用此方案就行) sed -i '/active:/a\ cloud:\ inetutils:\ ignoredInterfaces:\ - docker0\ - veth.*' apollo/{apollo-adminservice,apollo-configservice}/src/main/resources/application.yml #方案二:强制指定admin server和config server向eureka注册的IP #sed -i '/instance:/a\ ip-address: ${eurekaip-address}' apollo/{apollo-adminservice,apollo-configservice}/src/main/resources/bootstrap.yml #更多方案,查看https://github.com/ctripcorp/apollo/wiki/部署&开发遇到的常见问题
源码构建
#依赖maven3和jdk8环境,请先安装好! #注:Maven之阿里云镜像仓库配置maven/conf/settings.xml <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> #执行编译打包脚本 sh apollo/scripts/build.sh #打包完成后执行 cp apollo/apollo-adminservice/target/apollo-adminservice-1.5.1-github.zip apollo-adminservice cp apollo/apollo-configservice/target/apollo-configservice-1.5.1-github.zip apollo-configservice cp apollo/apollo-portal/target/apollo-portal-1.5.1-github.zip apollo-portal cp apollo/apollo-adminservice/src/main/docker/Dockerfile apollo-adminservice cp apollo/apollo-configservice/src/main/docker/Dockerfile apollo-configservice cp apollo/apollo-portal/src/main/docker/Dockerfile apollo-portal #开始生成docker镜像 cat docker-compose.yml #新建此文件 version: "3" services: apollo-configservice: container_name: apollo-configservice build: apollo-configservice/ image: apollo_configservice ports: - "8080:8080" environment: DS_URL: "jdbc:mysql://本机IP:3307/ApolloConfigDB?characterEncoding=utf8" DS_USERNAME: "root" DS_PASSWORD: "Doordu" eurekaip-address: "本机IP" volumes: - /opt/logs/100003171:/opt/logs/100003171 depends_on: - config-db restart: always config-db: container_name: config-db image: mysql:5.7 restart: always environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: Doordu ports: - "3307:3306" volumes: - /data/config-db:/var/lib/mysql - /usr/local/src/config-sql:/docker-entrypoint-initdb.d apollo-adminservice: container_name: apollo-adminservice image: apollo_adminservice build: apollo-adminservice/ ports: - "8090:8090" environment: DS_URL: "jdbc:mysql://本机IP:3307/ApolloConfigDB?characterEncoding=utf8" DS_USERNAME: "root" DS_PASSWORD: "Doordu" eurekaip-address: "本机IP" volumes: - /opt/logs/100003172:/opt/logs/100003172 depends_on: - apollo-configservice restart: always apollo-portal: container_name: apollo-portal build: apollo-portal/ image: apollo-portal ports: - "8070:8070" environment: DS_URL: "jdbc:mysql://本机IP:3306/ApolloPortalDB?characterEncoding=utf8" DS_USERNAME: "root" DS_PASSWORD: "Doordu" DEV_META: "http://本机IP:8080" volumes: - /opt/logs/100003173:/opt/logs/100003173 depends_on: - apollo-db - apollo-adminservice restart: always apollo-db: container_name: apollo-db image: mysql:5.7 restart: always environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: Doordu ports: - "3306:3306" volumes: - /usr/local/src/portal-sql:/docker-entrypoint-initdb.d - /data/apollo-db:/var/lib/mysql
启动容器
docker-compose build && docker-compose up -d #启动编排文件里面的容器
docker-compose ps #查看容器启动情况
#日志文件路径 /opt/logs/ #由于configservice容器自带了eureka服务,把服务注册地址修改为物理机所映射的端口,也就是8080,执行 docker exec -it config-db mysql -u root -pDoordu -D ApolloConfigDB -e "update ServerConfig set Value = 'http://本机IP:8080/eureka/' where id = 1;" #apollo界面 http://本机IP:8070 账:apollo 密:admin #eureka界面 http://本机IP:8080 #针对不同环境修改权限,登录控制端数据库,经测试填入pro则屏蔽pro环境的配置,忽略掉官方备注!o(∩_∩)o
燃烧吧,骚年.