Getting Started with Apache Geode

#Apache Geode


1、简介
Apache Geode是一个数据管理平台,它可以在广泛分布的云架构中提供对数据密集型应用程序的实时、一致的访问。


2、源码
https://github.com/apache/geode
http://apache.org/dyn/closer.cgi/geode/1.4.0


3、主要特性
Geode 包含以下特性:
高的读写吞吐量
低和可预见的延迟
高可伸缩性
持续可用性
可靠的事件通知
在数据存储上并行应用程序行为
无共享磁盘的持久性
降低拥有成本
单跳客户机/服务器的能力
客户机/服务器安全
多站点数据分布
连续查询
异构数据共享


结合冗余、复制和“非共享”的持久化架构,来实现故障安全可靠性(译者解释:高可用,防止单点故障)和性能。
可水平扩展至成千上万个缓存成员,并结合多个缓存拓扑来满足不同的企业需求。该缓存可以分布在多个计算机中。
异步和同步缓存更新传播(propagation)。
Delta 仅在一个对象(delta)新旧不同版本之间传播,而不是整个对象,从而极大降低了分发成本。
可靠的异步事件通知,优化后的、低延迟的分布层保证了消息传递。
无需额外的硬件,应用程序即可提速 4~40 倍。
数据敏感和实时业务智能。如果在您检索时数据发生更改,您能立即看到数据的变化。
与 Spring 框架集成,以加速并简化可扩展的事务型企业应用程序的开发。
支持 JTA 事务。
整个集群范围的配置,可以持久化,并可导出到其他集群。
通过 HTTP 即可实现对集群远程管理。
为 REST 应用程序开发提供 REST API 支持。
在主版本发布之间滚动升级。


4、参考文档
#官方安装指南
http://geode.apache.org/docs/guide/14/getting_started/15_minute_quickstart_gfsh.html
#多节点集群实验
https://blog.csdn.net/huanghuitan/article/details/71629774
#概述
https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=65146019
#笔记1
https://blog.csdn.net/suncoder/article/details/78506821
#笔记2
https://blog.csdn.net/kmyfoer/article/details/54603120
#java连接geode测试
http://blog.chinaunix.net/uid-11121450-id-5772480.html
#入门示例
http://blog.jobbole.com/87810/


5、安装


1) jdk 1.8以上
下载安装配置环境变量
验证安装
>java -version
统一系统时间戳,分布式环境下的日志、统计和监控
正确配置主机名和host文件,影响gfsh和Pulse功能
关闭SYN cookies 保护,分布式系统会触发这个保护条件
编辑/etc/sysctl.conf文件
net.ipv4.tcp_syncookies = 0
在命令行中执行sysctl -p命令,重载sysctl.conf文件




2) gradle
http://services.gradle.org/distributions/
下载安装,配置环境变量
export PATH=$PATH:/opt/gradle/gradle-4.6/bin
验证安装
>gradle -v
>gradle wrapper
>gradle tasks


3)源码编译安装
http://geode.apache.org/releases/
下载好源代码后解压到目录
进入目录后执行:
$ ./gradlew build -Dskip.tests=true
执行时间比较漫长。
执行完后,加入环境变量:
export PATH=$PATH:~/workdir/software/apache-geode-1.3.0-src/geode-assembly/build/install/apache-geode/bin/
source .bash_profile
验证安装
>gfsh version


4)运行
进入gfsh命令模式
进入gfsh命令前,先选好工作目录,比如在home下建立一个geode_worker的目录,然后cd到这个目录里面执行gfsh,进入gfsh命令行。这样可以让你的geode文件存储在geode_worker工作目录里。当然也可以不这样做!
>gfsh




5)运行locator
name参数可以不传,如果不传,则使用随机名
默认端口10334
gfsh>start locator --name=locator1
Starting a Geode Locator in /Users/sunzuoquan/locator1...
....
Locator in /Users/sunzuoquan/locator1 on 10.106.3.200[10334] as locator1 is currently online.
Process ID: 38535
Uptime: 3 seconds
Geode Version: 1.3.0
Java Version: 1.8.0_121
Log File: /Users/sunzuoquan/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: /Users/sunzuoquan/workdir/software/apache-geode-1.3.0-src/geode-assembly/build/install/apache-geode/lib/geode-core-1.3.0.jar:/Users/sunzuoquan/workdir/software/apache-geode-1.3.0-src/geode-assembly/build/install/apache-geode/lib/geode-dependencies.jar


