ansible-lssd/README.md

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.