@liyuj
2017-02-03T11:55:07.000000Z
字数 4928
阅读 3662
Apache-Ignite-1.8.0-中文开发手册
AWS云上的节点发现通常认为很有挑战性。Amazon EC2,和其他大部分的虚拟环境一样,有如下的限制:
虽然在没有组播时可以使用基于TCP的发现,但是不得不处理不断变换的IP地址以及不断更新配置。这产生了一个主要的不便之处以至于在这种环境下基于静态IP的配置实质上变得不可用。
为了减轻不断变化的IP地址的问题,Ignite支持通过使用基于TcpDiscoveryS3IpFinder的S3存储来实现节点的自动发现。在启动时节点在Amazon S3存储上注册他们的IP地址,这样其他节点会试图连接任意存储在S3上的IP地址然后初始化网格节点的自动发现。
这个方法可以只配置一次就可以在所有的EC2实例上复用。
下面的例子显示了如何配置基于Amazon S3的IP搜索器:
XML:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">...<property name="discoverySpi"><bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"><property name="ipFinder"><bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.s3.TcpDiscoveryS3IpFinder"><property name="awsCredentials" ref="aws.creds"/><property name="bucketName" value="YOUR_BUCKET_NAME"/></bean></property></bean></property></bean><!-- AWS credentials. Provide your access key ID and secret access key. --><bean id="aws.creds" class="com.amazonaws.auth.BasicAWSCredentials"><constructor-arg value="YOUR_ACCESS_KEY_ID" /><constructor-arg value="YOUR_SECRET_ACCESS_KEY" /></bean>
Java:
TcpDiscoverySpi spi = new TcpDiscoverySpi();BasicAWSCredentials creds = new BasicAWSCredentials("yourAccessKey", "yourSecreteKey");TcpDiscoveryS3IpFinder ipFinder = new TcpDiscoveryS3IpFinder();ipFinder.setAwsCredentials(creds);spi.setIpFinder(ipFinder);IgniteConfiguration cfg = new IgniteConfiguration();// Override default discovery SPI.cfg.setDiscoverySpi(spi);// Start Ignite node.Ignition.start(cfg);
GCE上的节点发现通常认为很有挑战性。Google云,和其他大部分的虚拟环境一样,有如下的限制:
虽然在没有组播时可以使用基于TCP的发现,但是不得不处理不断变换的IP地址以及不断更新配置。这产生了一个主要的不便之处以至于在这种环境下基于静态IP的配置实质上变得不可用。
为了减轻不断变化的IP地址的问题,Ignite支持通过使用基于TcpDiscoveryGoogleStorageIpFinder的Google云存储来实现节点的自动发现。在启动时节点在存储上注册他们的IP地址,这样其他节点会试图连接任意保存在存储上的IP地址然后初始化网格节点的自动发现。
这个方法可以只配置一次就可以在所有的EC2实例上复用。
下面的例子显示了如何配置基于Google云存储的IP搜索器:
XML:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">...<property name="discoverySpi"><bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"><property name="ipFinder"><bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.gce.TcpDiscoveryGoogleStorageIpFinder"><property name="projectName" ref="YOUR_GOOGLE_PLATFORM_PROJECT_NAME"/><property name="bucketName" value="YOUR_BUCKET_NAME"/><property name="serviceAccountId" value="YOUR_SERVICE_ACCOUNT_ID"/><property name="serviceAccountP12FilePath" value="PATH_TO_YOUR_PKCS12_KEY"/></bean></property></bean></property></bean>
Java:
TcpDiscoverySpi spi = new TcpDiscoverySpi();TcpDiscoveryGoogleStorageIpFinder ipFinder = new TcpDiscoveryGoogleStorageIpFinder();ipFinder.setServiceAccountId(yourServiceAccountId);ipFinder.setServiceAccountP12FilePath(pathToYourP12Key);ipFinder.setProjectName(yourGoogleClourPlatformProjectName);// Bucket name must be unique across the whole Google Cloud Platform.ipFinder.setBucketName("your_bucket_name");spi.setIpFinder(ipFinder);IgniteConfiguration cfg = new IgniteConfiguration();// Override default discovery SPI.cfg.setDiscoverySpi(spi);// Start Ignite node.Ignition.start(cfg);
云平台上的节点发现通常认为很有挑战性。Google云,和其他大部分的虚拟环境一样,有如下的限制:
虽然在没有组播时可以使用基于TCP的发现,但是不得不处理不断变换的IP地址以及不断更新配置。这产生了一个主要的不便之处以至于在这种环境下基于静态IP的配置实质上变得不可用。
为了减轻不断变化的IP地址的问题,Ignite支持通过使用基于TcpDiscoveryCloudIpFinder的Apache jclouds工具包来实现节点的自动发现。要了解有关Apache JCloud的信息,请参照jclouds.apache.org。
该IP搜索器形成节点地址,通过获取云上所有虚拟机的私有和共有IP地址以及给他们增加一个端口号使Ignite可以运行,该端口可以通过TcpDiscoverySpi.setLocalPort(int)或者TcpDiscoverySpi.DFLT_PORT进行设置,这样所有节点会连接任何生成的的IP地址然后初始化网格节点的自动发现。
可以参考Apache jclouds providers section来获取他支持的云平台的列表。
所有虚拟机都要使用同一个端口启动Ignite实例,否则他们无法通过IP搜索器发现对方。
下面的例子显示了如何配置基于Apache JCloud的IP搜索器:
XML:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">...<property name="discoverySpi"><bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"><property name="ipFinder"><bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.cloud.TcpDiscoveryCloudIpFinder"><!-- Configuration for Google Compute Engine. --><property name="provider" value="google-compute-engine"/><property name="identity" value="YOUR_SERVICE_ACCOUNT_EMAIL"/><property name="credentialPath" value="PATH_YOUR_PEM_FILE"/><property name="zones"><list><value>us-central1-a</value><value>asia-east1-a</value></list></property></bean></property></bean></property></bean>
Java:
TcpDiscoverySpi spi = new TcpDiscoverySpi();TcpDiscoveryCloudIpFinder ipFinder = new TcpDiscoveryCloudIpFinder();// Configuration for AWS EC2.ipFinder.setProvider("aws-ec2");ipFinder.setIdentity(yourAccountId);ipFinder.setCredential(yourAccountKey);ipFinder.setRegions(Collections.<String>emptyList().add("us-east-1"));ipFinder.setZones(Arrays.asList("us-east-1b", "us-east-1e"));spi.setIpFinder(ipFinder);IgniteConfiguration cfg = new IgniteConfiguration();// Override default discovery SPI.cfg.setDiscoverySpi(spi);// Start Ignite node.Ignition.start(cfg);