下载 .zip
或者 .tar
文件从 http://geode.apache.org.
解压 .zip
或者 .tar
文件, 这个 path_to_product
是绝对路径.
例如 .zip
格式:
$ unzip apache-geode-1.14.0.zip -d path_to_product
例如 .tar
格式:
$ tar -xvf apache-geode-1.14.0.tar -C path_to_product
设置 JAVA_HOME
环境变量. 在 Linux/Unix 下:
JAVA_HOME=/usr/java/jdk1.8.0_60
export JAVA_HOME
在 Windows 平台:
set JAVA_HOME=c:\Program Files\Java\jdk1.8.0_60
添加 Geode
脚本 到你的 PATH
环境变量里. 在 Linux/Unix 下:
PATH=$PATH:$JAVA_HOME/bin:path_to_product/bin
export PATH
在 Windows
下:
set PATH=%PATH%;%JAVA_HOME%\bin;path_to_product\bin
为了验证安装是否成功, 键入 gfsh version
命令, 查看输出. 例如:
$ gfsh version
v1.14.0
想查看更详细的信息, 比如 构建日期和版本号, JDK 版本等等, 键入:
$ gfsh version --full
创建一个工作目录 例如, my_geode
) 然后进入它. gfsh
在此目录下保存locator 和 server 的工作目录和日志文件.
键入 gfsh
命令启动它(或者 gfsh.bat
在Windows操作操作系统下).
_________________________ __
/ _____/ ______/ ______/ /____/ /
/ / __/ /___ /_____ / _____ /
/ /__/ / ____/ _____/ / / / /
/______/_/ /______/_/ /_/ 1.5
Monitor and Manage Geode
gfsh>
在进入 gfsh
后, 键入 start locator
命令指定 locator 的名字:
gfsh>start locator --name=locator1
Starting a Geode Locator in /home/username/my_geode/locator1...
.................................
Locator in /home/username/my_geode/locator1 on ubuntu.local[10334] as locator1 is currently online.
Process ID: 3529
Uptime: 18 seconds
Geode Version: 1.5
Java Version: 1.8.0_121
Log File: /home/username/my_geode/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/username/Apache_Geode_Linux/lib/geode-core-1.0.0.jar:
/home/username/Apache_Geode_Linux/lib/geode-dependencies.jar
Successfully connected to: JMX Manager [host=10.118.33.169, port=1099]
Cluster configuration service is up and running.
如果你运行 start locator
从 gfsh
没有指定 member 名字, gfsh 会自动生成一个随机的 member 名字. 这对自动化操作非常有用.
启动基于浏览器的脉冲监测工具. Pulse是一个Web应用程序,它提供了一个图形仪表板,用于监控Geode集群,成员和regions的重要的实时健康和性能.参考Geode Pulse
gfsh>start pulse
此命令启动Pulse并自动连接到在Locator
中运行的JMX Manager.在Pulse登录页面上,输入默认用户名admin
和密码admin
.
Pulse应用程序显示刚刚启动的定位器(locator1): [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yhuX8ySO-1662299034208)(assets/pulse_locator.png)]
Geode服务器是作为一个长期运行的,可配置成员的集群(也称为分布式系统). Geode服务器主要用于托管长期数据区域(data regions)和运行标准Geode进程,例如客户端/服务器配置中的服务器.参考Running Geode Server Processes.
启动一个缓存服务器:
gfsh>start server -name=server1 -server-port=40411
此命令在 40411
的指定端口上启动名为"server1"的缓存服务器.
如果你运行 start server
命令从 gfsh
没有指定 member 名字, gfsh
会自动随机生成一个随机的 member 名字. 这对自动化操作非常有用.
在Pulse中观察变化(新成员[member]和服务器[server]).尝试扩展分布式系统图标,以图形方式查看定位器和缓存服务器.
在此步骤中,使用gfsh
命令创建一个region.region是Geode集群的核心构建块,并提供了组织数据的方法.在此次练习中创建的region在集群成员之间复制数据(replicated),并利用持久性将数据保存到磁盘(persistent).参考Data Regions
gfsh>create region --name=regionA --type=REPLICATE_PERSISTENT
Member | Status
------- | --------------------------------------
server1 | Region "/regionA" created on "server1"
注意该region被server1托管.
gfsh
命令查看集群上的region列表gfsh>list regions
List of regions
---------------
regionA
gfsh>list members
Name | Id
------------ | ---------------------------------------
Coordinator: | 192.0.2.0(locator1:3529:locator):59926
locator1 | 192.0.2.0(locator1:3529:locator):59926
server1 | 192.0.2.0(server1:3883):65390
gfsh>describe region --name=regionA
..........................................................
Name : regionA
Data Policy : persistent replicate
Hosting Members : server1
Non-Default Attributes Shared By Hosting Members
Type | Name | Value
------ | ---- | -----
Region | size | 0
Note: 保持此
gfsh
提示打开以供后续步骤使用.
Apache Geode以键/值对形式对数据进行管理.在大多数应用程序中,Java程序添加,删除和修改存储的数据.同时也可以使用gfsh命令添加和检索数据.参考Data Commands.
put
命令向region中添加数据.gfsh>put --region=regionA --key="1" --value="one"
Result : true
Key Class : java.lang.String
Key : 1
Value Class : java.lang.String
Old Value :
gfsh>put --region=regionA --key="2" --value="two"
Result : true
Key Class : java.lang.String
Key : 2
Value Class : java.lang.String
Old Value :
gfsh>query --query="select * from /regionA"
Result : true
startCount : 0
endCount : 20
Rows : 2
Result
------
two
one
注意到结果是刚刚使用put
命令添加的两条数据条目(entries).
参考Data Entries.
gfsh>stop server --name=server1
Stopping Cache Server running in /home/username/my_geode/server1 on ubuntu.local[40411] as server1...
Process ID: 3883
Log File: /home/username/my_geode/server1/server1.log
....
gfsh>start server --name=server1 --server-port=40411
gfsh>query --query="select * from /regionA"
Result : true
startCount : 0
endCount : 20
Rows : 2
Result
------
two
one
因为regionA有持久性,它将数据的副本写入磁盘.当托管regionA的服务器启动时,数据将被填充到高速缓存中.请注意,结果显示停止服务器之前使用put
命令添加的两个数据条目的值.
参考Data Entries
参考Data Regions
在此步骤中,启动第二个缓存服务器.因为regionA是可复制的,所以该数据将在托管该区域的任何服务器上可用.
gfsh>start server --name=server2 --server-port=40412
describe region
命令,查看regionA的详细信息:gfsh>describe region --name=regionA
..........................................................
Name : regionA
Data Policy : persistent replicate
Hosting Members : server1
server2
Non-Default Attributes Shared By Hosting Members
Type | Name | Value
------ | ---- | -----
Region | size | 2
请注意,不需要再为server2创建regionA.命令的输出显示regionA托管在server1和server2上.当gfsh启动服务器时,它会从群集配置服务请求配置,集群配置服务会将共享配置分发到加入群集的任何新服务器.
gfsh>put --region=regionA --key="3" --value="three"
Result : true
Key Class : java.lang.String
Key : 3
Value Class : java.lang.String
Old Value :
gfsh>stop server --name=server1
Stopping Cache Server running in /home/username/my_geode/server1 on ubuntu.local[40411] as server1...
Process ID: 4064
Log File: /home/username/my_geode/server1/server1.log
....
gfsh>query --query="select * from /regionA"
Result : true
startCount : 0
endCount : 20
Rows : 3
Result
------
two
one
three
注意数据包含3个条目, 包括你刚刚添加的那个.
gfsh>put --region=regionA --key="4" --value="four"
Result : true
Key Class : java.lang.String
Key : 3
Value Class : java.lang.String
Old Value :
只有server2正在运行.因为数据被复制和持久化,所有数据仍然可用.但是新的数据条目当前仅在server2 上可用.
gfsh>describe region --name=regionA
..........................................................
Name : regionA
Data Policy : persistent replicate
Hosting Members : server2
Non-Default Attributes Shared By Hosting Members
Type | Name | Value
------ | ---- | -----
Region | size | 4
gfsh>stop server --name=server2
Stopping Cache Server running in /home/username/my_geode/server2 on ubuntu.local[40412] as server2...
Process ID: 4185
Log File: /home/username/my_geode/server2/server2.log
.....
在此步骤中,并行重新启动缓存服务器.由于数据是持久的,因此在服务器重新启动时数据可用.由于数据在多个服务器上存在副本,因此必须并行启动服务器,以便可以在启动之前同步其数据.
gfsh>start server --name=server1 --server-port=40411
Starting a Geode Server in /home/username/my_geode/server1...
............................................................................
............................................................................
此时如果在server1.log日志文件中查找重新启动服务器的相关信息,将看到类似于以下内容的日志消息:
[info 2015/01/14 09:08:13.610 PST server1 tid=0x1] Region /regionA has pot
entially stale data. It is waiting for another member to recover the latest data.
My persistent id:
DiskStore ID: 8e2d99a9-4725-47e6-800d-28a26e1d59b1
Name: server1
Location: /192.0.2.0:/home/username/my_geode/server1/.
Members with potentially new data:
[
DiskStore ID: 2e91b003-8954-43f9-8ba9-3c5b0cdd4dfa
Name: server2
Location: /192.0.2.0:/home/username/my_geode/server2/.
]
Use the "gfsh show missing-disk-stores" command to see all disk stores that
are being waited on by other members.
my_geode
),启动gfsh:[username@localhost ~/my_geode]$ gfsh
_________________________ __
/ _____/ ______/ ______/ /____/ /
/ / __/ /___ /_____ / _____ /
/ /__/ / ____/ _____/ / / / /
/______/_/ /______/_/ /_/ 1.5
Monitor and Manage Geode
gfsh>connect --locator=localhost[10334]
Connecting to Locator at [host=localhost, port=10334] ..
Connecting to Manager at [host=ubuntu.local, port=1099] ..
Successfully connected to: [host=ubuntu.local, port=1099]
注意,特别是在
/etc/hosts
里的hostname跟/etc/sysconfig/network
里的不一致时必需使用jmx-manager参数,而且格式最好是’IP地址[端口号]’例如
connect --jmx-manager=${locator_ip_address}
gfsh>start server --name=server2 --server-port=40412
当server2启动时,注意server1在第一个gfsh窗口中完成启动:
Server in /home/username/my_geode/server1 on ubuntu.local[40411] as server1 is currently online.
Process ID: 3402
Uptime: 1 minute 46 seconds
Geode Version: 1.5
Java Version: 1.8.0_121
Log File: /home/username/my_geode/server1/server1.log
JVM Arguments: -Dgemfire.default.locators=192.0.2.0[10334] -Dgemfire.use-cluster-configuration=true
-XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true
-Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /home/username/Apache_Geode_Linux/lib/geode-core-1.0.0.jar:
/home/username/Apache_Geode_Linux/lib/geode-dependencies.jar
gfsh>list members
Name | Id
------------ | ---------------------------------------
Coordinator: | ubuntu(locator1:2813:locator):46644
locator1 | ubuntu(locator1:2813:locator):46644
server2 | ubuntu(server2:3992):21507
server1 | ubuntu(server1:3402):36532
put
命令添加的所有数据是否可用:gfsh>query --query="select * from /regionA"
Result : true
startCount : 0
endCount : 20
Rows : 5
Result
------
one
two
four
Three
NEXT_STEP_NAME : END
gfsh>stop server --dir=server2
Stopping Cache Server running in /home/username/my_geode/server2 on 192.0.2.0[40412] as server2...
Process ID: 3992
Log File: /home/username/my_geode/server2/server2.log
....
gfsh>query --query="select * from /regionA"
Result : true
startCount : 0
endCount : 20
Rows : 5
Result
------
one
two
four
Three
NEXT_STEP_NAME : END
关闭集群有以下步骤:
gfsh>shutdown --include-locators=true
参见 shutdown.
As a lot of data in memory will be lost, including possibly events in queues,
do you really want to shutdown the entire distributed system? (Y/n): Y
Shutdown is triggered
gfsh>
No longer connected to ubuntu.local[1099].
gfsh>
exit
推出gfsh shell.窗口启动(服务进程随窗口关闭):
start locator --name=locator203 --locators=172.16.234.202[10334],172.16.234.203[10334] --J=-Xmx8g --J=-Xms8g --J=-Xmn2g
后台启动(服务永久存活):
gfsh start locator --name=locator203 --locators=172.16.234.202[10334],172.16.234.203[10334] --J=-Xmx8g --J=-Xms8g --J=-Xmn2g 2>&1 &
窗口启动(服务进程随窗口关闭):
start server--name=server203 --dir=/opt/geode-1.14.0/bin/server203 --properties-file=/opt/geode-1.14.0/config/gemfire.properties --locators=172.16.234.202[10334],172.16.234.203[10334] --J=-Xmx8g --J=-Xms8g--J=-Xmn2g
后台启动(服务永久存活):
gfsh start server --name=server203 --dir=/opt/geode-1.14.0/bin/server203 --properties-file=/opt/geode-1.14.0/config/gemfire.properties --locators=172.16.234.202[10334],172.16.234.203[10334] --J=-Xmx8g --J=-Xms8g --J=-Xmn2g 2>&1 &
复制区域:
非持久:REPLICATE
持久化:REPLICATE_PERSISTENT
分区区域:
非持久:PARTITION
持久化:PARTITION_PERSISTENT
必要属性(gemfire.properties):
#开启度量抓取
statistic-sampling-enabled=true
#抓取频率,单位为毫秒
statistic-sample-rate=1000
#文件存储路径
statistic-archive-file=statics.gfs
#单个文件大小,单位为M
archive-file-size-limit=100
#全体文件大小,单位为M
archive-disk-space-limit=1000
启动命令指定:
--dir=/opt/geode-1.14.0/bin/server203 --properties-file=/opt/geode-1.14.0/config/gemfire.properties
编写脚本:startLocator.sh,./startServer.sh
编写过程,指定启动日志:
gfsh start locator --name=locator202 --locators=172.16.234.202[10334],172.16.234.203[10334] --J=-Xmx8g --J=-Xms8g --J=-Xmn2g >startlocator.log 2>&1 &
gfsh start server --name=server202 --dir=/opt/geode-1.14.0/bin/server202 --properties-file=/opt/geode-1.14.0/config/gemfire.properties --locators=172.16.234.202[10334],172.16.234.203[10334] --J=-Xmx8g --J=-Xms8g --J=-Xmn2g >startServer.log 2>&1 &
赋予权限:
chmod +x startServer.sh
chmod +x startLocator.sh
调用执行:
./startLocator.sh
./startServer.sh
English | 含义 |
---|---|
JVM | Java虚拟机,Java Virtual Machine |
JDK | Java Development Kit |
IMDG | In-Memory Data Grid, 内存数据网格 |
GC | Garbage Collector/Garbage Collect, JVM中的垃圾回收, 或JVM中的垃圾回收器 |
Locator | 集群中的管理节点, 注册客户端和服务器成员,使双方能够互相发现,同时可以提供一定的负载均衡功能 |
server, server cache,cache server | 集群中的数据节点,GemFire分布式系统的服务器节点 |
Node | 均为GemFire集群的节点, 一般指的是 CacheServer |
Member | 均为GemFire集群的节点, 指的是 Locator 和 CacheServer |
Client Cache | 接入到GemFire分布式系统的客户端,负责管理本地缓存的生命周期 |
Region, data region | Region是一个分布式系统之上的抽象概念。一个Region允许你在系统的多个VM中存储数据,不用考虑数据存在那个节点上。Region提供了一个map接口能透明地从合适的VM上获取数据。这个Region类扩展了java.util.Map接口,但是它也支持查询和事务 |
Replicated Region | 一个Replicated Region保存着所有分区的数据拷贝 |
Partitioned Region | Partitioned Regions只保存一部分分区的数据拷贝 |
GFSH,gfsh | GemFire SHell,用于管理和监控GemFire的命令控制台 |
Redundant | 副本,在GemFire中,Partitioned Region的副本数量范围为0-3个 |
Primary | 主数据 |
Secondary | 从数据 |
Network Partitions | 网络分区,或网络脑裂,指的是一个网络因为网络硬件问题或者其他原因分裂编程两个小的网络 |
Overflow | 数据溢出, 指的是把内存持久化到磁盘的操作 |
Eviction | 数据逐出,指的是按照LRU算法, 把超出预设数据量,内存堆使用空间之外的数据,持久化到磁盘或者删除的操作 |
Expiration | 数据过期或者Region过期,指的是按照预设的TTL(Time-To-Live)时间或者Idle Timeout时间,进行数据删除或者失效的操作 |
Peer-to-Peer | 对等式, 指的是各个节点在集群内对等, 没有Locator节点 |
Client-to-Serve, Client/Server | C/S式,指的是通过客户端连接到服务器端集群中, 一般服务器端集群中部署Locator节点 |
Multi-Site (WAN) | 也叫WAN-Gateway,指的是多个集群隔离部署, 但是互相之间可以异步同步消息及数据变化。一般用于多活数据中心场景。 |
Write-Behind | 指的是通过异步队列的方式,以高速批处理的方式, 在Geode/GemFire和其他数据存储之间进行数据更新信息的同步 |
AsyncEventListener | 异步事件监听器, 用于处理异步事件队列 |
Delta Propagation | 变化传播 |
OQL, Object-Query-Language | 对象查询语言, Geode支持的一种对象关联查询语言, 只支持Select,不支持insert/update/delete |
Continuous Querying, CQ | 持续查询, 指的是可以注册兴趣(register interests)的方式, 对指定的 region 进行持续的关注, 可以不断获得指定 region 数据变化情况的功能 |
Entry, Entries, data entry | 每一个Key/Value对,简称为Entry |
Function | Geode中,类似于Map-reduce方式并行运行的计算功能,允许用户自定义 |
PDX, PortableDataExchange | Geode自定义的高效,且可变结构的序列化方式 |
Geode Pulse | Geode的监控页面, 基于HTML5, 建议使用Chrome或者FireFox浏览 |
cluster configuration service | 集群配置服务, 运行在 Locator 之上, 用于管理集群中各节点配置情况的服务 |
使用gfsh
, show missing-disk-stores
命令列出了其他成员正在等待的所有带有最新数据的磁盘存储。
例子:
### Missing Disk Stores
Disk Store ID | Host | Directory
------------------------------------ | -------------- | -------------------------
9eb7bf36-330b-4c08-995d-a66f745f0fd6 | /192.168.68.21 | /opt/geode_work/server4/.
4a83ec7f-d80c-460e-a315-01948bd4e396 | /192.168.68.20 | /opt/geode_work/server3/.
9eb7bf36-330b-4c08-995d-a66f745f0fd6 | /192.168.68.21 | /opt/geode_work/server4/.
9eb7bf36-330b-4c08-995d-a66f745f0fd6 | /192.168.68.21 | /opt/geode_work/server4/.
No missing colocated region found
💊注意: 您需要连接到 gfsh 中的
Locator
才能运行此命令。
本节适用于满足以下两个条件的磁盘存储:
当您无法使最新的持久副本联机时,请使用 revoke
命令告诉其他成员停止等待它。 一旦存储被撤销,系统就会找到剩余的最新数据副本并使用它。
💊注意: 一旦撤销,磁盘存储就不能重新引入系统。
在gfsh中使用 show missing-disk-stores
正确识别您需要撤销的磁盘存储。 revoke
命令将磁盘存储 ID 作为输入,如该命令列出的那样。
例子:
gfsh>revoke missing-disk-store --id=60399215-532b-406f-b81f-9b5bd8d1b55a
Missing disk store successfully revoked