我使用Ansible的playbook编写了一个利用BitTorrent的快速部署工具

Ansible-列出存储设备

在Twitter上有一个名为Murder的用户创建了一款利用BitTorrent进行部署的工具。
我尝试了它的功能,发现它能以惊人的速度进行部署,让我感到非常惊喜。
但是它是作为Capistrano的扩展编写的,有些地方使用起来不太方便,
所以我决定用Ansible的Playbook重新编写了一下。
虽然名字可以随便取,但是为了先试试,我给它起了一个以Large scale server deploy的首字母为ansible-lssd的名字。

    • Murderについては、 http://www.publickey1.jp/blog/10/twitterbittorrent.html の解説が詳しい。

http://qiita.com/yamasaki-masahide/items/a4281dbbe0d4ebcbfdeb にMurderのレビューを書いた。

解释

ansible-lssd 是一个使用Bittorrent(由Murder提供动力)的大规模服务器部署工具。

ansible-lssd 是以 Ansible Playbooks 的形式运行。
这些 Playbooks 需要 Ansible 1.3 或更高版本。
这些 Playbooks 在 CentOS 5.x 上进行了测试。(如果在使用 yum 的部分进行修正,应该可以运行)

与Murder本家进行比较

相比于谋杀,应该有以下优点。

    • Ruby不要でPythonのみで動作する

 

    • Capistranoが不要で、ansible playbooksとして動作する

 

    環境セットアップがplaybooksによって自動化されている

仅需一种选项:安装最基本必需的软件。

只需要在执行ansible的主机上安装ansible

用sudo pip安装ansible:

   # install pip and ansible
  $ sudo easy_install pip
  $ sudo pip install ansible

只需选择一个将以下内容以中文进行本地化:

然后,从 https://github.com/masahide/ansible-lssd 克隆 ansible-lssd。

  $ git clone https://github.com/masahide/ansible-lssd.git

如何运作

虽然和Murder的”How it works”没有太大的不同,
简单解释一下,感觉如下。(如果有人发现错误,请纠正)

登场的节点有以下三种类型(确切地说,包括执行ansible的主机在内共有四种类型)。

    • tracker

BitTorrentでのファイル配布情報収集役のノード。各peerへ事前に配るtorrentファイルにこのサーバーIPが記載されている。配布情報を取り仕切る拠点になる。

seeder

配布するファイルの大元になるノード このノードに配布元となるファイル(ディレクトリ)をtar.gzしたファイルを配置する。

peer

配布対象のseeder以外の全てのノード

部署操作按照以下顺序执行

    1. 对各节点进行初始化设置(仅首次)

分发和安装部署所需的软件

将Murder脚本(Python),BitTornado库(Python)分发到所有节点
将pigz(用于并行gzip的工具)安装到所有节点
将screen命令安装到tracker和seeder

启动tracker

使用screen命令将其守护化并启动

在seeder节点准备部署对象(在所有seeder节点上完成)

配置部署对象的文件
使用pigz将目标文件打包为tar.gz格式
创建种子文件

启动seeder

使用screen命令将其守护化并启动

执行部署

分发种子文件
根据种子文件,各节点执行下载
下载完成后解压tar.gz文件

停止tracker和seeder

使用pkill停止守护化的脚本

设定

将tracker、seeder和peer节点列在清单文件(./production)中。

所有服务器都需要安装Python,但是由于CentOS5已经预装了Python,所以没有特别的问题。
但是,可能需要执行http://qiita.com/yamasaki-masahide/items/4485a438125e6b1748ce,具体视情况而定。

通过执行以下的setup.yml playbook应该自动安装其他必要的软件(如BitTornado、Murder lib、screen、pigz等)。

  $ ansible-playbook -i prodction setup.yml

顺便提一下,默认情况下,bitTornado和Murder库等会安装在/usr/local/murder目录下,但可以通过编辑group_vars/all文件中的remote_murder_path来将其安装到其他目录。

使用方法

    修改./production和./group_vars/all文件。

在 ./production 中,需要记录目标服务器的IP等信息。

./生产:

  # ansible host
  [ansible_host]
  localhost ansible_connection=local  # Ansibleを実行するホスト

  # tracker node
  [tracker]
  10.0.0.1  node_type=tracker

  # seeder node
  [seeder]
  10.0.0.1   node_type=seeder

  # peer nodes
  [peer]
  10.1.1.1
  10.1.1.2
  10.1.1.3

将部署目标目录和部署目标文件夹等信息记录在group_vars/all文件中。

  # deploy tag
  tag: Deploy1

  # path
  seeder_files_path:  ~/builds
  destination_path:   /opt/hoge  # or some other directory

通过setup.yml指定destination_path变量,您可以指定用于在服务器上部署Murder库和支持文件的目录。
例如,如果将tag设置为Deploy1并将destination_path设置为/opt/hoge,
则所有文件将部署到每个peer的/opt/hoge/Deploy1目录中。

完成上述设置后,按照下面的ansible-playbook一次执行。

    开始追踪器:
  $ ansible-playbook -i production start_tracker.yml
    将目标目录放置在seeder服务器上,并在将其压缩为tar.gz文件后创建torrent文件。
  # copy to seeder node
  $ scp -r ./builds 10.0.0.1:~/builds

  # create torrent file
  $ ansible-playbook -i production create_torrent.yml

  # start seeding
  $ ansible-playbook -i production start_seeder.yml
    部署
  $ ansible-playbook -i production deploy.yml -f 1000

可以使用“-f”选项来指定同时执行的数量,该数量应大于 peer(节点)的数量。

    停止使用seeder与tracker。
  $ ansible-playbook -i production stop_seeder_and_tracker.yml

应该已经完成了所有同事的/opt/hoge/Deploy1的部署。

主要的玩法手册参考

create_torrent.yml:

seederノード上でtorrent fileを作成する

deploy.yml:

peerノードでデプロイを実行する

rm_tgz.yml:

デプロイ用のtargz を全てのサーバー上から削除する

setup.yml:

各ノードへ必要なサポートスクリプトなどをインストールする

site.yml:

各サーバーの設定からデプロイの実行までを一気に行う

start_seeder.yml:

seederをスタートさせる

start_tracker.yml:

trackerをスタートさせる

stop_all_peers.yml:

全てのpeer上で動いてるかもしれないClientライブラリを停止する

stop_seeder_and_tracker.yml:

seederとtrackerを停止する

广告
将在 10 秒后关闭
bannerAds