Deploying a Pulsar cluster on AWS using Terraform and Ansible
有关手动部署单个 Pulsar 集群而不是使用 Terraform 和 Ansible 的说明,请参阅Deploying a Pulsar cluster on bare metal。 有关手动部署多集群 Pulsar 实例的说明,请参阅Deploying a Pulsar instance on bare metal.。
在 Amazon Web Services 上运行 Pulsar 集群的最简单方法之一是使用 Terraform基础设施配置工具和 Ansible 服务器自动化工具。 Terraform 可以创建运行 Pulsar 集群所需的资源——EC2实例、网络和安全基础设施等。而 Ansible 可以在提供的资源上安装和运行 Pulsar。
安装要求
为了使用 Terraform and Ansible 安装一个 Pulsar 集群,您需要准备下列事情:
- AWS 账户 和 AWS 命令行工具
- Python 和 pip
- terraform-inventory 工具,它使得能够使用 Terraform 发行版镜像
您还需要确保您目前通过 AWS
命令行工具登录到您的 AWS 帐户:
$ aws configure
安装
您可以使用pip在Linux或者macOS上安装Ansible
$ pip install ansible
您可以使用 [这里](https://www. terraform. io/intro/getting-started/install. html) 的说明来安装 Terraform.
您还需要本地设备上的 Terraform 和Anlibly 配置Pulsar。 您可以在 GitHub 仓库 中找到他们,您可以通过 Git 命令获取:
$ git clone https://github.com/apache/pulsar
$ cd pulsar/deployment/terraform-ansible/aws
SSH 设置
如果您已经有了SSH的key并且准备使用该key,那么您可以跳过生成SSH key这个步骤,并且将
private_key_file
配置在ansible.cfg
文件中,然后将public_key_path
配置在terraform.tfvars
文件中。例如,如果您在
~/中已经有一个私有的 SSH 密钥。 sh/pulsar_aws
和~/.ssh/pulsar_aws.pub
, 按照下面的步骤:
- 使用以下值更新
ansible.cfg
private_key_file=~/.ssh/pulsar_aws
- 使用以下值更新
terraform.tfvars
public_key_path=~/.ssh/pulsar_aws.pub
要使用 Terraform 创建必要的 AWS 资源,您需要先创建 SSH 密钥。 输入以下命令在 ~/.ssh/id_rsa
创建一个私有的 SSH 密钥和一个 ~/.ssh/id_rsa.pub
SSH 公钥:
$ ssh-keygen -t rsa
Do not enter a passphrase (hit Enter instead when the prompt comes out). Enter the following command to verify that a key has been created:
$ ls ~/.ssh
id_rsa id_rsa.pub
使用 Terraform 创建AWS 资源
To start building AWS resources with Terraform, you need to install all Terraform dependencies. Enter the following command:
$ terraform init
# This will create a .terraform folder
此后,您可以通过输入此命令来应用默认的 Terraform 配置:
$ terraform apply
接下来你可以看到这个提示:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
Type yes
and hit Enter. 应用配置可能需要几分钟。 当配置完成后,您可以看到 Apply complete!
以及其他信息,包括创建的资源数量。
应用非默认配置
You can apply a non-default Terraform configuration by changing the values in the terraform.tfvars
file. The following variables are available:
变量名称 | 说明 | 默认值 |
---|---|---|
公共密钥路径 | 您生成的公钥的路径。 | ~/.ssh/id_rsa.pub |
地区 | Pulsar集群所在的AWS区域 | us-west-2 |
可用性和可用性区域 | Pulsar集群所在的AWS区域 | us-west-2a |
aws_ami | 集群使用的 Amazon 机器图像 (AME) | ami-9fa343e7 |
num_zookeeper_nodes | ZooKeeper 集群中的 ZooKeeper 节点数 | 3 |
下注节点数 | 集群中的 bookie 数量 | 3 |
num代理节点 | 集群中的 broker 数量 | 2 |
num代理节点 | 集群中的 proxy 数量 | 1 |
base_cidr_block | 网络资源用于集群的root CIDR | 10.0.0.0/16 |
实例类型 | 要使用的 EC2 实例类型。 此变量是两个键的映射: zookeeper 适用于ZooKeeper 实例, bookie 适用于 BookKeeper bookie, broker 和 proxy 适用于 Pulsar broker 和 bookie | t2.small (ZooKeeper), i3.xlarge (BookKeeper) and c5.2xlarge (Brokers/Proxies) |
安装的内容
当您运行Ansible 操作手册时,使用了以下AWS资源:
- 9 total Elastic Compute Cloud (EC2) instances running the ami-9fa343e7 Amazon Machine Image (AMI), which runs Red Hat Enterprise Linux (RHEL) 7.4. By default, that includes:
- 3 small VMs for ZooKeeper (t2.small instances)
- 3个更大的虚拟机供簿记员<a href=“reference ternology.md#bookie”>簿记员使用(<a href=”https://www.ec2instances.info/?selected=i3.xlarge“>i3.xlarge实例)
- 为Pulsar经纪人提供2台更大的虚拟机https://www.ec2instances.info/?selected=c5.2xlarge“>c5.2xlarge实例)
- 1台更大的Pulsar虚拟机<a href=“reference terminology.md#proxy”>proxy(<a href=”https://www.ec2instances.info/?selected=c5.2xlarge“>c5.2xlarge实例)
- EC2安全组
- A虚拟私有云(VPC)用于安全 - aAPI网关用于连接外部世界
- A脉冲星群VPC路由表
- A专有网络的子网
集群的所有 EC2 实例都运行在 us-west-2 区域。
获取您的 Pulsar 连接 URL
在你输入 terraform apply
这个命令时将应用Terraform的配置,Terraform命令将输出的pulsar_service_url
的值. 输出结果类似以下︰
pulsar://pulsar-elb-1800761694.us-west-2.elb.amazonaws.com:6650
您可以随时通过输入命令 terraform output pulsar_service_url
或者读取 terraform.tstate
文件 来获取该值(即JSON, 即使文件名没有反映这一点):
$ cat terraform.tfstate | jq .modules[0].outputs.pulsar_service_url.value
销毁您的集群
在任何时候,您都可以使用 Terraform’s destroy
命令来销毁与您的集群所使用的所有AWS 资源:
$ terraform destroy
设置磁盘
在运行 Pulsar之前,您需要将磁盘挂载到这些节点上的正确目录中。 由于不同类型的机器有不同的磁盘配置,您需要更新在 < setup-disk.yaml
设置磁盘中定义的任务,在您的terraform配置中更改 instance_types
要在bookie节点设置磁盘,请输入此命令:
$ ansible-playbook \
--user='ec2-user' \
--inventory=`which terraform-inventory` \
setup-disk.yaml
此后,磁盘被挂载在 /mnt/journal
> 下作为日记磁盘,/mnt/storage
作为记账磁盘。 注意只需要输入一次该命令。 如果您试图在运行 Pulsar 示例后再次输入此命令, 您的磁盘可能再次被擦除,导致Pulsar未能启动。
运行 Pulsar 示例
Once you have created the necessary AWS resources using Terraform, you can install and run Pulsar on the Terraform-created EC2 instances using Ansible.
(可选) 如果您想要使用任何built-in IO connectors, 请编辑下载Pulsar IO 包
中的 deploy-pulsar.yaml
文件并取消注释您想要的连接器来采用。
要运行示例,请输入此命令:
$ ansible-playbook \
--user='ec2-user' \
--inventory=`which terraform-inventory` \
../deploy-pulsar.yaml
If you have created a private SSH key at a location different from ~/.ssh/id_rsa
, you can specify the different location using the --private-key
flag in the following command:
$ ansible-playbook \
--user='ec2-user' \
--inventory=`which terraform-inventory` \
--private-key="~/.ssh/some-non-default-key" \
../deploy-pulsar.yaml
访问 Pulsar 集群
You can now access your running Pulsar using the unique Pulsar connection URL for your cluster, which you can obtain following the instructions above.
For a quick demonstration of accessing the cluster, we can use the Python client for Pulsar and the Python shell. First, install the Pulsar Python module using pip:
$ pip install pulsar-client
Now, open up the Python shell using the python
command:
$ python
Once you are in the shell, enter the following command:
>>> import pulsar
>>> client = pulsar.Client('pulsar://pulsar-elb-1800761694.us-west-2.elb.amazonaws.com:6650')
# Make sure to use your connection URL
>>> producer = client.create_producer('persistent://public/default/test-topic')
>>> producer.send('Hello world')
>>> client.close()
If all of these commands are successful, Pulsar clients can now use your cluster!