运行 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-port
和locators
的配置,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]'