亚马逊AWS官方博客

利用 AWS 打造高可用 SAP Hybris 系统

概述:

SAP Hybris是整个e-commerce 领域的领先系统解决方案,许多客户在选择打造自己的e-commerce系统时,都会考虑选择SAP Hybris. 这篇blog将会介绍如何利用AWS的服务打造高可用的SAP Hybris. 同时,利用Amazon Aurora数据库,存储整个系统的用户相关数据,产品相关数据以及订单相关数据。

Solr 是Apache的开源项目,提供一个功能强大的搜索服务器,它支持REST风格API。Solr是基于Lucene的,Lucene 支持强大的匹配能力,如短语,通配符,连接,分组和更多不同的数据类型。Solr在e-commerce电商系统中,通常作为搜索引擎使用。

Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务界面,可用于存储和检索 Web 上任何位置、任意数量的数据。它能够提供 99.999999999% 的持久性,并且可以在全球大规模传递数万亿对象。本篇文章设计的架构中利用S3作为相关媒体文件的存储用于存储整个系统的图片,脚本等静态资源。

Amazon Aurora 是一种与 MySQL 和 PostgreSQL 兼容的关系数据库,专为云而打造,既具有高端商用数据库的性能和可用性,又具有开源数据库的简单性和成本效益。同时,Amazon Aurora已经被SAP认证作为hybris的数据库提供服务。

 

整个系统的架构图如下,需要注意的是在如果架构用于实际生产环境,建议将Solr服务器也进行高可用集群部署。

 

环境需求:

Hybris 安装包

https://help.sap.com/viewer/product/SAP_COMMERCE/1905/en-US

AWS Aurora 数据库

Application Load Balancer

 

构建Hybris服务器

1.将下载好的系统上传至AWS EC2服务器,可以利用AWS S3服务先上传安装包到桶中,在从EC2 进行下载。

安装包解压后目录结构如下:

目录中的hybris为我们所需要的软件系统,其它文件的作用在这里不做深入解释,具体可以参考SAP官方文档。我们将hybris拷贝到根目录下方便后续操作。

2. 进入/home/ec2-user/hybris/bin/platform目录, 运行

. ./setantenv.sh

进行安装环境的初始化。

3.接着运行

ant clean all

进行初始化hybris的安装, 安装完毕后,hybris的目录结构如下:

4.根据架构图中的设计我们需要利用AWS Aurora作为数据源,我们需要将mysql对应的驱动放入/home/ec2-user/hybris/bin/platform/lib/dbdriver/中,用于连接数据库。

 

配置数据库:

1.选择Aurora数据库引擎

2.确保多可用于部署勾选

3.设置VPC 已经安全组的相关信息(确保3306端口开放给EC2所配置的安全组)

4.启动Aurora数据库

 

配置Solr搜索引擎:

启动一台新的EC2服务器,将Hybris安装包上传,并进行构建hybris系统部分的第一,二步骤。注意我们要对安装Solr的EC2服务器开放8983端口

修改/home/ec2-user/hybris/config/localextensions.xml, 修改为如下所示内容,该配置会启动一个只含有Solr服务器的hybris系统。

<hybrisconfig xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='../bin/platform/resources/schemas/extensions.xsd'>

  <extensions>

    <path dir='${HYBRIS_BIN_DIR}' autoload='false' />

    <extension name='solrserver' />

    </extensions>

</hybrisconfig>

 

修改后进入目录/home/ec2-user/hybris/bin/platform/,运行

ant startSolrServer

观察Solr服务器是否正常启动,正常启动的Slor会有如下显示:

 

配置Hybris服务器:

在这部分中,将利用配置文件完成和Solr服务器,Aurora数据库,以及作为媒体存储的S3桶的集成配置,同时为了保证后期多台EC2服务器能够互相连通构成集群,这里也会利用Jgroups 进行相关配置。

 

1.配置和Solr服务器的连接,在配置文件中增下如下配置,这里我们利用之前启动的用于部署Solr的EC2服务器的私有IP地址作为主机名:

solrserver.instances.default.autostart=false

solrserver.instances.standalone.autostart=true

solrserver.instances.standalone.mode=standalone

solrserver.instances.standalone.hostname=172.31.30.1

solrserver.instances.standalone.port=8983

