云计算 / 配置中心

Apollo生产环境部署实践

温馨提示:本文最后更新于2021-03-02 18:51:36,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 1月31日 · 2021年 本文10034个字,预计阅读26分钟 13275次已读

一、Apollo简介

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

Apollo支持4个维度管理Key-Value格式的配置:
  1. application (应用)
  2. environment (环境)
  3. cluster (集群)
  4. namespace (命名空间)

项目地址:https://github.com/ctripcorp/apollo

二、Apollo架构

生产环境分布式架构图
1605351921 f2372030123c3b4
  • Portal部署在生产环境的机房,通过它来直接管理FAT、UAT、PRO等环境的配置
  • Meta Server、Config Service和Admin Service在每个环境都单独部署,使用独立的数据库
  • Meta Server、Config Service和Admin Service在生产环境部署在两个机房,实现双活
  • Meta Server和Config Service部署在同一个JVM进程内,Admin Service部署在同一台服务器的另一个JVM进程内

三、Apollo部署

1、环境描述

  • Apollo服务端共需要两个数据库:ApolloPortalDBApolloConfigDB;
  • ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro分别部署3套ApolloConfigDB。
应用服务器:
环境服务器IP部署应用端口
Apollo-portal192.168.66.210apollo-portal8070
DEV192.168.66.211apollo-configservice
apollo-adminservice
8文章来源(Source):https://www.dqzboy.com080
8090
FAT192.168.66.212apollo-configservice
apollo-adminservice
8080
8090
UAT192.168.66.213apollo-configservice
apollo-adminservice
8080
8090
PRO192.168.66.214apollo-configservice
apollo-adminservice
8080
8090
数据库服务:
环境服务器IP部署应用所需库端口
Apollo-portal192.168.66.210MySQL5.7+ApolloPortalDB3306
DEV192.168.66.211MySQL5.7+ApolloConfigDB3306
FAT192.168.66.212MySQL5.7+ApolloConfigDB3306
UAT192.168.66.213MySQL5.7+ApolloConfigDB3306
PRO192.168.66.214MySQL5.7+ApolloConfigDB3306
JAVA环境:
环境服务器IPJDK版本安装方式
Apollo-portal192.168.66.2101.8RPM包
DEV192.168.66.2111.8RPM包
FAT192.168.66.2121.8RPM包
UAT192.168.66.2131.8RPM包
PRO192.168.66.2141.8RPM包

2、环境初始化

2.1、配置主机名

文章来源(Source):浅时光博客
[root@localhost ~]# hostnamectl set-hostname apollo-portal
[root@localhost ~]# hostnamectl set-hostname apollo-dev
[root@localhost ~]# hostnamectl set-hostname apollo-fat
[root@localhost ~]# hostnamectl set-hostname apollo-uat
[root@localhost ~]# hostnamectl set-hostname apollo-pro

2.2、配置主机名解析

[root@apollo-portal ~]# vi /etc/hosts
192.168.66.210   apollo-portal
192.168.66.211   apollo-dev
192.168.66.212   apollo-fat
192.168.66.212   apollo-uat
192.168.66.212   apollo-pro
  • portal节点实现ssh免密登入其他节点
[root@apollo-portal ~]# ssh-keygen -t rsa
[root@apollo-portal ~]# ssh-copy-id root@192.168.66.210
[root@apollo-portal ~]# ssh-copy-id root@192.168.66.211
[root@apollo-portal ~]# ssh-copy-id root@192.168.66.212
[root@apollo-portal ~]# ssh-copy-id root@192.168.66.213
[root@apollo-portal ~]# ssh-copy-id root@192.168.66.214
  • hosts文件传给各节点,实现通过主机名解析
[root@apollo-portal ~]# for i in 192.168.66.{211..214}; do echo ">>> $i";scp /etc/hosts root@$i:/etc/; done