Successfully connected to: JMX Manager [host=10.106.3.200, port=1099]


Cluster configuration service is up and running.


注意 10.106.3.200[10334]
一个cluster应该有一个locator
connect –locator=localhost[10334]
这个命令可以连接到cluster,确定操作的命令是针对一个cluster的


6)开启 pulse
是个监控工具。
gfsh>start pulse
Launched Geode Pulse


开始我以为这个命令会开启一个服务,没想到直接给我打开了一个浏览器,直接访问了下面地址:


http://localhost:7070/pulse/login.html
默认用户密码:admin/admin


7)开启server
name参数可以不传,如果不传则随机。当有多个server时,启动会与其他server同步数据。如果其他server没有启动,则等待。
默认端口40404
–J=-DDistributionManager.DISCONNECT_WAIT=
这个参数设置给每个阶段的等待时间


还有一个参数很重要:


–groups=group1
表示server所在的组
启动时如果不加端口参数,则默认使用40404


gfsh>start server --name=server1 --server-port=40411
Starting a Geode Server in /Users/sunzuoquan/server1...
....
Server in /Users/xxx/server1 on 10.106.3.200[40411] as server1 is currently online.
Process ID: 38769
Uptime: 3 seconds
Geode Version: 1.3.0
Java Version: 1.8.0_121
Log File: /Users/xxx/server1/server1.log
JVM Arguments: -Dgemfire.default.locators=10.106.3.200[10334] -Dgemfire.start-dev-rest-api=false -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: /Users/xxx/workdir/software/apache-geode-1.3.0-src/geode-assembly/build/install/apache-geode/lib/geode-core-1.3.0.jar:/Users/xxx/workdir/software/apache-geode-1.3.0-src/geode-assembly/build/install/apache-geode/lib/geode-dependencies.jar


现在可以看看pulse监控,有什么变化了吗?
会看到有一个节点,这个节点里面有一个locater和一个server,以及他们的名字


可以开启http配置管理


gfsh>start server --name=server1 --J=-Dgemfire.jmx-manager=true \
--J=-Dgemfire.jmx-manager-start=true --http-service-port=8080 \
--http-service-bind-address=myremotecluster.example.com


8)远程配置


gfsh>connect --use-http=true --url="http://myremotecluster.example.com:8080/geode/v1"
Successfully connected to: Geode Manager's HTTP service @ http://myremotecluster.example.com:8080/geode/v1


开启server,指定cache配置


start server --name=server1 --mcast-port=10338 \
--cache-xml-file=../ServerConfigs/cache.xml --server-port=40404


开启server,使用配置文件


gfsh>start server --name=server1 \
--properties-file=D:\gfeserver\gemfire.properties


开启server的相关参数


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]


locator 参数格式:locators=host1[9001],host2[9003]


10)查看状态
gfsh>status server --name=server1


gfsh>status locator --name=locator1


gfsh>start server --name=server_name --mcast-port=10338 --properties-file=serverConfig/gemfire.properties --security-properties-file=gfsecurity.properties


11)管理数据
创建一个复制持久化的region
创建
这里的region和关系数据库的表一样理解就好了
创建:注意类型REPLICATE_PERSISTENT,很明显复制+持久化。
也就是说region会复制到其他server,且会被持久化


可以指定组参数,如果没有指定则是所有成员有效
–groups=group1 如果指定了则只对特定的组有效


gfsh>create region --name=regionA --type=REPLICATE_PERSISTENT
Member  | Status
------- | --------------------------------------
server1 | Region "/regionA" created on "server1"


查看服务的region
gfsh>list regions
List of regions
---------------
regionA


查看cluster的成员
gfsh>list members
  Name   | Id
