定制你的Neo4j生产集群部署

满堂花醉三千客,一剑霜寒十四洲。这篇文章主要讲述定制你的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" ,如下:
定制你的Neo4j生产集群部署

文章图片

直接使用红框中链接即可下载默认模板。
定制模板在设计我们的模板前,我们先理清需求,根据具体业务需求,添加或更改默认模板中相关模块。需求如下:
  • (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还在被其他资源使用中,无法删除的。如下:
定制你的Neo4j生产集群部署

文章图片

指定子网在模板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

    推荐阅读