[root@apollo-portal ~]# ssh-copy-id root@apollo-dev
[root@apollo-portal ~]# ssh-copy-id root@apollo-fat
[root@apollo-portal ~]# ssh-copy-id root@apollo-uat
[root@apollo-portal ~]# ssh-copy-id root@apollo-pro

2.3、关闭SELINUX

[root@apollo-portal ~]# for i in 192.168.66.{210..214}; do echo ">>> $i";ssh root@$i "sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config"; done

[root@apollo-portal ~]# for i in 192.168.66.{210..214}; do echo ">>> $i";ssh root@$i "setenforce 0 && getenforce"; done

2.4、安装常用命令

[root@apollo-portal ~]# for i in 192.168.66.{210..214};do echo ">>> $i";ssh root@$i "yum -y install gcc gcc-c++ libaio make cmake zlib-devel openssl-devel pcre pcre-devel wget git curl lynx lftp mailx mutt rsync ntp net-tools vim lrzsz screen sysstat yum-plugin-security yum-utils createrepo bash-completion zip unzip bzip2 tree tmpwatch pinfo man-pages lshw pciutils gdisk system-storage-manager git  gdbm-devel sqlite-devel chrony";done

[root@apollo-portal ~]# for i in 192.168.66.{210..214};do echo ">>> $i";ssh root@$i "yum install -y epel-release";done

2.5、配置时间同步

  • portal节点与互联网时间服务器进行同步,其他节点则于node1节点进行时间同步
[root@apollo-portal ~]# vim /etc/chrony.conf
1605352399 fd2e350094ff5dd
  • 启动服务
[root@apollo-portal ~]# systemctl start chronyd.service 
[root@apollo-portal ~]# systemctl enable chronyd.service
[root@apollo-portal ~]# systemctl status chronyd.service

#防火墙放通ntp服务端口:123
[root@apollo-portal ~]# firewall-cmd --zone=public --permanent --add-port=123/udp
[root@apollo-portal ~]# firewall-cmd --reload
  • 检查主节点时间同步信息
[root@apollo-portal ~]# timedatectl
1605352512 b424528af356fcf
  • 其他节点关闭ntpd服务,我们这里使用chronyd服务
[root@apollo-portal ~]# for i in 192.168.66.{211..214};do echo ">>> $i";ssh root@$i "systemctl stop ntpd && systemctl disable ntpd && systemctl status ntpd";done
  • 登入各个节点服务器进行手动修改chronyd
~]# vim /etc/chrony.conf
server 192.168.66.210 iburst
1605352564 c11db7889519f8f
  • 另外2个节点启动服务,在portal节点操作
[root@apollo-portal ~]# for i in 192.168.66.{211..214};do echo ">>> $i";ssh root@$i "systemctl restart chronyd.service && systemctl enable chronyd.service && systemctl status chronyd.service";done
  • 检查时间同步状态 ^*表示已经同步
[root@apollo-portal ~]# for i in 192.168.66.{211..214};do echo ">>> $i";ssh root@$i "chronyc sources ";done
1605352620 9796bfb750d4b15

2.6、安装JDK

  • 所有节点运行以下命令进行安装,安装包可自行去oracle官网下载
rpm -ivh jdk-8u231-linux-x64.rpm

3、部署数据库

  • 部署方式RPM包安装,所需MySQL包文件如下:

MySQL官网地址:https://downloads.mysql.com/archives/community/

  • mysql-community-server
  • mysql-community-client
  • mysql-community-common
  • mysql-community-libs
  • mysql-community-devel
  • mysql-community-libs-compat

3.1、安装MySQL

  • 安装服务,所有机器执行
#卸载掉系统默认的mariadb
[root@apollo-portal ~]# rpm -qa|grep mariadb|xargs rpm -e --nodeps

[root@apollo-portal ~]# mkdir -p /opt/soft && cd /opt/soft
[root@apollo-portal soft]# yum install mysql-community-*
  • 启动MySQL服务(所有节点都要启动)