solrserver.instances.standalone.memory=512m

通过配置,启动的Hybris系统会连接配置文件所提供的Solr服务器,连接信息如图所示:

 

2.利用S3作为媒体存储的相关配置如下,这里需要用到AKSK, 建议根据AWS安全最佳实践,利用IAM服务生成只有对S3存储桶操作权限的AKSK应用于此。{}部分需要根据环境定制

media.default.storage.strategy=s3MediaStorageStrategy

media.default.url.strategy=localMediaWebURLStrategy

media.globalSettings.s3MediaStorageStrategy.accessKeyId= media.globalSettings.s3MediaStorageStrategy.secretAccessKey=

media.globalSettings.s3MediaStorageStrategy.endpoint={s3.us-west-2.amazonaws.com}

media.globalSettings.s3MediaStorageStrategy.bucketId={hybrisbucket}

media.folder.media.storage.strategy=s3MediaStorageStrategy

media.folder.media.url.strategy=localMediaWebURLStrategy

通过该配置,所有系统所需的静态文件包括图片,脚本等等文件都会存储在S3中,结构如下所示:

 

3.配置数据库的相关信息:

db.url=jdbc:mysql://hybris.cluster****.us-west-2.rds.amazonaws.com:3306/hybris?useConfigs=maxPerformance&characterEncoding=utf8

db.driver=com.mysql.jdbc.Driver

db.username=admin

db.password=

mysql.allow.fractional.seconds=true

4.配置Hybris服务器集群相关的信息,这里绑定的IP地址仍然是EC2服务器的私有IP地址。

clustermode=true

cluster.nodes.autodiscovery=true

cluster.broadcast.methods=jgroups

cluster.broadcast.method.jgroups=de.hybris.platform.cluster.jgroups.JGroupsBroadcastMethod

cluster.broadcast.method.jgroups.tcp.bind_port=7800

cluster.broadcast.method.jgroups.channel.name=hybris-broadcast

cluster.broadcast.method.jgroups.configuration=jgroups-tcp.xml

cluster.broadcast.method.jgroups.tcp.bind_addr= 172.31.46.58

配置后,hybris系统会有如下相关的集群连接信息显示在启动过程中:

 

5.在测试完成后,我们利用该服务器作为基础, 建立镜像文件用于利用AWS自动扩展组实现Hybris系统的高可用扩展。

为了方便配置,在/home/ec2-user/下创建setip.sh脚本用于自动配置

#!/bin/bash

export y_ip=`curl http://169.254.169.254/latest/meta-data/local-ipv4 --silent`

echo  "cluster.broadcast.method.jgroups.tcp.bind_addr= $y_ip" >> /home/ec2-user/hybris/config/local.properties

 

利用该服务器配置创建映像。

 

配置Auto Scaling 自动扩展组以及负载均衡ALB

1.选择之前创建好的映像,创建启动配置,注意在创建启动配置部分,需要设置好相应的用户数据。数据详细代码如下:

#!/bin/bash

sudo yum update -y

/home/ec2-user/setip.sh

cd /home/ec2-user/hybris/bin/platform

. ./setantenv.sh

ant clean all >> /home/ec2-user/hybris/log/ant.log

sudo chown -RL ec2-user:ec2-user /home/ec2-user/hybris

su - ec2-user -c "cd /home/ec2-user/hybris/bin/platform;./hybrisserver.sh >> /home/ec2-user/hybris/log/startup.log"

2.创建ALB目标组,这里要注意hybris的默认端口为9001

 

3.创建负载匀衡器,需要注意的部分已经在图中标红

 

4.创建自动扩展组

 

这样如架构中所呈现的系统环境就我们就搭建好了,最后通过ALB的入口进行访问测试。

同时观察hybris系统的控制台,可以看到集群相关信息:

 

参考文档:

https://www.amazonaws.cn/rds/aurora/

https://lucene.apache.org/solr/

https://help.sap.com/viewer/product/SAP_COMMERCE/1811/en-US

 

本篇作者

郭腾

AWS中国团队的解决方案架构师,负责基于AWS的云计算方案架构咨询和设计。同时致力于AWS云服务在国内的应用和推广。在加入AWS之前,他曾就职于SAP,从事技术支持和咨询相关工作。