运行 Geode Locator进程

Locator是一个Geode进程,它告诉新连接成员目前运行成员的位置,并为服务器使用提供负载平衡。

您可以将Locator作为对等Locator或服务器Locator, 也可以两者都是来运行:

  • 对等Locator把新加入成员的连接信息,发送给已经在Locator的分布式系统中已经运行的成员。
  • 服务器Locator为客户端提供连接到Locator的分布式系统中运行的服务器的连接信息。 服务器Locator还监视服务器负载并将客户端发送到负载最少的服务器。

默认情况下,Locator同时作为对等和服务器Locator运行。

您可以单独运行Locator或嵌入另一个Geode进程中。 独立运行Locator可以把Locator服务作为一个整体, 提供最好的可靠性和可用性。

Locator 配置和日志文件

Locator配置和日志文件具有以下属性:

  • 当你使用gfsh启动一个独立的Locator时,gfsh会将所需的JAR文件($GEMFIRE/lib/locator-dependencies.jar)自动加载到JVM进程的CLASSPATH中。 如果使用LocatorLauncher API启动独立Locator,则必须在用于启动Locator进程的命令中指定$GEMFIRE/lib/locator-dependencies.jar。有关Geode中CLASSPATH设置的更多信息, 请参阅 Geode 进程的CLASSPATH设置。 您可以通过指定--classpath参数来修改CLASSPATH。
  • Locator和任何其他成员一样,也是分布式系统的成员。 根据mcast-portlocators的配置,Locator的配置应该和服务器一样。 因此,如果分布式系统中还有其他两个Locator,则每个定位器都应引用其他Locator(就像服务器成员一样)。 例如:

    gfsh> start locator --name=locator1 --port=9009 --mcast-port=0 \
    --locators='host1[9001],host2[9003]'
    
  • 您也可以在gemfire.properties文件中配置Locator,或者通过在命令行上指定启动参数。 如果要在属性文件中指定Locator的配置,则Locator需要与分布式系统的其他成员相同的gemfire.properties设置。 如果您使用单独的受限访问安全设置文件,也需要相同的gfsecurity.properties设置。

    例如,要在gemfire.properties:中配置Locator和multicast端口

    locators=host1[9001],host2[9003]
    mcast-port=0
    
  • There is no cache configuration specific to locators.没有特定于Locator的缓存配置。

  • 对于日志记录输出,Locator在其当前工作目录中创建一个日志文件。 日志文件输出默认为Locator工作目录中的locator_name.log。 如果使用先前使用的Locator名称重新启动Locator,则会自动为您更名现有locator_name.log文件(例如,“locator1-01-01.log”或“locator1-02-01.log”)。 您可以通过在启动Locator时,在--log-level参数中指定级别来修改此文件中日志的详细程度。
  • 默认情况下,Locator将从执行gfsh的目录下的一个子目录(以locator命名)开始。 这个子目录被认为是当前的工作目录。 你也可以在gfsh中启动Locator时指定一个不同的工作目录。
  • 默认情况下,由于网络分区事件或成员无响应而关闭和断开的Locator将自行重新启动,并自动尝试重新连接到现有的分布式系统。 当Locator处于重新连接状态时,它不会为分布式系统提供发现服务。详细情况, 请参阅 使用Autoreconnect处理强制缓存断开连接

Locator和集群配置服务

Locator使用集群配置服务来保存适用于所有集群成员或指定组成员的配置。 配置保存在Locator的目录中,并传播到分布式系统中的所有Locator。 当您使用gfsh启动服务器时,服务器会从Locator接收组级别和集群级别的配置。 请参阅 集群配置服务概述.

启动Locator