文章来源(Source):浅时光博客
[root@apollo-portal ~]# systemctl start mysqld
[root@apollo-portal ~]# systemctl enable mysqld
[root@apollo-portal ~]# systemctl status mysqld

3.2、重置密码

  • 重置文章来源(Source):浅时光博客ROOT密码(所有节点都需要执行)
[root@apollo-portal ~]# cat /var/log/mysqld.log |grep password
[root@apollo-portal ~]# mysql -uroot -p
Enter password:

#修改密码策略
mysql> set global validate_password_policy=0;

mysql> set global validate_password_mixed_case_count=0;

mysql> set global validate_password_number_count=3;

mysql> set global validate_password_special_char_count=0;

mysql> set global validate_password_length=3;

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'dqz123456';

mysql> flush privileges;

3.3、导入数据

  • 通过克隆Apollo项目,然后将项目中自带的SQL文件导入到数据库中

注意:

       1、ApolloPortalDB只需要在Applo-pota原文链接:https://www.dqzboy.coml节点的数据库上创建;存储路径apollo\scripts\sql\apolloportaldb.sql

       2、ApolloConfigDB需要在DEV FAT UAT PRO 环境执行;存储路径apollo\scripts\sql\apolloconfigdb.sql

3.3.1:Portal节点

(1)下载代码并解压

[root@apollo-portal ~]# mkdir -p /opt/soft/
[root@apollo-portal ~]# mkdir /usr/local/apollo-portal
[root@apollo-portal ~]# cd /opt/soft/
[root@apollo-portal soft]# unzip apollo-portal-1.6.2-github.zip -d /usr/local/apollo-portal/

(2)导入ApolloPortalDB

[root@apollo-portal ~]# mysql -uroot -p
Enter password:

mysql> source /usr/local/apollo/scripts/sql/apolloportaldb.sql

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ApolloPortalDB     |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

#导入成功后,可通过以下语句检查
mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
+----+--------------------+-------+--------------------------+
| Id | Key                | Value | Comment                  |
+----+--------------------+-------+--------------------------+
|  1 | apollo.portal.envs | dev   | 可支持的环境列表         |
+----+--------------------+-------+--------------------------+
1 row in set (0.00 sec)

(3)创建读写权限用户

  • Portal数据库创建一个有读写ApolloPortalDB库权限的用户
mysql> CREATE USER 'portal'@'%' IDENTIFIED BY 'dqz123456';
mysql> grant all privileges on ApolloPortalDB.* to portal@'%';
mysql> flush privileges;

(4)修改数据库连接信息

  • 这里改为portal服务数据库IP地址;由于我将应用和数据库放在了同一台,所以我这里直接添加127.0.0.1地址即可
  • 注意:数据库用户需要有ApolloPortalDB库的读写权限
[root@apollo-portal soft]# cd /usr/local/apollo-portal/config/
[root@apollo-portal config]# vim application-github.properties
1605353081 303bd2f9adc117d

(5)配置apollo-portal的meta service信息

[root@apollo-portal config]# vim apollo-env.properties
1605353126 2ac4e1ea0ba7c93

(6)数据库数据修改

  • 修改ApolloPortalDB库中UserRole,在apollo.portal.envs中添加对应的环境参数
1605353182 fd445bdff51b6ef

(7)放通防火墙端口

[root@apollo-portal ~]# firewall-cmd --permanent --zone=public --add-port=8070/tcp

[root@apollo-portal ~]# firewall-cmd --reload
3.3.2:各环境节点

(1)解压程序文件

  • configservicadminservic文件上传到DEV/FAT/UAT/PRD服务器中并解压
[root@apollo-dev ~]# mkdir /opt/soft
[root@apollo-dev ~]# mkdir /usr/local/apollo-configservic
[root@apollo-dev ~]# mkdir /usr/local/apollo-adminservic
[root@apollo-dev ~]# cd /opt/soft/