-------- | -------------------------------------------------
locator1 | 10.106.3.200(locator1:38535:locator)<ec><v0>:1024
server1  | 10.106.3.200(server1:38769)<v1>:1025


查看具体信息
注意查询region用describe region ,查询locator或server用describe member


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 | data-policy | PERSISTENT_REPLICATE
       | size        | 0
       | scope       | distributed-ack


gfsh>describe member --name=locator1
Name        : locator1
Id          : 10.106.3.200(locator1:38535:locator)<ec><v0>:1024
Host        : 10.106.3.200
Regions     :
PID         : 38535
Groups      :
Used Heap   : 286M
Max Heap    : 3641M
Working Dir : /Users/xx/locator1
Log file    : /Users/xx/locator1/locator1.log
Locators    : 10.106.3.200[10334]




gfsh>describe member --name=server1
Name        : server1
Id          : 10.106.3.200(server1:38769)<v1>:1025
Host        : 10.106.3.200
Regions     : regionA
PID         : 38769
Groups      :
Used Heap   : 52M
Max Heap    : 3641M
Working Dir : /Users/xx/server1
Log file    : /Users/xx/server1/server1.log
Locators    : 10.106.3.200[10334]


Cache Server Information
Server Bind              : null
Server Port              : 40411
Running                  : true
Client Connections       : 0


使用gfsh管理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   : <NULL>


查询数据
gfsh>query --query="select * from /regionA"
Result : true
Limit  : 100
Rows   : 2


Result
------
two
one




12)停止server
再启动查看数据,看看数据是否还存在?


gfsh>stop server --name=server1
Stopping Cache Server running in /Users/sunzuoquan/server1 on 10.106.3.200[40411] as server1...
Process ID: 38769
Log File: /Users/sunzuoquan/server1/server1.log
...
gfsh>


gfsh>stop server –dir=server2 这个命令也可以停止服务


stop命令也可以停止locator,参数基本和停止server一致


13)停止集群
gfsh>shutdown –include-locators=true


–include-locators 参数可以停止localtor,如果没有这个参数,则只停止数据节点


–time-out=60 停止的超时时间,避免长时间等待


14)java 连接
<dependency>
     <groupId>org.apache.geode</groupId>
     <artifactId>geode-core</artifactId>
     <version>1.4.0</version>
   </dependency>
 <dependency>
     <groupId>it.unimi.dsi</groupId>
     <artifactId>fastutil</artifactId>
     <version>8.1.1</version>
 </dependency>


public static void main(String[] args) throws Exception {
    ClientCache cache = new ClientCacheFactory()
      .addPoolLocator("localhost", 10334)
      .create();
    Region<String, String> region = cache
      .<String, String>createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY)
      .create("regionA");


    region.put("3", "Hello1");
    region.put("4", "World1");
    for (Map.Entry<String, String>  entry : region.entrySet()) {
      System.out.format("key = %s, value = %s\n", entry.getKey(), entry.getValue());
    }
    cache.close();
}


15)集群
https://blog.csdn.net/huanghuitan/article/details/71629774
添加locator server


16)相关术语
数据区域:类似于关系数据库中的表,并以分布式方式管理数据作为名称/值对。
复制区域:在分布式系统的每个缓存成员上存储相同的数据副本。
分区区域:在缓存成员之间传播数据
定位器:提供了发现和负载平衡服务,维护成员服务器的动态列表。默认情况下,Geode客户端和服务器使用端口40404来发现彼此。


17)相关部分命令
quit
start locator
start server --name=server1 --server-port=40404
create region --name=regionA --type=REPLICATE_PERSISTENT
deploy --groups=group1 --jars=/lib/mx4j-3.0.1.jar
deploy --dir=libs/group1-libs
undeploy --jars=group1_functions.jar
undeploy --groups=MemberGroup1
list deployed --groups=MemberGroup1
status server --name=server1
status locator --name=locator1
list regions
list members
describe region --name=regionA
describe member --name=server1
put --region=regionA --key="1" --value="one"
query --query="select * from /regionA"
stop server –dir=server2
shutdown –include-locators=true
export cluster-configuration --zip-file-name=/Users/username/myClConfig.zip
quit
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值