满堂花醉三千客,一剑霜寒十四洲。这篇文章主要讲述定制你的Neo4j生产集群部署相关的知识,希望能为你提供帮助。
说明上一次我们简单介绍到有关Neo4j
集群通过CloudFormation
的部署,有兴趣的同学可详见Neo4j Enterprise生产集群部署。
但是上面方式的部署也暴露出以下几个主要问题:
- (1)网段使用的是“10.0.0.0/16”,这个网段不一定符合我们网络同学规划的网段;
- (2)各节点分布在大的VPC(即10.0.0.0/16)网段下的子网段,如:10.0.1.0/24、10.0.2.0/24、10.0.3.0/24,当然这样做完全符合高可用的要求的,但对于网段数量比较拮据时,我们期望是neo4j各节点在同一子网段,如:10.0.0.1/24、10.0.0.2/24、10.0.0.3/24;
- (3)各节点分布在不同的可用区,如eu-west-1a、eu-west-1b、eu-west-1c,当然这样做完全符合高可用的要求的,我们如想各节点分布在同一可用区,如eu-west-1a;
获取默认模板参考Neo4j Enterprise生产集群部署文章中创建堆栈,获取" Amazon S3 URL" ,如下:
文章图片
直接使用红框中链接即可下载默认模板。
定制模板在设计我们的模板前,我们先理清需求,根据具体业务需求,添加或更改默认模板中相关模块。需求如下:
- (1)大VPC网段使用" 10.180.32.0/19" ,子网段使用" 10.180.32.0/24" ;
- (2)各节点分布在子网段" 10.180.32.0/24" 下即使用同一网段;
- (3)各节点分布在同一可用区下,如" ap-southeast-1a" ;
指定可用区在模板中Parameters下添加如下:
"AvailabilityQu": {
"Type": "String",
"Description": "Availability Zone into which instance will launch",
"Default": "ap-southeast-1a"
},
上面我们定义了一个" 可用区" 的参数,类型是字符串,默认值是" ap-southeast-1a" 。下面我们在模板中引用该参数。
指定VPC网段在模板Resources下更新如下内容:
"VPC": {
"Type": "AWS::EC2::VPC",
"Properties": {
"EnableDnsSupport": "true",
"EnableDnsHostnames": "true",
"InstanceTenancy": "default",
"CidrBlock": "10.180.32.0/19",
"Tags": [
{
"Key": "Name",
"Value": {
"Fn::Join": [
"-",
[
"Neo4jVPC",
{
"Ref": "AWS::StackName"
}
]
]
}
},
{
"Key": "Application",
"Value": {
"Ref": "AWS::StackId"
}
}
]
}
},
上面定义" CidrBlock" : " 10.180.32.0/19" ,即告诉模板新创建VPC网段" 10.180.32.0/19" 。
这里提一下,最好不要使用已存在VPC网段,因为一旦" AWS CloudFormation" 部署出错或成功后删除堆栈,将无法正常删除VPC部分,因当前VPC还在被其他资源使用中,无法删除的。如下:
文章图片
指定子网在模板Resources下更新如下内容:
"Subnet0": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": {
"Ref": "AvailabilityQu"
},
"VpcId": {
"Ref": "VPC"
},
"CidrBlock": "10.180.32.1/24",
"Tags": [
{
"Key": "Name",
"Value": {
"Fn::Join": [
"-",
[
"Neo4jSubnet0",
{
"Ref": "AWS::StackName"
}
]
]
}
},
{
"Key": "Application",
"Value": {
"Ref": "AWS::StackId"
}
}
],
"MapPublicIpOnLaunch": "true"
}
},
上面的内容较多,我们重点看下如下:
"AvailabilityZone": {
"Ref": "AvailabilityQu"
},
使用 Ref 内部函数来引用某个参数,AWS CloudFormation 使用该参数的值来预置堆栈。" Subnet0" 下" CidrBlock" : " 10.180.32.1/24" ,即是我们定义的子网段。
各节点分布同一子网段删除默认模板中" subnet1" 和" subnet2" 子网段的定义,并将节点、路由及网关等信息变量均修改为" subnet0" ,举例如下:
"SubnetRouteTableAssociation0": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"SubnetId": {
"Ref": "Subnet0"
},
"RouteTableId": {
"Ref": "RouteTable"
}
}
},
"SubnetNetworkAclAssociation0": {
"Type": "AWS::EC2::SubnetNetworkAclAssociation",
"Properties": {
"SubnetId": {
"Ref": "Subnet0"
},
"NetworkAclId": {
"Ref": "NetworkAcl"
}
}
},
这里涉及到的修改内容较多,文章后面我会共享一份我已修改的temptele,方便大家理解和参考。
分享Temptele【定制你的Neo4j生产集群部署】使用阿里云云盘blog-test.json
推荐阅读
- 详解工作流框架Activiti的服务架构和组件
- Redis分布式锁解锁案例讲解
- 腾讯云联网环境下搭建kubernetes集群
- dart系列之:数学什么的就是小意思,看我dart如何玩转它
- k8s.1.22.4 部署metricserver
- Spring认证中国教育管理中心-Spring Data Redis框架教程六
- 6000字加图文 | 抓包带你深入了解网关到底起什么样的作用(不同网段通信的过程详解)
- Unity实战篇 | 接入 声网SDK 实现 视频通话——自己动手做一个 视频通话
- jmeter 压测之发送 java 请求