簡述
公司準備使用geode,所以研究一下。
geode由gemfire開源而來的分佈式緩存管理平臺。
安裝
先決條件
- jdk 1.8以上
- 統一系統時間戳,分佈式環境下的日誌、統計和監控
- 正確配置主機名和host文件,影響gfsh和Pulse功能
- 關閉SYN cookies 保護,分佈式系統會觸發這個保護條件
編輯/etc/sysctl.conf文件
net.ipv4.tcp_syncookies = 0
在命令行中執行sysctl -p命令,重載sysctl.conf文件
安裝
確認jdk安裝好後,我使用的是源代碼安裝
下載1.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
輸出結果:
$ gfsh version
1.3.0
運行
進入gfsh命令模式
進入gfsh命令前,先選好工作目錄,比如在home下建立一個geode_worker的目錄,然後cd到這個目錄裏面執行gfsh,進入gfsh命令行。這樣可以讓你的geode文件存儲在geode_worker工作目錄裏。當然也可以不這樣做!
gfsh
so easy!
運行locator
name參數可以不傳,如果不傳,則使用隨機名
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.
gfsh>
注意 10.106.3.200[10334]
一個cluster應該有一個locator
connect –locator=localhost[10334]
這個命令可以連接到cluster,確定操作的命令是針對一個cluster的
開啓 pulse
是個監控工具。
gfsh>start pulse
Launched Geode Pulse
開始我以爲這個命令會開啓一個服務,沒想到直接給我打開了一個瀏覽器,直接訪問了下面地址:
http://localhost:7070/pulse/login.html
默認用戶密碼:admin/admin
開啓server
name參數可以不傳,如果不傳則隨機。當有多個server時,啓動會與其他server同步數據。如果其他server沒有啓動,則等待。
–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
遠程配置
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]
查看狀態
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
管理數據
創建一個複製持久化的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
停止
停止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一致
停止集羣
gfsh>shutdown –include-locators=true
–include-locators 參數可以停止localtor,如果沒有這個參數,則只停止數據節點
–time-out=60 停止的超時時間,避免長時間等待