150 lines
3.4 KiB
Markdown
150 lines
3.4 KiB
Markdown
ansible-lssd
|
|
============
|
|
|
|
Large scale server deploys using BitTorrent. aria2c, NodeJS Bittorrent-tracker and mktorrent are used.
|
|
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
|
|
ansible-lssd is a method of using Bittorrent to distribute files to a large amount of servers within a production environment.
|
|
|
|
ansible-lssd operates as a playbook of [Ansible](https://github.com/ansible/ansible).
|
|
These playbooks require Ansible 1.4.
|
|
|
|
These playbooks were tested on CentOS 7.x (ansible 2.6) with peers on Centos 7.x and Centos 6.x.
|
|
|
|
Advantage
|
|
---------
|
|
|
|
There is the following advantage as compared with Murder.
|
|
* *Ruby is not required* to run on only python.
|
|
* *Capistrano is not required*. run in the ansible playbooks.
|
|
* Environment setup is automated by playbook.
|
|
|
|
|
|
Installation of software required minimum
|
|
-----------------------------------------
|
|
|
|
From EPEL:
|
|
# yum -y install ansible
|
|
|
|
|
|
HOW IT WORKS
|
|
------------
|
|
|
|
Same as the "[HOW IT WORKS](https://github.com/lg/murder/blob/master/README.md#how-it-works)" of Murder.
|
|
|
|
|
|
CONFIGURATION
|
|
-----------------------
|
|
|
|
You define `tracker`, `seeder` and `peer` server to inventory (./production) file.
|
|
|
|
All involved servers must have python installed.
|
|
|
|
The file group_vars/all contains the configuration.
|
|
|
|
MANUAL USAGE
|
|
------------
|
|
|
|
Modify a ./production and ./group_vars/all, manually define servers:
|
|
|
|
./production:
|
|
```INI:production
|
|
# ansible host
|
|
[ansible_host]
|
|
localhost ansible_connection=local
|
|
|
|
# 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:
|
|
```YAML:group_vars/all
|
|
# deploy tag
|
|
tag: Deploy1
|
|
|
|
# path
|
|
seeder_files_path: ~/builds
|
|
destination_path: /opt/hoge # or some other directory
|
|
```
|
|
|
|
The destination_path, by setup.yml, specify the directory to be placed in the all server of Murder library and support files etc..
|
|
|
|
Then manually run the ansible playbooks:
|
|
|
|
1. Start the tracker:
|
|
|
|
```bash:
|
|
$ ansible-playbook -i production start_tracker.yml
|
|
```
|
|
|
|
2. Create a torrent from a directory of files on the seeder, and start seeding:
|
|
|
|
```bash:
|
|
# 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
|
|
```
|
|
|
|
3. Distribute the torrent to all peers:
|
|
|
|
```bash:
|
|
$ ansible-playbook -i production deploy.yml -f 1000
|
|
```
|
|
|
|
4. Stop the seeder and tracker:
|
|
|
|
```bash:
|
|
$ ansible-playbook -i production stop_seeder_and_tracker.yml
|
|
```
|
|
|
|
When this finishes, all peers will have the files in /opt/hoge/Deploy1
|
|
|
|
|
|
MAIN PLAYBOOKS REFERENCE
|
|
------------------------
|
|
|
|
* `create_torrent.yml:`
|
|
* Create torrent file on seeder node.
|
|
* `deploy.yml:`
|
|
* Deploy files on peer nodes.
|
|
* `setup.yml:`
|
|
* Install the software required for each node.
|
|
* `full_deploy.yml:`
|
|
* Run all Playbook deploy from the setup.
|
|
* `start_seeder.yml:`
|
|
* start seeding.
|
|
* `start_tracker.yml:`
|
|
* start tracker.
|
|
* `stop_all_peers.yml:`
|
|
* stop all peer client.
|
|
* `stop_seeder_and_tracker.yml:`
|
|
* stop seeding and tracker.
|
|
|
|
|
|
NOTES
|
|
------------------------
|
|
|
|
You may hit the request length limit (fixed in newer aria2 releases) :
|
|
https://github.com/aria2/aria2/commit/e220c5384961f9261f19c28cd0b85f76f06d8993#diff-03671aebef9174610c96db97917b960a
|
|
|
|
Workaround is using "-l 22" as mktorrent option to make less pieces.
|