使用以下操作规范来启动Locator:

  • 独立locator. 使用以下其中一种方法启动独立定位器:

    • 使用gfsh命令行工具。 更多关于gfsh使用信息, 请参阅gfsh。例如:

      gfsh>start locator --name=locator1
      
      gfsh> start locator --name=locator2 --bind-address=192.0.2.0 --port=13489
      
    • 使用org.apache.geode.distributed.LocatorLauncher类和Java可执行文件中的main方法启动locator。 例如:

      working/directory/of/Locator/process$java -server \
       -classpath "$GEMFIRE/lib/locator-dependencies.jar:/path/to/application/classes.jar" \
       org.apache.geode.distributed.LocatorLauncher start Locator1 --port=11235 \
        --redirect-output
      

      具体而言,您可以使用LocatorLauncher类API在您创建的Java应用程序进程中运行嵌入式Locator服务。 执行java命令的目录将成为Locator进程的工作目录。

    • 启动多个Locator时,不要并行启动(换句话说,同时启动)。作为最佳实践,在启动任何其他Locator之前,您应该等待大约30秒钟,让第一个Locator完成启动。 要检查Locator的成功启动,请检查Locator日志文件。 要查看正在运行的Locator的正常运行时间,可以使用gfsh status locator命令。

  • 嵌入式 (colocated) locator. 在成员启动时或通过API管理colocated locator:

    • 使用gemfire.properties``start-locator设置在Geode成员中自动启动Locator。请参阅 Reference。当该成员退出时,Locator自动停止。 该属性按照以下语法声明:

       #gemfire.properties
       start-locator=[address]port[,server={true|false},peer={true|false}]
      

      例如:

       #gemfire.properties
       start-locator=13489
      
    • 使用 org.apache.geode.distributed.LocatorLauncher API 在你的代码中启动Locator。使用LocatorLauncher.Builder类构造LocatorLauncher的实例,然后使用start()方法启动嵌入在Java应用程序进程中的Locator服务。 LocatorLauncher类中的其他方法提供有关Locator的状态信息,并允许您停止Locator。

      import org.apache.geode.distributed.LocatorLauncher;
      
       public class MyEmbeddedLocator {
      
          public static void main(String[] args){
              LocatorLauncher locatorLauncher  = new LocatorLauncher.Builder()
                .setMemberName("locator1")
                .setPort(13489)
                .build();
      
                locatorLauncher.start();
      
                System.out.println("Locator successfully started");
              }
          }
      

      这里有另外一个例子,在应用程序中嵌入locator,之后进行启动,然后在允许其他成员访问locator之前检查locator的状态:

      package example;
      
      import ...
      
      class MyApplication implements Runnable {
      
        private final LocatorLauncher locatorLauncher;
      
        public MyApplication(final String... args) {
          validateArgs(args);
      
          locatorLauncher = new LocatorLauncher.Builder()
            .setMemberName(args[0])
            .setPort(Integer.parseInt(args[1])
            .setRedirectOutput(true)
            .build();
        }
      
        protected void args(final String[] args) {
          ...
        }
      
        public void run() {
          ...
      
          // start the Locator in-process
          locatorLauncher.start();
      
          // wait for Locator to start and be ready to accept member (client) connections
          locatorLauncher.waitOnStatusResponse(30, 5, TimeUnit.SECONDS);
      
          ...
        }
      
        public static void main(final String... args) {
          new MyApplication(args).run();
        }
      
      }
      

      然后执行应用程序,你可以运行:

      /working/directory/of/MyApplication$ java \
       -server -classpath "$GEMFIRE/lib/locator-dependencies.jar:/path/to/application/classes.jar" \
       example.MyApplication Locator1 11235
      

      执行java命令的目录将成为Locator进程的工作目录。

检查 Locator 状态

如果您通过gfsh连接到分布式系统,则可以通过提供Locator名称来检查正在运行的Locator的状态。 例如:

gfsh>status locator --name=locator1

如果您没有连接到分布式系统,则可以通过提供进程ID,Locator的主机名和端口或Locator的当前工作目录来检查本地Locator的状态。 例如:

gfsh>status locator --pid=2986

或者

gfsh>status locator --host=host1 --port=1035

或者

$ gfsh status locator --dir=<locator_working_directory>

其中<locator_working_directory>对应于Locator正在运行的本地工作目录。

如果成功,该命令将返回以下信息(使用在启动时提供的JVM参数):

$ gfsh status locator --dir=locator1
Locator in /home/user/locator1 on ubuntu.local[10334] as locator1 is currently online.
Process ID: 2359
Uptime: 17 minutes 3 seconds
GemFire Version: 8.0.0
Java Version: 1.7.0_65
Log File: /home/user/locator1/locator1.log
JVM Arguments: -Dgemfire.enable-cluster-configuration=true -Dgemfire.load-cluster-configuration-from-dir=false
 -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /home/user/Pivotal_GemFire_800_b48319_Linux/lib/locator-dependencies.jar:/usr/local/java/lib/tools.jar

Cluster configuration service is up and running.

停止Locator

如果您在gfsh中连接到分布式系统,则可以通过提供Locator名称来停止正在运行的Locator。 例如:

gfsh>stop locator --name=locator1

如果您没有连接到分布式系统,则可以通过指定Locator的进程ID或Locator的当前工作目录来停止本地Locator。 例如:

gfsh>stop locator --pid=2986

gfsh>stop locator --dir=<locator_working_directory>

其中<locator_working_directory>对应于Locator正在运行的本地工作目录。

Locators 和 Multi-Site (WAN) 部署

如果使用Multi-Site (WAN)配置,则可以在启动Locator时将Locator连接到远程站点。

要将新Locator进程连接到WAN配置中的远程Locator,请在启动时指定以下内容:

gfsh> start locator --name=locator1 --port=9009 --mcast-port=0 \
--J='-Dgemfire.remote-locators=192.0.2.0[9009],198.51.100.0[9009]'

results matching ""

    No results matching ""