apache geode 多机集群
思路:
- Configuring Peer-to-Peer Discovery (配置对等发现)
- 每台机器创建单独的locator(定位器)
- 配置网关发件人
- Create Data Regions for Multi-site Communication(创建多站点通信的数据区域)
- 配置网关接收器
- 以正确的顺序启动分布式系统成员进程(首先是定位器,然后是数据节点),以确保高效地发现WAN资源
- (可选)部署自定义冲突解决程序以处理解决在通过WAN应用事件时检测到的潜在冲突。请参阅解决冲突事件
- (可选)部署WAN过滤器以确定通过WAN分发的事件,或者在WAN上分发事件时修改事件。请参阅过滤多站点(WAN)分发的事件
- (可选)使用配置多站点(WAN)事件队列中的说明配置网关发送方队列的持久性,绑定和/或分派器线程
实施(采用 docker实施 两容器模拟多机)
- docker 获取 apachegeode/geode
sudo docker pull apachegeode/geode
- 开启 apachegeode/geode 容器 geode-1
sudo docker run -itd --name geode-1 apachegeode/geode
- 开启 apachegeode/geode 容器 geode-2
sudo docker run -itd --name geode-2 apachegeode/geode
sudo docker exec -it geode-1 bash
sudo docker exec -it geode-2 bash
查看ip地址
cat /etc/hosts
发现ip地址分别为:
172.17.0.4
172.17.0.3
创建定位器 172.17.0.4
distributed-system-id 其它机器发现的系统标识
remote-locators 设置的是发现其它机器的服务器地址和端口号(重要)
命令:
start locator --name="locator4" \
--enable-cluster-configuration=true \
--bind-address=172.17.0.4 \
--hostname-for-clients=172.17.0.4 \
--J="-Dgemfire.distributed-system-id=4" \
--J="-Dgemfire.remote-locators=172.17.0.3[10334]" \
--mcast-address="224.0.0.1"
创建定位器 172.17.0.3
distributed-system-id 其它机器发现的系统标识
remote-locators 设置的是发现其它机器的服务器地址和端口号(重要)
命令:
start locator --name="locator4" \
--enable-cluster-configuration=true \
--bind-address=172.17.0.3 \
--hostname-for-clients=172.17.0.3 \
--J="-Dgemfire.distributed-system-id=3" \
--J="-Dgemfire.remote-locators=172.17.0.4[10334]" \
--mcast-address="224.0.0.1"
创建网关发送器 172.17.0.4
create gateway-sender --id="sender3" --remote-distributed-system-id=3 --order-policy="PARTITION"
创建网关发送器 172.17.0.3
create gateway-sender --id="sender3" --remote-distributed-system-id=4 --order-policy="PARTITION"
创建网关接收器 172.17.0.4 绑定地址 接收器的端口号
create gateway-receiver --bind-address=172.17.0.4 --start-port=1530 --end-port=1551
创建网关接收器 172.17.0.3 绑定地址 接收器的端口号
create gateway-receiver --bind-address=172.17.0.3 --start-port=1530 --end-port=1551
创建节点服务server 172.17.0.4
start server --name="server4" --locators=172.17.0.4:172.17.0.4[10334] --bind-address=172.17.0.4
创建节点服务server 172.17.0.3
start server --name="server3" --locators=172.17.0.3:172.17.0.3[10334] --bind-address=172.17.0.3
查看网关接收器以及发送器
list gateways
Gateways
GatewaySender
GatewaySender Id | Member | Remote Cluster Id | Type | Status | Queued Events | Receiver Location
---------------- | --------------------------------- | ----------------- | -------- | ----------- | ------------- | -----------------
sender3 | 172.17.0.4(server4:2454)<v1>:1025 | 3 | Serial | Running | 0 | 172.17.0.3:1534
GatewayReceiver
Member | Port | Sender Count | Sender's Connected
--------------------------------- | ---- | ------------ | -------------------------------------
172.17.0.4(server4:2454)<v1>:1025 | 1535 | 3 | ["172.17.0.3(server3:1813)<v1>:1025"]
创建分区 172.17.0.3,172.17.0.4 两台机器区域name名字必须一样 且开启网关发送 (复制区域的不支持)
alter region --name="clusterTest" --type=PARTITION_PERSISTENT --gateway-sender-id="sender3"
查看分区
list regions
分区存入数据
put --key="4" --value="4" --region=/clusterTest
分区查询数据
query --query="select * from /clusterTest"
Result : true
startCount : 0
endCount : 20
Rows : 4
Result
------
4
NEXT_STEP_NAME : END
最终结果验证
- 在172.17.0.3机器上clusterTest区域上插入数据之后,172.17.0.4机器也会同步数据,同理172.17.0.4机器
- 如果上面结果成立则表示成功了,反之失败。
总结:
- 上述的定位器的创建必须指定 remote-locators 以便于发现其它机器
- 网路发送器gate-sender 的id 在集群中是相同的,distributed-system-id 需要指定
- 集群中的某台机器区域如果要同步到其它机器区域,其它机器必须的区域名必须一致并且启动网关发送(复制区域目前不支持)