ShardingSphere Proxy 集群作为数据基础设施重要的一部分,集群自身的高可用性尤为重要,本部分内容将介绍使用 CloudFormation 在 Amazon 上从零搭建一套满足高可用的 ShardingSphere Proxy 集群。
我们将创建如下架构图的 ShardingSphere Proxy 高可用集群:
创建的 Amazon 资源如下:
为创建 ShardingSphere Proxy 高可用集群,您需要事先准备如下资源:
点击 Choose File
按钮 上传准备好的 CloudFormation 配置。
上传好后点击 Next
按钮。
填入相应参数后,点击 Next
按钮。
stack
相关参数。配置好后点击 Next
按钮。
Review
。确认好点击 Submit
按钮。
Outputs
标签页,如下图。其中 ssinernaldomain
对应的值就是我们需要的域名。
默认创建的内部域名为 proxy.shardingsphere.org,端口为 3307,用户名和密码为 root。
名称 | 描述 | 类型 | 默认值 |
---|---|---|---|
HostedZoneId | 内网 HostedZone Id | String | |
HostedZoneName | 内网 HostedZone 名称 | String | shardingsphere.org |
ImageId | AMI Id, 需是Amazon Linux 2 类型或者包管理是 yum 的 Linux 系列 | String | |
KeyName | SSH 密钥对 | String | |
VpcId | VPC Id | String | |
Subnets | VPC 中的子网列表,顺序需要和按可用区字母排序的顺序一致 | CommaDelimitedList | |
SecurityGroupIds | 安全组列表,需要放行 ZooKeeper Server 的 2181,2888,3888 端口 | CommaDelimitedList | |
ShardingSphereInstanceType | ShardingSphere Proxy Server 的 EC2 实例类型 | String | |
ShardingSphereJavaMemOpts | ShardingSphere Proxy Server 的 jvm 内存参数 | String | -Xmx512m -Xms512m -Xmn128m |
ShardingSpherePort | ShardingSphere Proxy 的端口 | String | 3307 |
ShardingSphereVersion | ShardingSphere Proxy 的版本 | String | 5.2.1 |
ZookeeperHeap | Zookeeper Server 的 jvm Heap 大小,单位为 m | String | 512 |
ZookeeperInstanceType | Zookeeper Server 的 EC2 实例类型 | String | t2.nano |
ZookeeperVersion | Zookeeper Server 版本号 | String | 3.7.1 |
名称 | 描述 | 导出名称 | 值 |
---|---|---|---|
ZK1 | Zookeeper Server1 信息 | {‘Fn::Sub’: ‘${AWS::StackName}-Zookeeper-Server-1’} | {‘Fn::Join’: [':', [{‘Ref’: ‘ZK1’}, {‘Fn::GetAtt’: [‘ZK1’, ‘PrivateIp’]}, {‘Fn::GetAtt’: [‘ZK1’, ‘AvailabilityZone’]}]]} |
ZK2 | Zookeeper Server2 信息 | {‘Fn::Sub’: ‘${AWS::StackName}-Zookeeper-Server-2’} | {‘Fn::Join’: [':', [{‘Ref’: ‘ZK2’}, {‘Fn::GetAtt’: [‘ZK2‘, ‘PrivateIp’]}, {‘Fn::GetAtt’: [‘ZK2’, ‘AvailabilityZone’]}]]} |
ZK3 | Zookeeper Server3 信息 | {‘Fn::Sub’: ‘${AWS::StackName}-Zookeeper-Server-3’} | {‘Fn::Join’: [':’, [{‘Ref’: ‘ZK2’}, {‘Fn::GetAtt’: [‘ZK2’, ‘PrivateIp’]}, {‘Fn::GetAtt’: [‘ZK2’, ‘AvailabilityZone’]}]]} |
zoneZK1 | Zookeeper Server1 内部域名 | {‘Fn::Sub’: ‘${AWS::StackName}-Zookeeper-Domain-1’} | {‘Ref’: ‘zoneZK1’} |
zoneZK2 | Zookeeper Server2 内部域名 | {‘Fn::Sub’: ‘${AWS::StackName}-Zookeeper-Domain-2’} | {‘Ref’: ‘zoneZK2’} |
zoneZK3 | Zookeeper Server3 内部域名 | {‘Fn::Sub’: ‘${AWS::StackName}-Zookeeper-Domain-3’} | {‘Ref’: ‘zoneZK3’} |
ssinternaldomain | ShardingSphere Proxy 对外使用的内部域名 | {‘Fn::Sub’: ‘${AWS::StackName}-ShardingSphere-Internal-Domain’} | {‘Ref’: ‘ssinternaldomain’} |
默认使用我们提供的 CloudFormation 创建的 ZooKeeper 和 ShardingSphere Proxy 服务可以使用 Systemd 管理。
systemctl start zookeeper
systemctl stop zookeeper
systemctl restart zookeeper
systemctl start shardingsphere
systemctl stop shardingsphere
systemctl restart shardingsphere
此 CloudFormation 涉及以下资源列表。
资源名称 | 类型 |
---|---|
ZK1 | AWS::EC2::Instance |
ZK2 | AWS::EC2::Instance |
ZK3 | AWS::EC2::Instance |
zoneZK1 | AWS::Route53::RecordSet |
zoneZK2 | AWS::Route53::RecordSet |
zoneZK3 | AWS::Route53::RecordSet |
networkiface0 | AWS::EC2::NetworkInterface |
networkiface1 | AWS::EC2::NetworkInterface |
networkiface2 | AWS::EC2::NetworkInterface |
launchtemplate0 | AWS::EC2::LaunchTemplate |
launchtemplate1 | AWS::EC2::LaunchTemplate |
launchtemplate2 | AWS::EC2::LaunchTemplate |
ssinternallb | AWS::ElasticLoadBalancingV2::LoadBalancer |
sslbtg | AWS::ElasticLoadBalancingV2::TargetGroup |
autoscaling0 | AWS::AutoScaling::AutoScalingGroup |
autoscaling1 | AWS::AutoScaling::AutoScalingGroup |
autoscaling2 | AWS::AutoScaling::AutoScalingGroup |
sslblistener | AWS::ElasticLoadBalancingV2::Listener |
ssinternaldomain | AWS::Route53::RecordSet |
我们使用 cfndsl 生成 CloudFormation 配置。
您需要按照 cfndsl 提供的步骤去安装。
cfndsl
,只需运行一次。cfndsl -u 94.0.0
cf.rb
配置后,运行下面命令生成 CloudFormation 配置。 cfndsl cf.rb -o cf.json --pretty