运行Geode Server进程
Geode服务器是一个作为客户机/服务器(client/server, C/S)系统的长期可配置成员运行的进程。
Geode服务器主要用于托管长期存在的数据region,以及用于运行标准Geode进程(如客户机/服务器配置中的服务器)。您可以使用以下方法启动和停止服务器:
gfsh
工具允许您从命令行管理Geode服务器进程。- 您还可以通过
org.apache.geode.distributed.ServerLauncher
API启动,停止和管理Geode服务器。ServerLauncher
API只能用于以gfsh
或ServerLauncher
类自身启动的Geode服务器。 有关使用ServerLauncher
API的更多细节,请参阅JavaDocs。
默认服务器配置和日志文件
gfsh
工具使用工作目录来保存其配置文件和日志文件。 这些是默认和配置选项:
- 当你使用
gfsh
启动一个独立的服务器时,gfsh
会将所需的JAR文件$GEMFIRE/lib/server-dependencies.jar
和$JAVA_HOME/lib/tools.jar
自动加载到JVM的CLASSPATH中。 如果使用ServerLauncher API启动独立服务器,则必须在命令中指定$GEMFIRE/lib/server-dependencies.jar
来启动进程。 有关Geode中CLASSPATH设置的更多信息,请参阅CLASSPATH设置。 - 服务器像任何其他Geode进程一样配置,通过
gemfire.properties
和共享集群配置文件进行设置。 除了通过应用程序插件之外,它不支持编程。 通常,您提供gemfire.properties
文件和gfsecurity.properties
文件(如果您正在使用单独的受限访问安全设置文件)来配置服务器。 你也可以在缓存服务器的工作目录中指定一个cache.xml
文件。 默认情况下,假设locator正在运行集群配置服务,则使用
gfsh
启动的新服务器将从集群配置服务接收其初始缓存配置。 如果您在启动服务器时指定了一个组,服务器还会接收适用于该组的配置。 共享配置由cache.xml
文件,gemfire.properties
文件和部署的jar文件组成。 您可以通过在使用gfsh
启动服务器时指定--use-cluster-configuration = false
来禁止使用集群配置服务。 请参阅集群配置服务概述.如果使用Spring框架,您也可以使用
--spring-xml-location
命令行选项在gfsh
中启动服务器时指定一个Spring ApplicationContext XML文件。 这个选项允许你用你的Spring应用程序的配置引导你的Geode服务器进程。详细信息, 请参阅 Spring documentation 。- 对于日志记录输出,日志文件输出默认为缓存服务器工作目录中的
server_name.log
。 如果使用相同的服务器名称重新启动服务器,现有的server_name.log文件将自动为您更名(例如,“server1-01-01.log”或“server1-02-01.log”)。 您可以通过在启动服务器时,在--log-level
参数中指定级别来修改此文件中日志的详细程度。 - 默认情况下,服务器将在执行
gfsh
的目录下的子目录(以服务器指定的--name
命名的目录)中启动。 这个子目录被认为是当前的工作目录。 您也可以在gfsh
中启动缓存服务器时指定一个不同的工作目录。 - 默认情况下,由于网络分区事件或成员无响应而关闭和断开的服务器将自行重新启动,并自动尝试重新连接到现有的分布式系统。 详细情况, 请参阅 使用Autoreconnect处理强制缓存断开连接。
您可以在服务器启动时使用
--J=-Dproperty.name=value
将JVM参数传递给服务器的JVM。 这些参数可以是Java属性或Geode配置属性,如gemfire.jmx-manager
。 例如:gfsh>start server --name=server1 --J=-Dgemfire.jmx-manager=true \ --J=-Dgemfire.jmx-manager-start=true --J=-Dgemfire.http-port=8080
在启动服务器时, 我们建议您不要使用
-XX:+UseCompressedStrings
和-XX:+UseStringCache
JVM配置属性。 这些JVM选项可能会导致数据损坏和兼容性问题。
启动服务器
Geode服务器在gfsh
中的启动语法是:
start server --name=value [--assign-buckets(=value)] [--bind-address=value]
[--cache-xml-file=value] [--classpath=value] [--disable-default-server(=value)]
[--disable-exit-when-out-of-memory(=value)] [--enable-time-statistics(=value)]
[--force(=value)] [--include-system-classpath(=value)] [--properties-file=value]
[--security-properties-file=value]
[--group=value] [--locators=value] [--locator-wait-time=value] [--log-level=value]
[--mcast-address=value] [--mcast-port=value] [--memcached-port=value]
[--memcached-protocol=value] [--rebalance(=value)] [--server-bind-address=value]
[--server-port=value] [--spring-xml-location=value]
[--statistic-archive-file=value] [--dir=value] [--initial-heap=value]
[--max-heap=value] [--use-cluster-configuration(=value)] [--J=value(,value)*]
[--critical-heap-percentage=value] [--critical-off-heap-percentage=value]
[--eviction-heap-percentage=value] [--eviction-off-heap-percentage=value]
[--hostname-for-clients=value] [--max-connections=value]
[--message-time-to-live=value] [--max-message-count=value] [--max-threads=value]
[--socket-buffer-size=value] [--lock-memory=value] [--off-heap-memory-size=value]
注意:
如果在服务器启动时指定了--max-heap
和 --initial-heap
,则Geode的资源管理器会在内部指定其他相关的GC参数。 如果你不想要资源管理器设置的额外的默认GC属性,那么使用-Xms
&-Xmx
JVM选项。详细情况,请参阅使用Resource Manager控制 Heap的使用 。
下面的gfsh start server
启动服务器,为缓存配置指定一个cache.xml
文件,并使用不同的客户端连接端口:
gfsh>start server --name=server1 --mcast-port=10338 \
--cache-xml-file=../ServerConfigs/cache.xml --server-port=40404
gfsh>start server --name=server2 --mcast-port=10338 \
--cache-xml-file=../ServerConfigs/cache.xml --server-port=40405
以下是gemfire.properties文件的一部分,它为服务器设置cache.xml
文件的位置,并设置mcast-port:
mcast-port=10338
cache-xml-file=D:\gfeserver\cacheCS.xml
要使用gemfire.properties
文件启动服务器,请输入:
gfsh>start server --name=server1 \
--properties-file=D:\gfeserver\gemfire.properties
要启动服务器的同时启动嵌入式JMX管理器,可以输入以下命令:
gfsh>start server --name=server2 \
--J=-Dgemfire.jmx-manager=true --J=-Dgemfire.jmx-manager-start=true
要启动服务器并指定JVM配置设置,可以发出如下所示的命令:
gfsh>start server --name=server3 \
--J=-Xms80m,-Xmx80m --J=-XX:+UseConcMarkSweepGC,-XX:CMSInitiatingOccupancyFraction=65
以编程方式启动服务器
使用org.apache.geode.distributed.ServerLauncher
API在代码中启动缓存服务器进程。 使用ServerLauncher.Builder
类构造ServerLauncher
的实例,然后使用start()
方法启动服务器服务。 ServerLauncher
类中的其他方法提供有关服务器的状态信息,并允许您停止服务器。
import org.apache.geode.distributed.ServerLauncher;
public class MyEmbeddedServer {
public static void main(String[] args){
ServerLauncher serverLauncher = new ServerLauncher.Builder()
.setMemberName("server1")
.setServerPort(40405)
.set("jmx-manager", "true")
.set("jmx-manager-start", "true")
.build();
serverLauncher.start();
System.out.println("Cache server successfully started");
}
}
检查服务器状态
如果您通过gfsh
连接到分布式系统,则可以通过指定服务器名称来检查正在运行的缓存服务器的状态。 例如:
gfsh>status server --name=server1
如果您没有连接到分布式系统,则可以通过提供进程ID或服务器的当前工作目录来检查本地缓存服务器的状态。 例如:
gfsh>status server --pid=2484
或者
% gfsh status server --dir=<server_working_directory>
其中<server_working_directory>对应于cache server正在运行的本地工作目录。
如果命令执行成功,该命令将返回以下信息(使用在启动时提供的JVM参数):
% gfsh status server --dir=server4
Server in /home/user/server4 on ubuntu.local[40404] as server4 is currently online.
Process ID: 3324
Uptime: 1 minute 5 seconds
GemFire Version: 8.0.0
Java Version: 1.7.0_65
Log File: /home/user/server4/server4.log
JVM Arguments:
...
停止服务器
如果您通过gfsh
连接到分布式系统,则可以通过指定服务器名称来停止正在运行的缓存服务器。 例如:
gfsh>stop server --name=server1
如果您未连接到分布式系统,则可以通过指定服务器的当前工作目录或进程ID来停止本地缓存服务器。 例如:
gfsh>stop server --pid=2484
或者
gfsh>stop server --dir=<server_working_directory>
其中<server_working_directory>对应于cache server正在运行的本地工作目录。
您也可以使用gfsh
shutdown
命令, 这个命令会按顺序关闭所有缓存服务器。 如果您使用持久性region的话,这非常有帮助。 详细信息,请参阅 启动和关闭系统 。