定制你的Neo4j生产集群部署
Posted 品鉴初心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定制你的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 集群。
获取默认模板
参考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";
上面的需求点我们已经了解,下面我们来定制开发我们的模板吧。在开发模板前,我们有必要了解下AWS CloudFormation。
指定可用区
在模板中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
使用阿里云云盘blog-test.json
以上是关于定制你的Neo4j生产集群部署的主要内容,如果未能解决你的问题,请参考以下文章