Skip to content

安装和部署

1.安装和部署

Ignite对部署没有要求,可以非常容易地部署到私有主机或者任意的云环境,比如,Ignite可以独立部署,也可以部署在Kubernetes或者Docker容器中,还有Apache Mesos以及Hadoop Yarn。它可以运行在物理主机中,也可以部署在虚拟机中。

2.通过ZIP包安装

安装Ignite的最通用方法是使用每个版本的二进制ZIP压缩文件。

  • 下载Ignite的最新版本的ZIP压缩包
  • 将压缩包解压到某个文件夹;
  • (可选)将ignite-rest-http文件夹从{ignite}/libs/optional移动到{ignite}/libs,以开启Ignite的REST服务,Ignite的Web控制台会使用REST服务进行集群的管理和监控;
  • (可选)配置IGNITE_HOME环境变量或者配置Windows的PATH,指向Ignite的安装文件夹,注意路径不能以/(Windows中为\)结尾。

配置Ignite的工作文件夹:

xml
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="workDirectory" value="/path/to/work/directory"/>
    <!-- other properties -->
</bean>
java
IgniteConfiguration igniteCfg = new IgniteConfiguration();
igniteCfg.setWorkDirectory("/path/to/work/directory");

3.Maven配置

3.1.概述

如果项目里用Maven管理依赖,可以单独地导入各个Ignite模块。

注意

在下面的例子中,要将${ignite.version}替换为实际使用的版本。

Java 9/10/11

如果使用的是Java 9/10/11,要确认更新了这里描述的JVM启动参数。

3.2.常规依赖

Ignite强依赖于ignite-core.jar

xml
<dependency>
    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-core</artifactId>
    <version>${ignite.version}</version>
</dependency>

不过很多时候需要其它更多的依赖,比如,要使用Spring配置或者SQL查询等。

下面就是最常用的可选模块:

  • ignite-indexing(可选,如果需要SQL查询)
  • ignite-spring(可选,如果需要spring配置)
