rename main yaml and add description
This commit is contained in:
parent
323b1ef8c9
commit
9b081ed314
128
README.md
128
README.md
@ -2,3 +2,131 @@ ansible-lssd
|
|||||||
============
|
============
|
||||||
|
|
||||||
Large scale server deploys using BitTorrent and the BitTornado library by [Murder](https://github.com/lg/murder)
|
Large scale server deploys using BitTorrent and the BitTornado library by [Murder](https://github.com/lg/murder)
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
ansible-lssd is a method of using Bittorrent (Powered by [Murder](https://github.com/lg/murder)) to distribute files to a large amount
|
||||||
|
of servers within a production environment.
|
||||||
|
|
||||||
|
|
||||||
|
QUICK START
|
||||||
|
-----------
|
||||||
|
|
||||||
|
For the impatient, `sudo pip install ansible` and add these lines to your group_vars/all:
|
||||||
|
|
||||||
|
```bash:
|
||||||
|
# install pip (Python package manager) and ansible
|
||||||
|
$ sudo easy_install pip
|
||||||
|
$ sudo pip install ansible
|
||||||
|
```
|
||||||
|
|
||||||
|
```YAML:group_vars/all
|
||||||
|
# deploy tag
|
||||||
|
tag: Deploy1
|
||||||
|
|
||||||
|
# path
|
||||||
|
seeder_files_path: ~/builds
|
||||||
|
destination_path: /opt/hoge
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
HOW IT WORKS
|
||||||
|
------------
|
||||||
|
|
||||||
|
Same as the "[HOW IT WORKS](https://github.com/lg/murder/blob/master/README.md#how-it-works)" of Murder.
|
||||||
|
|
||||||
|
|
||||||
|
CONFIGURATION AND USAGE
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
You define `tracker`, `seeder` and `peer` server to inventory (./production) file.
|
||||||
|
|
||||||
|
All involved servers must have python and pizg installed and the related murder
|
||||||
|
support files (BitTornado, etc.). To upload the support files to the
|
||||||
|
tracker, seeder, and peers, run:
|
||||||
|
|
||||||
|
```bash:
|
||||||
|
$ ansible-playbook -i prodction setup.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, these will go in `/usr/local/murder` in your apps deploy directory.
|
||||||
|
Override this by setting the variable `remote_murder_path`.
|
||||||
|
|
||||||
|
Before deploying, you must start the tracker:
|
||||||
|
|
||||||
|
```bash:
|
||||||
|
$ ansible-playbook -i prodction start_tracker.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
At this point you should be able to deploy normally:
|
||||||
|
|
||||||
|
```bash:
|
||||||
|
$ ansible-playbook -i prodction deploy.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
MANUAL USAGE (ansible-lssd without a deploy strategy)
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
Modify a ./production and ./group_vars/all, manually define servers:
|
||||||
|
|
||||||
|
```INI:production
|
||||||
|
# ansible host
|
||||||
|
[ansible_host]
|
||||||
|
localhost ansible_connection=local
|
||||||
|
|
||||||
|
# tracker node
|
||||||
|
[tracker]
|
||||||
|
10.0.0.1
|
||||||
|
|
||||||
|
# seeder node
|
||||||
|
[seeder]
|
||||||
|
10.0.0.1
|
||||||
|
|
||||||
|
# peer nodes
|
||||||
|
[peer]
|
||||||
|
10.1.1.1
|
||||||
|
10.1.1.2
|
||||||
|
10.1.1.3
|
||||||
|
```
|
||||||
|
|
||||||
|
```YAML:group_vars/all
|
||||||
|
# deploy tag
|
||||||
|
tag: Deploy1
|
||||||
|
|
||||||
|
# path
|
||||||
|
seeder_files_path: ~/builds
|
||||||
|
destination_path: /opt/hoge # or some other directory
|
||||||
|
```
|
||||||
|
|
||||||
|
To distribute a directory of files, first make sure that murder is set
|
||||||
|
up on all hosts, then manually run the murder cap tasks:
|
||||||
|
|
||||||
|
1. Start the tracker:
|
||||||
|
|
||||||
|
```bash:
|
||||||
|
$ ansible-playbook -i prodction start_tracker.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create a torrent from a directory of files on the seeder, and start seeding:
|
||||||
|
|
||||||
|
```bash:
|
||||||
|
$ scp -r ./builds host1:~/builds
|
||||||
|
$ ansible-playbook -i prodction create_torrent.yml
|
||||||
|
$ ansible-playbook -i prodction start_seeder.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Distribute the torrent to all peers:
|
||||||
|
|
||||||
|
```bash:
|
||||||
|
$ ansible-playbook -i prodction deploy.yml
|
||||||
|
```
|
||||||
|
4. Stop the seeder and tracker:
|
||||||
|
|
||||||
|
```bash:
|
||||||
|
$ ansible-playbook -i prodction stop_seeder_and_tracker.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
When this finishes, all peers will have the files in /opt/hoge/Deploy1
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,9 +8,3 @@
|
|||||||
roles:
|
roles:
|
||||||
- murder/create_torrent
|
- murder/create_torrent
|
||||||
|
|
||||||
- name: Start seeding
|
|
||||||
hosts: seeder
|
|
||||||
sudo: yes
|
|
||||||
roles:
|
|
||||||
- murder/start_seeding
|
|
||||||
|
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
- name: Deploy
|
- name: Deploy
|
||||||
hosts:
|
hosts: peer
|
||||||
- peer
|
|
||||||
#- seeder
|
|
||||||
sudo: yes
|
sudo: yes
|
||||||
#serial: 100
|
serial: 1000
|
||||||
roles:
|
roles:
|
||||||
- murder/peer
|
- murder/peer
|
||||||
|
|
||||||
|
@ -18,5 +18,5 @@ localhost ansible_connection=local
|
|||||||
10.1.1.3
|
10.1.1.3
|
||||||
10.1.1.4
|
10.1.1.4
|
||||||
10.1.1.[5:19]
|
10.1.1.[5:19]
|
||||||
10.2.1.[100:109] ansible_connection=ssh ansible_ssh_private_key_file=private.pem ansible_ssh_user=root
|
10.1.1.[100:109] ansible_connection=ssh ansible_ssh_private_key_file=private.pem ansible_ssh_user=root
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
# SCPs a compressed version of all files from ./dist (the python Bittorrent library and custom scripts) to all server.
|
||||||
|
# The entire directory is sent, regardless of the role of each individual server.
|
||||||
|
# The path on the server is specified by remote_murder_path and will be cleared prior to transferring files over.
|
||||||
- name: mkdir destination_path
|
- name: mkdir destination_path
|
||||||
file: path={{ destination_path }} state=directory owner=root group=root mode=0755
|
file: path={{ destination_path }} state=directory owner=root group=root mode=0755
|
||||||
tags: distribute_files
|
tags: distribute_files
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
# Starts the Bittorrent tracker (essentially a mini-web-server) listening on port 8998.
|
||||||
- name: start tracker
|
- name: start tracker
|
||||||
shell: SCREENRC=/dev/null SYSSCREENRC=/dev/null screen -dmS murder_tracker python {{ remote_murder_path }}/murder_tracker.py && sleep 0.2
|
shell: SCREENRC=/dev/null SYSSCREENRC=/dev/null screen -dmS murder_tracker python {{ remote_murder_path }}/murder_tracker.py && sleep 0.2
|
||||||
tags: start_tracker
|
tags: start_tracker
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
|
# Sometimes peers can go on forever (usually because of an error).
|
||||||
|
# This command will forcibly kill all "murder_client.py peer" commands that are running.
|
||||||
- name: stop all peering
|
- name: stop all peering
|
||||||
shell: pkill -f "murder_client.py peer"
|
shell: pkill -f "murder_client.py peer"
|
||||||
register: result
|
register: result
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
# Identical to stop_seeding, except this will kill all seeding processes. No 'tag' argument is needed."
|
||||||
- name: stop all seeding
|
- name: stop all seeding
|
||||||
shell: pkill -f "SCREEN.*seeder-"
|
shell: pkill -f "SCREEN.*seeder-"
|
||||||
register: result
|
register: result
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
# If the Bittorrent tracker is running, this will kill the process. Note that if it is not running you will receive an error.
|
||||||
- name: stop tracker
|
- name: stop tracker
|
||||||
shell: pkill -f 'SCREEN.*murder_tracker.py'
|
shell: pkill -f 'SCREEN.*murder_tracker.py'
|
||||||
register: result
|
register: result
|
||||||
|
@ -1,4 +1,12 @@
|
|||||||
|
# Instructs all the peer servers to connect to the tracker and start download and spreading pieces and files amongst themselves.
|
||||||
|
# You must specify a valid 'tag' argument.
|
||||||
|
# Once the download is complete on a server, that server will fork the download process and seed for 30 seconds while returning control to Ansible.
|
||||||
|
# extract the files to the passed in 'destination_path' argument to destination_path/TAG/*.
|
||||||
|
# To not create this tag named directory, pass in the 'no_tag_directory=1' argument.
|
||||||
|
# If the directory is not empty, this command will fail.
|
||||||
|
# To clean it, pass in the 'unsafe_please_delete=1' argument.
|
||||||
|
# The compressed tgz in /{{ default_temp_path }} is never removed.
|
||||||
|
# When this task completes, all files have been transferred and moved into the requested directory.
|
||||||
- name: set destination_path
|
- name: set destination_path
|
||||||
set_fact: destination_path={{ destination_path }}/{{ tag }}
|
set_fact: destination_path={{ destination_path }}/{{ tag }}
|
||||||
when: not no_tag_directory
|
when: not no_tag_directory
|
||||||
@ -9,7 +17,7 @@
|
|||||||
tags: peer
|
tags: peer
|
||||||
|
|
||||||
- name: delete destination_path/*
|
- name: delete destination_path/*
|
||||||
shell: rm -rf '{{ destination_path }}a/*'
|
shell: rm -rf '{{ destination_path }}/*'
|
||||||
when: unsafe_please_delete
|
when: unsafe_please_delete
|
||||||
tags: peer
|
tags: peer
|
||||||
|
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
|
|
||||||
|
# Will cause the seeder machine to connect to the tracker and start seeding.
|
||||||
|
# The ip address returned by the 'host' bash command will be announced to the tracker.
|
||||||
|
# The server will not stop seeding until the stop_seeding task is called.
|
||||||
|
# You must specify a valid 'tag' argument (which identifies the .torrent in /tmp to use)
|
||||||
- name: start seeding
|
- name: start seeding
|
||||||
shell: SCREENRC=/dev/null SYSSCREENRC=/dev/null screen -dmS 'seeder-{{ tag }}' python {{ remote_murder_path }}/murder_client.py seeder '{{ filename }}.torrent' '{{ filename }}' {{ ansible_default_ipv4['address'] }}
|
shell: SCREENRC=/dev/null SYSSCREENRC=/dev/null screen -dmS 'seeder-{{ tag }}' python {{ remote_murder_path }}/murder_client.py seeder '{{ filename }}.torrent' '{{ filename }}' {{ ansible_default_ipv4['address'] }}
|
||||||
tags: start_seeding
|
tags: start_seeding
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
|
|
||||||
|
# If the seeder is currently seeding, this will kill the process.
|
||||||
|
# If a peer was downloading from this seed, the peer will find another host to receive any remaining data.
|
||||||
|
# You must specify a valid 'tag' argument.
|
||||||
- name: stop seeding
|
- name: stop seeding
|
||||||
shell: pkill -f "SCREEN.*seeder-{{ tag }}"
|
shell: pkill -f "SCREEN.*seeder-{{ tag }}"
|
||||||
register: result
|
register: result
|
||||||
|
3
site.yml
3
site.yml
@ -1,10 +1,11 @@
|
|||||||
---
|
---
|
||||||
- include: setup.yml
|
- include: setup.yml
|
||||||
- include: stop_seeder_and_tracker.yml
|
- include: stop_seeder_and_tracker.yml
|
||||||
- include: stop_all.yml
|
- include: stop_all_peers.yml
|
||||||
- include: rm_tgz.yml
|
- include: rm_tgz.yml
|
||||||
- include: start_tracker.yml
|
- include: start_tracker.yml
|
||||||
- include: create_torrent.yml
|
- include: create_torrent.yml
|
||||||
|
- include: start_seeder.yml
|
||||||
- include: deploy.yml
|
- include: deploy.yml
|
||||||
- include: stop_seeder_and_tracker.yml
|
- include: stop_seeder_and_tracker.yml
|
||||||
|
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
|
|
||||||
- name: Stop seeding
|
- name: Stop seeder
|
||||||
hosts: seeder
|
hosts: seeder
|
||||||
sudo: yes
|
sudo: yes
|
||||||
roles:
|
roles:
|
||||||
- murder/stop_seeding
|
- admin/stop_seeder
|
||||||
|
|
||||||
- name: Stop tracker
|
- name: Stop tracker
|
||||||
hosts: tracker
|
hosts: tracker
|
||||||
sudo: yes
|
sudo: yes
|
||||||
roles:
|
roles:
|
||||||
- admin/stop_tracker
|
- admin/stop_tracker
|
||||||
|
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
|
|
||||||
- name: Stop seeding
|
|
||||||
hosts: seeder
|
|
||||||
sudo: yes
|
|
||||||
roles:
|
|
||||||
- murder/stop_seeding
|
|
||||||
|
|
||||||
- name: Stop tracker
|
|
||||||
hosts: tracker
|
|
||||||
sudo: yes
|
|
||||||
roles:
|
|
||||||
- admin/stop_tracker
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user