# 安装和部署

# 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的工作文件夹:

    # 3.Maven配置

    # 3.1.概述

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

    注意

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

    Java 9/10/11

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

    # 3.2.常规依赖

    Ignite强依赖于ignite-core.jar

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

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

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

    • ignite-indexing(可选,如果需要SQL查询)
    • ignite-spring(可选,如果需要spring配置)
    <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的源代码包中运行如下的命令:

    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:

    # 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
    

      # 4.3.Ignite的安装

      安装Ignite的最新版:

        安装后的结构如下:

        文件夹 映射至 描述
        /usr/share/apache-ignite Ignite安装的根目录
        /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/work Ignite的工作目录
        /usr/share/doc/2.8.0/apache-ignite 文档
        /usr/share/license/apache-ignite-<version> 协议
        /etc/systemd/system systemd服务配置

        # 4.4.将Ignite作为服务

        注意

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

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

        运行Ignite服务:

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

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

        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用户,如下:

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

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

          # 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:

          <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用户登录,如下:

          sudo -u ignite /usr/bin/env bash
          

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

          # 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镜像:

          # 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镜像:

          # 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_URI Ignite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xml https://raw.githubusercontent.com/apache/ignite/master/examples/config/example-cache.xml
          OPTION_LIBS 会被包含在类路径中的可选库 ignite-log4j, ignite-spring,ignite-indexing ignite-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)下,如果重启容器,该目录会被清空,要避免这个问题,可以这样做:

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

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

          使用持久化卷

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

          sudo docker volume create persistence-volume
          

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

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

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

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

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

          使用本地目录

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

          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容器,可以使用如下的命令:

          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-WEST ami-9cdbb3fc
          US-EAST ami-ce82caa4
          EU-CENTRAL ami-191b0775

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

          • 选择一个Instance Type;
          • 打开Configure Instance并且展开Advanced Details;
          • 添加下面的任意配置参数;
          名称 描述 默认 示例
          CONFIG_URI Ignite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xml https://raw.githubusercontent.com/apache/ignite/ master/examples/config/example-cache.xml
          OPTION_LIBS 会被包含在类路径中的可选库 ignite-log4j, ignite-spring,ignite-indexing ignite-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_VERSION Ignite的版本 latest 2.1.0

          如下图所示:

          首选Ignite版本

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

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

          # 7.Google计算部署

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

          # 7.1.Google计算部署

          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_URI Ignite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xml https://raw.githubusercontent.com/apache/ignite/ master/examples/config/example-cache.xml
          OPTION_LIBS 会被包含在类路径中的可选库 ignite-log4j, ignite-spring,ignite-indexing ignite-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_VERSION Ignite的版本 latest 1.7.0

          如下图所示:

          首选Ignite版本

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

          • 填写必要的属性然后运行实例;
          • 连接实例;
          • 要查看执行的过程,需要知道容器的id,可以使用如下命令:
          sudo docker ps
          
          • 下面的命令会显示日志:
          sudo docker logs -f CONTAINER_ID
          
          • 使用下面的命令可以进入docker容器:
          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文件,然后对参数做必要的修改;
           {
            "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:
          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\文件夹;
          • 使用如下命令运行框架:
          java -jar ignite-mesos-<ignite-version>.jar
          

          或者:

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

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

          # 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) 1024 2048
          IGNITE_NODE_COUNT 集群内的节点数量 5 10
          IGNITE_TOTAL_CPU Ignite集群的CPU核数 没有限制 5
          IGNITE_TOTAL_MEMORY Ignite集群占用的内存(M) 没有限制
          IGNITE_TOTAL_DISK_SPACE Ignite集群占用的磁盘空间(M) 没有限制 5120
          IGNITE_MIN_CPU_PER_NODE 要运行Ignite节点所需的CPU核数的最小值 1 4
          IGNITE_MIN_MEMORY_PER_NODE 要运行Ignite节点所需的内存的最小值(M) 256 1024
          IGNITE_VERSION 节点要运行的Ignite的版本 latest 1.6.0
          IGNITE_WORK_DIR 保存Ignite二进制包的目录 ignite-release /opt/ignite/
          IGNITE_XML_CONFIG Apache Ignite配置文件的路径 /opt/ignite/ignite-config.xml
          IGNITE_CONFIG_XML_URL Apache Ignite配置文件的URL https://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的URL zk://localhost:2181/mesos zk://176.0.1.45:2181/mesos or 176.0.1.45:2181
          IGNITE_PACKAGE_URL Ignite的压缩包URL,这个参数可以用于替换IGNITE_VERSION参数。 http://apache-mirror.rbc.ru/pub/apache//ignite/1.7.0/apache-ignite-1.7.0-src.zip
          IGNITE_PACKAGE_PATH Ignite的压缩包路径,这个参数在访问因特网受限时是有用的。 /opt/ignite/apache-ignite-fabric-1.6.0-bin.zip
          IGNITE_HTTP_SERVER_IDLE_TIMEOUT 设置一个HTTP连接的最大空闲时间(毫秒),jetty服务器会使用,服务器提供了ignite的mesos框架所需的资源,比如ignite压缩包,用户的库文件,配置等。 30000 30000

          # 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;
          • 配置属性文件,修改必要的参数,可以参照下面的配置章节:
          # 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
          
          • 运行应用;
          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堆的大小,包括了堆内缓存(如果使用了堆内缓存)。 2048 1024
          IGNITE_MEMORY_OVERHEAD_PER_NODE 所有数据区必要的内存量,包括用于处理JVM本身的负载、用于存储数据的节点,都需要调整,不仅仅是计算。YARN用于容器运行Ignite节点的必要内存量是IGNITE_MEMORY_PER_NODE和IGNITE_MEMORY_OVERHEAD_PER_NODE之和。 IGNITE_MEMORY_PER_NODE * 0.10,最小值384 17408
          IGNITE_HOSTNAME_CONSTRAINT 从节点约束 192.168.0.[1-100]
          IGNITE_NODE_COUNT 集群节点的数量 3 10
          IGNITE_RUN_CPU_PER_NODE 每个Ignite节点的CPU核数 2 4
          IGNITE_VERSION 节点上运行的Ignite版本 latest 1.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_OPTS JVM参数 -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

          最后更新时间:: 10/21/2020, 4:44:25 PM