xml
<dependency>
    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-core</artifactId>
    <version>${ignite.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-spring</artifactId>
    <version>${ignite.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-indexing</artifactId>
    <version>${ignite.version}</version>
</dependency>

3.3.导入独立模块

可以一个个地导入Ignite模块,唯一必须的就是ignite-core,其它的都是可选的,所有可选模块都可以像核心模块一样导入,只是构件Id不同。

现在提供如下模块:

  • ignite-spring:基于Spring的配置支持
  • ignite-indexing:SQL查询和索引
  • ignite-geospatial:地理位置索引
  • ignite-hibernate:Hibernate集成
  • ignite-web:Web Session集群化
  • ignite-schedule:基于Cron的计划任务
  • ignite-log4j:Log4j日志
  • ignite-jcl:Apache Commons logging日志
  • ignite-jta:XA集成
  • ignite-hadoop2-integration:HDFS2.0集成
  • ignite-rest-http:HTTP REST请求
  • ignite-scalar:Ignite Scalar API
  • ignite-slf4j:SLF4J日志
  • ignite-ssh;SSH支持,远程机器上启动网格节点
  • ignite-urideploy:基于URI的部署
  • ignite-aws:AWS S3上的无缝集群发现
  • ignite-aop:网格支持AOP
  • ignite-visor-console:开源的命令行管理和监控工具

构件版本

注意,导入若干Ignite模块时,它们的版本号应该相同,比如,如果使用ignite-core1.8,所有其它的模块也必须导入1.8版本。

3.4.LGPL依赖

下面的Ignite模块有LGPL依赖,因此无法部署到Maven中央仓库:

  • ignite-hibernate
  • ignite-geospatial
  • ignite-schedule

要使用这些模块,需要手工从源代码进行构建然后加入自己的项目,比如,要将ignite-hibernate安装到本地库,可以在Ignite的源代码包中运行如下的命令:

bash
mvn clean install -DskipTests -Plgpl -pl modules/hibernate -am

第三方仓库

GridGain提供自己的Maven仓库,包含了Ignite的LGPL构件,比如ignite-hibernate
注意位于GridGain的Maven库中的构件仅仅为了方便使用,并不是官方的Ignite构件。

4.RPM和DEB包安装

4.1.概述

Ignite可以通过RPM或者DEB仓库进行安装。

确认Linux发行版

Ignite的RPM/DEB包,在如下的Linux发行版中进行了验证:

  • Ubuntu 14.10及以上的版本;
  • Debian 9.3及以上的版本;
  • CentOS 7.4.1708及以上的版本

只要包可以安装,其它的发行版也是支持的。

4.2.仓库的配置

配置Ignite的RPM或者DEB仓库,如下所示(如果必要,需要根据提示接受GPG密钥),其中包括了特定发行版的配置:

Debian:

bash
# Install dirmngr (if not already installed) for apt-key ability to retrieve remote GPG keys
sudo apt update
sudo apt install dirmngr --no-install-recommends
bash
sudo bash -c 'cat <<EOF > /etc/yum.repos.d/ignite.repo
[ignite]
name=Apache Ignite
baseurl=http://apache.org/dist/ignite/rpm/
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://apache.org/dist/ignite/KEYS
       http://bintray.com/user/downloadSubjectPublicKey?username=bintray
EOF'
sudo yum check-update
bash
sudo bash -c 'cat <<EOF > /etc/apt/sources.list.d/ignite.list
deb http://apache.org/dist/ignite/deb/ apache-ignite main
EOF'
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61
sudo apt update

4.3.Ignite的安装

安装Ignite的最新版:

bash
sudo yum install apache-ignite
bash
sudo apt install apache-ignite --no-install-recommends

安装后的结构如下:

文件夹映射至描述
/usr/share/apache-igniteIgnite安装的根目录
/usr/share/apache-ignite/bin二进制文件文件夹(脚本以及可执行程序)
/etc/apache-ignite/usr/share/apache-ignite/config默认配置文件
/var/log/apache-ignite/var/lib/apache-ignite/log日志目录
/usr/lib/apache-ignite/usr/share/apache-ignite/libs核心和可选库
/var/lib/apache-ignite/usr/share/apache-ignite/workIgnite的工作目录
/usr/share/v281/apache-ignite文档
/usr/share/license/apache-ignite-<version>协议
/etc/systemd/systemsystemd服务配置

4.4.将Ignite作为服务

注意

如果运行于Windows10 WSL或者Docker,那么需要将Ignite作为一个独立的进程(而不是一个服务),具体可以看下面的章节。

用一个配置文件启动一个Ignite节点,可以这样做:sudo systemctl start apache-ignite@<config_name>,注意这里的<config_name>参数是相对于/etc/apache-ignite文件夹的。

运行Ignite服务:

bash
sudo systemctl start apache-ignite@default-config.xml    # start Ignite service
journalctl -fe                                           # check logs

如果要开启随着系统启动而节点自动重启,如下:

bash
sudo systemctl enable apache-ignite@<config name>

4.5.将Ignite作为独立进程

使用下面的命令可以将Ignite启动为一个独立的进程(先要切换到/usr/share/apache-ignite),如果要修改默认的配置,可以修改/etc/apache-ignite/default-config.xml文件。默认的配置会使用组播IP探测器,如果要使用静态IP探测器,需要修改默认的配置文件,具体参见TCP/IP发现

首先,切换到ignite用户,如下:

bash
sudo -u ignite /usr/bin/env bash    # switch to ignite user

然后切换到Ignite的bin文件夹,启动一个节点:

bash
cd /usr/share/apache-ignite         # navigate to Ignite home folder
bin/ignite.sh                       # run Ignite with default configuration
bash
sudo -u ignite /usr/bin/env bash       # switch to ignite user
cd /usr/share/apache-ignite/bin        # navigate to Ignite bin folder
./ignite.sh <path_to_custom_config>    # start Ignite with custom configuration

4.6.在Windows10 WSL中运行Ignite

网络配置

在Windows 10 WSL环境下运行Ignite,需要对具有高级安全的Windows防御防火墙进行正确的配置:

  • 运行具有高级安全的Windows防御防火墙
  • 选择左侧的入站规则菜单;
  • 选择右侧的新建规则菜单;
  • 选择程序复选框然后点击下一步
  • 程序路径字段中输入%SystemRoot%\System32\wsl.exe,然后点击下一步
  • 选择允许连接复选框,然后点击下一步
  • 选择私有公开复选框,然后点击下一步
  • 名字字段中输入名字(在描述字段中,也可以可选地写一段描述),然后点击完成

这个配置好的规则将允许Windows 10 WSL环境中的Ignite节点暴露于局域网中。

启动Ignite集群

由于特殊的网络堆栈实现,如果要在一个Windows10 WSL环境中运行多个节点,需要对配置进行自定义(可以看下面的wsl-default-config),启动命令如下:bin/ignite.sh config/wsl-default-config.xml -J-DNODE=<00..99>

wsl-default-config.xml:

xml
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="localPort" value="475${NODE}"/>
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="addresses">
                            <list>
                                <value>127.0.0.1:47500..47599</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>

        <property name="communicationSpi">
            <bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
                <property name="localPort" value="481${NODE}"/>
            </bean>
        </property>

    </bean>
</beans>

首先,以ignite用户登录,如下:

bash
sudo -u ignite /usr/bin/env bash

然后转到Ignite的主文件夹,然后在本地启动希望数量的节点(最多100):

bash
# Navigate to Ignite home folder
cd /usr/share/apache-ignite

# Run several local nodes
bin/ignite.sh config/wsl-default-config.xml -J-DNODE=00 &
bin/ignite.sh config/wsl-default-config.xml -J-DNODE=01 &
...
bin/ignite.sh config/wsl-default-config.xml -J-DNODE=99 &

5.Docker部署

Docker可以将Ignite应用及其所有的依赖打包进一个标准的容器,Docker会自动下载Ignite二进制包,将用户的库文件部署进Ignite以及配置节点,它还可以自动启动配置好的Ignite节点,这样的集成方式,使得通过简单地重启Ignite的Docker容器就可以部署新的代码。

要运行一个Docker容器,需要拉取和启动一个Docker镜像,默认会下载最新的版本,在这里可以看到完整的标签列表。

5.1.下载Ignite的Docker镜像

使用下面的命令,可以拉取Ignite的Docker镜像:

shell
# Pull latest version.
sudo docker pull apacheignite/ignite

# Pull a specific Ignite version {ignite-version}
sudo docker pull apacheignite/ignite:{ignite-version}

5.2.以内存集群模式运行Ignite的Docker镜像

使用下面的命令可以运行Ignite的Docker镜像:

shell
# Run latest version.
sudo docker run -it --net=host \
-e "CONFIG_URI=$CONFIG_URI" \
-e "OPTION_LIBS=$OPTION_LIBS" \
-e "JVM_OPTS=$JVM_OPTS" \
apacheignite/ignite

# Run a specific Ignite version
sudo docker run -it --net=host \
-e "CONFIG_URI=$CONFIG_URI" \
-e "OPTION_LIBS=$OPTION_LIBS" \
-e "JVM_OPTS=$JVM_OPTS" \
apacheignite/ignite:{ignite-version}

下面的配置参数在docker容器中可以通过环境变量进行传递:

名称描述默认示例
CONFIG_URIIgnite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xmlhttps://raw.githubusercontent.com/apache/ignite/master/examples/config/example-cache.xml
OPTION_LIBS会被包含在类路径中的可选库ignite-log4j, ignite-spring,ignite-indexingignite-aws,ignite-aop
JVM_OPTS通过docker命令传递给ignite实例的环境变量。-Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxPermSize=256m
EXTERNAL_LIBS库文件URL列表http://central.maven.org/maven2/io/undertow/undertow-servlet/1.3.10.Final/undertow-servlet-1.3.10.Final.jar,http://central.maven.org/maven2/io/undertow/undertow-build-config/1.0.0.Beta24/undertow-build-config-1.0.0.Beta24.jar

5.3.以持久化集群模式运行Ignite的Docker镜像

如果要使用Ignite的持久化,Ignite会将用户的数据保存在容器文件系统的默认工作目录({IGNITE_HOME}/work)下,如果重启容器,该目录会被清空,要避免这个问题,可以这样做:

  • 使用一个持久化卷来保存数据;
  • 加载一个本地目录。

下面会详细描述这两个选项:

使用持久化卷

使用下面的命令可以创建一个持久化卷:

shell
sudo docker volume create persistence-volume

在运行Ignite的Docker镜像时,可以将该卷加载到一个特定的目录中,这个目录需要传入Ignite,这可以通过两种方式实现:

  • 使用IGNITE_WORK_DIR系统属性;
  • 在节点的配置文件中。

下面的命令会启动Ignite的Docker镜像,然后通过系统属性将工作目录传给Ignite:

shell
docker run -d \
  -v persistence-volume:/persistence \
  -e IGNITE_WORK_DIR=/persistence \
  apacheignite/ignite

如果希望通过XML配置文件或者编程的方式配置工作目录,可以通过配置IgniteConfiguration.workDirectory属性实现,一定要注意该属性的值要与上面的docker run命令的-v参数值相一致。

使用本地目录

如果不创建卷,也可以将一个本地目录加载到运行Ignite镜像的容器中,然后使用这个目录存储持久化数据。当使用相同的命令重启容器时,Ignite会加载已有的数据。

shell
mkdir ignite_work_dir
docker run -d \
  -v ${PWD}/ignite_work_dir:/persistence \
  -e IGNITE_WORK_DIR=/persistence \
  apacheignite/ignite

-v参数会在容器的/persistence目录下加载一个本地目录,-e IGNITE_WORK_DIR=/persistence选项会通知Ignite将这个目录作为工作目录。

5.4.示例

要启动Ignite的docker容器,可以使用如下的命令:

bash
sudo docker run -it --net=host -e "CONFIG_URI=https://raw.githubusercontent.com/apache/ignite/master/examples/config/example-cache.xml" apacheignite/ignite

之后应该看到如下的输出日志:

6.AWS部署

Ignite的AMI(Amazon机器镜像)可以通过AWS的EC2管理控制台快速配置和部署一个简单的Ignite集群。

6.1.Amazon EC2部署

  • 点击下表的链接选择必要的区域:
区域镜像
US-WESTami-9cdbb3fc
US-EASTami-ce82caa4
EU-CENTRALami-191b0775

或者,也可以使用Apache Ignite关键字在Community AMIs中搜索镜像:

  • 选择一个Instance Type;
  • 打开Configure Instance并且展开Advanced Details;
  • 添加下面的任意配置参数;
名称描述默认示例
CONFIG_URIIgnite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xmlhttps://raw.githubusercontent.com/apache/ignite/ master/examples/config/example-cache.xml
OPTION_LIBS会被包含在类路径中的可选库ignite-log4j, ignite-spring,ignite-indexingignite-aws,ignite-aop
JVM_OPTS通过docker命令传递给ignite实例的环境变量。-Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxPermSize=256m
EXTERNAL_LIBS库文件URL列表http://central.maven.org/maven2/io/undertow/undertow-servlet/1.3.10.Final/undertow-servlet-1.3.10.Final.jar,http://central.maven.org/maven2/io/undertow/undertow-build-config/1.0.0.Beta24/undertow-build-config-1.0.0.Beta24.jar
IGNITE_VERSIONIgnite的版本latest2.1.0

如下图所示:

首选Ignite版本

IGNITE_VERSION属性可以视具体情况而定。

bash
sudo docker ps
  • 显示日志:
bash
sudo docker logs -f CONTAINER_ID
  • 进入docker容器:
bash
sudo docker exec -it container_id /bin/bash

7.Google计算部署

Ignite的镜像可以通过Google计算控制台快速配置和部署一个简单的Ignite集群。

7.1.Google计算部署

bash
gcloud compute images create ignite-image \
   --source-uri gs://ignite-media/ignite-google-image.tar.gz

要了解更多信息,可以参照cloud.google.com

  • 打开Google Compute Console
  • 打开Compute->Compute Engine->VM实例,然后点击New instance
  • 点击Boot diskChange按钮;
  • 打开Custom images,然后选择已导入的镜像,在下面的截图中,可以看到名为ignite-name的镜像;

  • 点击Management, disk, networking, access & security options ,然后可以添加任意的配置参数:
名称描述默认示例
CONFIG_URIIgnite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xmlhttps://raw.githubusercontent.com/apache/ignite/ master/examples/config/example-cache.xml
OPTION_LIBS会被包含在类路径中的可选库ignite-log4j, ignite-spring,ignite-indexingignite-aws,ignite-aop
JVM_OPTS通过docker命令传递给ignite实例的环境变量。-Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxPermSize=256m
EXTERNAL_LIBS库文件URL列表http://central.maven.org/maven2/io/undertow/undertow-servlet/1.3.10.Final/undertow-servlet-1.3.10.Final.jar,http://central.maven.org/maven2/io/undertow/undertow-build-config/1.0.0.Beta24/undertow-build-config-1.0.0.Beta24.jar
IGNITE_VERSIONIgnite的版本latest1.7.0

如下图所示:

首选Ignite版本

IGNITE_VERSION属性可以视具体情况而定。

  • 填写必要的属性然后运行实例;
  • 连接实例;
  • 要查看执行的过程,需要知道容器的id,可以使用如下命令:
bash
sudo docker ps
  • 下面的命令会显示日志:
bash
sudo docker logs -f CONTAINER_ID
  • 使用下面的命令可以进入docker容器:
bash
sudo docker exec -it container_id /bin/bash

8.Mesos部署

8.1.概述

Apache Ignite支持在Mesos集群上调度和运行Ignite节点。

Apache Mesos是一个集群管理器,它提供了一个通用运行环境以及所有的必要资源来部署、运行和管理分布式应用。它对资源的管理和隔离有助于充分利用服务器资源。

要了解Apache Mesos的更多信息,请参照:http://mesos.apache.org/

8.2.Ignite Mesos框架

常规部署Apache Ignite集群需要下载Apache Ignite二进制包,修改配置参数以及启动节点。Apache Ignite Mesos框架由调度器任务组成,可以极大地简化集群的部署。

  • 调度器:调度器启动时将自己在Mesos主节点上注册,注册成功之后调度器就会开始处理从Mesos主节点到使用资源的Ignite节点的资源请求,调度器会维护Ignite集群所需(并且可用)的所有资源水平(CPU,内存等);
  • 任务:在Mesos从节点上启动Ignite节点。

8.3.运行Ignite Mesos框架

要运行Ignite Mesos框架需要配置好的正在运行的Apache Mesos集群,如果需要如何Apache Mesos集群的信息,请参照:https://docs.mesosphere.com/getting-started/datacenter/install/

注意

确保主节点和从节点监听正确的IP地址,否则无法保证Mesos集群工作正常。

通过Marathon运行框架

目前,建议的做法是通过Marathon运行框架。

  • 安装Marathon,参照:https://mesosphere.github.io/marathon/docs/marathon章节;
  • 下载Apache Ignite然后将libs\optional\ignite-mesos\ignite-mesos-<ignite-version>-jar-with-dependencies.jar上传到任意一个云存储(比如Amazon S3yun);
  • 拷贝下面的应用定义(JSON格式)然后保存成marathon.json文件,然后对参数做必要的修改;
json
 {
  "id": "ignition",
  "instances": 1,
  "cpus": 2,
  "mem": 2048,
  "ports": [0],
  "uris": [
    "http://host/ignite-mesos-<ignite-version>.jar"
  ],
  "env": {
    "IGNITE_NODE_COUNT": "4",
    "MESOS_MASTER_URL": "zk://localhost:2181/mesos",
    "IGNITE_RUN_CPU_PER_NODE": "2",
    "IGNITE_MEMORY_PER_NODE": "2048",
    "IGNITE_VERSION": "1.0.5",
    "MESOS_USER" : "userAAAAA",
    "MESOS_ROLE" :  "role1"
  },
  "cmd": "java -jar ignite-mesos-<ignite-version>.jar"
}

角色名必须是有效的目录名,因此如下的格式非法:

1.为空串; 2.为.或者..; 3.由-开始; 4.包含斜杠、退格键以及空白符等。

如果集群没有额外的约束,框架会试图占用Mesos集群的所有资源。

  • 通过curl等工具发送应用定义的POST请求给Marathon:
bash
curl -X POST -H "Content-type: application/json" --data-binary @marathon.json http://<marathon-ip>:8080/v2/apps/
  • 为了确保Apache Mesos框架正确部署,可以这么做,打开Marathon界面 http://<marathon-ip>:8080,确保有一个名为ignition的应用,而且状态是Running
  • 打开Mesos控制台http://<master-ip>:5050,如果一切正常那么任务的名字类似Ignite node N,状态是RUNNING。在本示例中,N=4,可以看示例中的marathon.json文件-"IGNITE_NODE_COUNT": "4";
  • Mesos支持通过浏览器获得任务的日志,要查看Ignition的日志可以点击Active Tasks表格中的Sandbox
  • 点击stdout获取标准输出日志,stderr获取标准错误日志;

通过jar文件运行框架

  • 下载Ignite包然后打开libs\optional\ignite-mesos\文件夹;
  • 使用如下命令运行框架:
shell
java -jar ignite-mesos-<ignite-version>.jar

或者:

shell
java -jar ignite-mesos-<ignite-version>.jar properties.prop

其中properties.prop是一个属性文件,如果不提供配置文件那么框架会试图占用Mesos集群的所有资源,下面是一个例子:

properties
# The number of nodes in the cluster.
IGNITE_NODE_COUNT=1
# Mesos ZooKeeper URL to locate leading master.
MESOS_MASTER_URL=zk://localhost:2181/mesos
# The number of CPU Cores for each Apache Ignite node.
IGNITE_RUN_CPU_PER_NODE=4
# The number of Megabytes of RAM for each Apache Ignite node.
IGNITE_MEMORY_PER_NODE=4096
# The version ignite which will be run on nodes.
IGNITE_VERSION=1.7.0
  • 为了确保Apache Mesos框架部署正确,可以打开Mesos控制台http://<marathon-ip>:5050,如果一切正常,名字类似Ignite node N的任务状态应该是Running。在本示例中N=1,可以看示例中的properties.prop文件-"IGNITE_NODE_COUNT": "1";
  • Mesos可以通过浏览器获得任务的日志,要查看Ignition的日志,可以点击Sandbox
  • 点击stdout获取标准输出日志,stderr获取标准错误日志;

8.4.配置

所有配置都是通过环境变量或者配置文件处理的(这非常适用于简化marathon的配置以运行框架),下面的配置参数可以根据需要进行配置:

名称描述默认值示例
IGNITE_RUN_CPU_PER_NODE每个Ignite节点的CPU核数没有限制2
IGNITE_MEMORY_PER_NODE每个节点的内存数量(M)没有限制1024
IGNITE_DISK_SPACE_PER_NODE每个节点占用的磁盘容量(M)10242048
IGNITE_NODE_COUNT集群内的节点数量510
IGNITE_TOTAL_CPUIgnite集群的CPU核数没有限制5
IGNITE_TOTAL_MEMORYIgnite集群占用的内存(M)没有限制
IGNITE_TOTAL_DISK_SPACEIgnite集群占用的磁盘空间(M)没有限制5120
IGNITE_MIN_CPU_PER_NODE要运行Ignite节点所需的CPU核数的最小值14
IGNITE_MIN_MEMORY_PER_NODE要运行Ignite节点所需的内存的最小值(M)2561024
IGNITE_VERSION节点要运行的Ignite的版本latest1.6.0
IGNITE_WORK_DIR保存Ignite二进制包的目录ignite-release/opt/ignite/
IGNITE_XML_CONFIGApache Ignite配置文件的路径/opt/ignite/ignite-config.xml
IGNITE_CONFIG_XML_URLApache Ignite配置文件的URLhttps://example.com/default-config.xml
IGNITE_USERS_LIBS要添加到类路径的库文件的路径/opt/libs/
IGNITE_USERS_LIBS_URL要添加到类路径的库文件的URL列表,逗号分割https://example.com/lib.zip,https://example.com/lib1.zip
MESOS_MASTER_URL要定位主节点的Mesos Zookeeper的URLzk://localhost:2181/mesoszk://176.0.1.45:2181/mesos or 176.0.1.45:2181
IGNITE_PACKAGE_URLIgnite的压缩包URL,这个参数可以用于替换IGNITE_VERSION参数。http://apache-mirror.rbc.ru/pub/apache//ignite/1.7.0/apache-ignite-1.7.0-src.zip
IGNITE_PACKAGE_PATHIgnite的压缩包路径,这个参数在访问因特网受限时是有用的。/opt/ignite/apache-ignite-fabric-1.6.0-bin.zip
IGNITE_HTTP_SERVER_IDLE_TIMEOUT设置一个HTTP连接的最大空闲时间(毫秒),jetty服务器会使用,服务器提供了ignite的mesos框架所需的资源,比如ignite压缩包,用户的库文件,配置等。3000030000

9.Yarn部署

9.1.概述

与Yarn的集成可以支持在Yarn集群上调度和运行Apache Ignite节点。

Yarn是一个资源管理器,它提供了一个包括所有必要资源的通用的运行环境来进行分布式应用的部署,运行和管理,它对资源的管理和隔离有助于充分利用服务器资源。

要了解Yarn的信息,请参照http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

9.2.Ignite Yarn应用

部署Apache Ignite集群的典型步骤是下载Ignite的二进制包,修改配置文件以及启动节点。与Yarn的集成可以避免这些操作,Ignite Yarn应用可以极大的简化集群的部署,它由如下组件组成:

  • 下载Ignite二进制包,将必要的资源放入HDFS,创建启动任务的必要的上下文,启动ApplicationMaster进程;
  • Application master:注册成功之后组件就会开始处理从资源管理器到使用资源的Ignite节点的资源请求,Application master会维护Ignite集群所需的所有资源水平(CPU,内存等);
  • Container:在从节点上运行Ignite节点的实体;

9.3.运行Ignite Yarn应用

要运行Ignite应用,需要配置和运行Yarn和Hadoop集群,要了解如何配置集群的信息,可以参照: http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html.

  • 下载Ignite;
  • 配置属性文件,修改必要的参数,可以参照下面的配置章节:
properties
# The number of nodes in the cluster.
IGNITE_NODE_COUNT=2

# The number of CPU Cores for each Apache Ignite node.
IGNITE_RUN_CPU_PER_NODE=1

# The number of Megabytes of RAM for each Apache Ignite node.
IGNITE_MEMORY_PER_NODE=2048

# The version of Ignite which will be run on nodes.
IGNITE_VERSION=2.3.0

# URL where Ignite distribution can be downloaded from
IGNITE_URL=http://mirror.linux-ia64.org/apache/ignite/2.7.0/apache-ignite-2.7.0-bin.zip

# You can also provide a path to unzipped Ignite distribution instead of the URL
# IGNITE_PATH=/ignite/apache-ignite-2.7.0-bin
  • 运行应用;
bash
yarn jar ignite-yarn-<ignite-version>.jar ./ignite-yarn-<ignite-version>.jar cluster.properties
  • 为了确保应用正确部署,可以打开Yarn控制台http://<hostname>:8088/cluster,看名字为Ignition的应用是否工作正常;
  • 可以从浏览器获得日志,要查看日志可以点击任意容器的Logs
  • 点击stdout获取标准输出日志,stderr获取标准错误日志;

9.4.配置

所有的配置都是通过环境变量和属性文件进行的,下面的配置参数可以根据需要进行配置:

名称描述默认值示例
IGNITE_XML_CONFIG指向Apache Ignite配置文件的HDFS路径/opt/ignite/ignite-config.xml
IGNITE_WORKING_DIR用于保存Ignite二进制包的目录./ignite-release/opt/ignite/
IGNITE_RELEASES_DIR保存Ignite二进制包的HDFS路径/ignite/releases//ignite-rel/
IGNITE_USERS_LIBS要添加到CLASSPATH的库文件的HDFS路径/opt/libs/
IGNITE_MEMORY_PER_NODE每个Ignite节点占用的内存的大小(M),这个是Java堆的大小,包括了堆内缓存(如果使用了堆内缓存)。20481024
IGNITE_MEMORY_OVERHEAD_PER_NODE所有数据区必要的内存量,包括用于处理JVM本身的负载、用于存储数据的节点,都需要调整,不仅仅是计算。YARN用于容器运行Ignite节点的必要内存量是IGNITE_MEMORY_PER_NODE和IGNITE_MEMORY_OVERHEAD_PER_NODE之和。IGNITE_MEMORY_PER_NODE * 0.10,最小值38417408
IGNITE_HOSTNAME_CONSTRAINT从节点约束192.168.0.[1-100]
IGNITE_NODE_COUNT集群节点的数量310
IGNITE_RUN_CPU_PER_NODE每个Ignite节点的CPU核数24
IGNITE_VERSION节点上运行的Ignite版本latest1.0.5
IGNITE_PATH到Ignite二进制包的HDFS路径,当YARN集群运行在内网无法访问互联网时,这个属性很有用。/ignite/apache-ignite-fabric-1.7.0-bin.zip
IGNITE_URL用于下载Ignite二进制包的地址,对于2.7版本,IGNITE_PATH或者IGNITE_URL是必须要有的http://mirror.linux-ia64.org/apache/ignite/2.7.0/apache-ignite-2.7.0-bin.zip
IGNITE_JVM_OPTSJVM参数-XX:+PrintGC

10.VMWare部署

10.1.概述

Ignite可以部署于VMWare管理的虚拟和云环境,没有什么和VMWare有关的特性,不过建议将Ignite实例绑定到一个单一专用的主机,这样可以:

  • 避免当Ignite实例与其它应用程序争用主机资源时,导致Ignite集群的性能出现峰值;
  • 确保高可用,如果一台主机宕机并且有两个或者多个Ignite服务端节点绑定到上面,那么可能导致数据丢失。

下面的内容会说明和Ignite节点迁移有关的vMotion的使用。

10.2.使用vMotion进行节点迁移

vMotion可以将一个在线的实例从一台主机迁移到另一台,但是迁移之后Ignite依赖的一些基本要求要得到满足:

  • 新主机有相同的内存状态;
  • 新主机有相同的磁盘状态(或新主机使用相同的磁盘);
  • IP地址、可用的端口以及其它的网络参数没有变化;
  • 所有的网络资源可用,TCP连接没有中断。

如果vMotion按照上述规则设置并工作,则Ignite节点将正常工作。

不过vMotion迁移将影响Ignite实例的性能。在传输过程中,许多资源(主要是CPU和网络)将服务于vMotion的需要。

为了避免集群一段时间内的性能下降甚至无响应,建议如下:

  • 在Ignite集群的低活跃和负载期间执行迁移。这确保了更快的传输,同时对集群性能影响最小;
  • 避免自动迁移(DRS的完全自动迁移),让IT专家决定迁移Ignite实例的最佳时机;
  • 如果必须迁移多个节点,则需要一个个按顺序地执行节点的迁移;
  • IgniteConfiguration.failureDetectionTimeout参数设置为高于Ignite实例的可能停机时间的值。这是因为当剩下一小块状态要传输时,vMotion将停止Ignite实例的CPU。假定传输该数据块需要X时间,那么IgniteConfiguration.failureDetectionTimeout必须大于X;否则节点将从集群中删除;
  • 使用高吞吐量网络。最好vMotion迁移器和Ignite集群使用不同的网络来避免网络饱和;
  • 优先选择内存较少的节点,较小内存的Ignite实例确保更快的vMotion迁移,更快的迁移确保Ignite集群更稳定的操作;
  • 如果业务允许,甚至可以考虑在Ignite实例停机时进行迁移。假设集群中的其它节点上有数据的备份副本,则可以先将该节点关闭,然后在vMotion迁移结束后恢复该节点,这样和在线迁移相比,可能总体性能更好(集群的性能和vMotion传输时间)。

18624049226