[root@apollo-dev soft]# unzip apollo-adminservice-1.6.2-github.zip -d /usr/local/apollo-adminservic/

[root@apollo-dev soft]# unzip apollo-configservice-1.6.2-github.zip -d /usr/local/apollo-configservic/

(2)导入ApolloConfigDB

mysql> source /usr/local/apollo/scripts/sql/apolloconfigdb.sql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ApolloConfigDB     |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

#导入成功后通过以下语句检查
mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
+----+--------------------+-------------------------------+------------------------------------------------------+
| Id | Key                | Value                         | Comment                                              |
+----+--------------------+-------------------------------+------------------------------------------------------+
|  1 | eureka.service.url | http://localhost:8080/eureka/ | Eureka服务Url,多个service以英文逗号分隔             |
+----+--------------------+-------------------------------+------------------------------------------------------+
1 row in set (0.00 sec)

(3)创建读写权限用户

  • DEV/FAT/UAT/PRO环境的数据库创建一个有读写ApolloConfigDB库权限的用户
mysql> CREATE USER 'apollo'@'%' IDENTIFIED BY 'dqz123456';
mysql> grant all privileges on ApolloConfigDB.* to apollo@'%';
mysql> flush privileges;

(4)修改数据库连接信息

  • 注意:同环境的配置apollo-configserviceapollo-adminservice数据库配置一致
  • 注:由于在每个环境都有部署,所以对不同的环境config-serviceadmin-service需要配置对应环境的数据库参数;由于我这里数据库和应用都在同一台机器上,所以我这里数据库地址填写127.0.0.1即可
cd /usr/local/apollo-configservic/config/
vim application-github.properties
1605353401 1c62de48b61cd49
cd /usr/local/apollo-adminservic/config/
vim application-github.properties
1605353433 825ac7db9dfc04d

4、启动服务

  • 注意:启动顺序依次是 apollo-configservice > apollo-adminservice > apollo-portal
  • 默认日志存储路径/opt/logs/xxx
  • 放通端口:apollo-configservice:8080;apollo-adminservice:8090;apollo-portal:8070
  • 启动操作在Portal节点通过ssh远程连接操作
  • 启动命令:scripts/startup.sh
  • 关闭命令:scripts/shutdown.sh
#放通各环境8080、8090监听端口
[root@apollo-portal ~]# for i in 192.168.66.{211..214}; do echo ">>> $i";ssh root@$i "firewall-cmd --permanent --zone=public --add-port=8080/tcp && firewall-cmd --permanent --zone=public --add-port=8090/tcp && firewall-cmd --reload"; done

#启动各节点服务
[root@apollo-portal ~]# for i in 192.168.66.{211..214}; do echo ">>> $i";ssh root@$i "/usr/local/apollo-configservic/scripts/startup.sh && /usr/local/apollo-adminservic/scripts/startup.sh"; done


#最后启动apollo-portal
[root@apollo-portal ~]# cd /usr/local/apollo-portal/scripts/
[root@apollo-portal scripts]# ./startup.sh
1605353531 998434c02afd2da
[root@apollo-dev ~]# cd /usr/local/apollo-configservic/scripts/
[root@apollo-dev scripts]# ./startup.sh
  • 如果启动失败,请查看日志;日志存储位置/opt/logs

5、访问使用

5.1:访问网站页面

http://192.168.66.210:8070/signin#/error
默认账号密码:apollo/admin
1605353651 fc9d37bb7ebfe4e
1605353653 d9bfd2fe9dd6eef

5.2:检查集群状态

  • 确保四套环境的状态都正常
1605353747 930b967e2be059b
1605353750 9e754b0fb07f4de

5.3:创建项目测试

1605353857 a6cae46ea66a4d2
1605353859 ce53b68afcb00a7
1605353860 df9306a91f3f478
1605353863 f57029002521a19
1605353865 ba5a8185d75a814



本文作者:浅时光
原文链接:https://www.dqzboy.com/4635.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!