Ansible playbooks to deploy Ceph, the distributed filesystem.
 
 
 
 
Go to file
Matt Thompson 5db9f45c04 Add run_once to 'copy keys to the ansible server'
I have seen a number of failures on this task due to mismatch of
checksum of source file and destination.  I suspect this is due to a
race condition caused by several hosts simultaneously copying the same
file to single location on the deployment server.

This change simply updates the 'copy keys to the ansible server' task
by adding 'run_once', which limits the task to being run on a single
MON host.

Closes issue #410
2015-12-04 16:14:18 +00:00
contrib Failed_when instead of ignore_errors 2015-07-29 13:35:46 -05:00
group_vars Use new Infernalis release 2015-11-18 11:47:38 +01:00
library Update provided facts key to return ansible_facts key 2014-03-11 11:12:41 +00:00
roles Add run_once to 'copy keys to the ansible server' 2015-12-04 16:14:18 +00:00
tests WIP: first implementation of functional tests 2015-02-22 02:31:28 +01:00
.gitignore Do not track site example file 2015-11-26 17:48:04 +01:00
.travis.yml Fix Travis 2015-01-21 16:33:26 +01:00
LICENSE Add Ceph Playbook 2014-03-03 19:08:51 +01:00
README.md various fixes for CentOS 2015-11-05 20:39:03 +00:00
Vagrantfile various fixes for CentOS 2015-11-05 20:39:03 +00:00
ansible.cfg Remove ansible managed header from ceph.conf 2014-10-10 15:41:31 +02:00
cluster-maintenance.yml Merge branch 'master' of https://github.com/ceph/ceph-ansible into improve-rolling-upgrade 2015-03-30 17:29:28 +02:00
cluster-os-migration.yml Revert "Use stat module instead of shell" 2015-08-07 00:07:51 -05:00
dummy-ansible-hosts Fix Travis 2015-01-21 16:33:26 +01:00
install-ansible.sh various fixes for CentOS 2015-11-05 20:39:03 +00:00
monitor_keys_example Add Monitor Keys example 2015-01-30 16:17:46 +01:00
purge-cluster.yml Do not zap disks on monitors 2015-10-21 00:32:42 +02:00
purge-docker-cluster.yml Add a purge playbook when running ceph in containers 2015-10-21 00:28:35 +02:00
rolling_update.yml Revert "Use stat module instead of shell" 2015-08-07 00:07:51 -05:00
site.yml.sample Moving out the restapi from the mons 2015-11-26 19:57:16 +01:00
test.yml Modify the repo to host reoles on the galaxy 2015-07-24 18:14:59 +02:00
vagrant_variables.yml.sample various fixes for CentOS 2015-11-05 20:39:03 +00:00

README.md

ceph-ansible

Ansible playbook for Ceph!

Clone me:

git clone https://github.com/ceph/ceph-ansible.git
cp vagrant_variables.yml.sample vagrant_variables.yml

What does it do?

General support for:

  • Monitors
  • OSDs
  • MDSs
  • RGW

More details:

  • Authentication (cephx), this can be disabled.
  • Supports cluster public and private network.
  • Monitors deployment. You can easily start with one monitor and then progressively add new nodes. So can deploy one monitor for testing purpose. For production, I recommend to always use an odd number of monitors, 3 tends to be the standard.
  • Object Storage Daemons. Like the monitors you can start with a certain amount of nodes and then grow this number. The playbook either supports a dedicated device for storing the journal or both journal and OSD data on the same device (using a tiny partition at the beginning of the device).
  • Metadata daemons.
  • Collocation. The playbook supports collocating Monitors, OSDs and MDSs on the same machine.
  • The playbook was validated on Debian Wheezy, Ubuntu 12.04 LTS and CentOS 6.4.
  • Tested on Ceph Dumpling and Emperor.
  • A rolling upgrade playbook was written, an upgrade from Dumpling to Emperor was performed and worked.

Setup with Vagrant

Run your virtual machines:

$ vagrant up --provider=virtualbox
...
...
...
 ____________
< PLAY RECAP >
 ------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||


mon0                       : ok=16   changed=11   unreachable=0    failed=0
mon1                       : ok=16   changed=10   unreachable=0    failed=0
mon2                       : ok=16   changed=11   unreachable=0    failed=0
osd0                       : ok=19   changed=7    unreachable=0    failed=0
osd1                       : ok=19   changed=7    unreachable=0    failed=0
osd2                       : ok=19   changed=7    unreachable=0    failed=0
rgw                        : ok=20   changed=17   unreachable=0    failed=0

Check the status:

$ vagrant ssh mon0 -c "sudo ceph -s"
    cluster 4a158d27-f750-41d5-9e7f-26ce4c9d2d45
     health HEALTH_OK
     monmap e3: 3 mons at {ceph-mon0=192.168.0.10:6789/0,ceph-mon1=192.168.0.11:6789/0,ceph-mon2=192.168.0.12:6789/0}, election epoch 6, quorum 0,1,2 ceph-mon0,ceph-mon1,ceph-mon
     mdsmap e6: 1/1/1 up {0=ceph-osd0=up:active}, 2 up:standby
     osdmap e10: 6 osds: 6 up, 6 in
      pgmap v17: 192 pgs, 3 pools, 9470 bytes data, 21 objects
            205 MB used, 29728 MB / 29933 MB avail
                 192 active+clean

To re-run the Ansible provisioning scripts:

$ vagrant provision

Specifying fsid and secret key in production

The Vagrantfile specifies an fsid for the cluster and a secret key for the monitor. If using these playbooks in production, you must generate your own fsid in group_vars/all and monitor_secret in group_vars/mons. Those files contain information about how to generate appropriate values for these variables.

Specifying package origin

By default, ceph-common installs from Ceph repository. However, you can set ceph_origin to "distro" to install Ceph from your default repository.

For Debian based systems

If you want to use "backports", you can set "true" to ceph_use_distro_backports. Attention, ceph-common doesn't manage backports repository, you must add it yourself.

Vagrant Demo

Ceph-ansible Vagrant Demo

Bare metal demo

Deployment from scratch on bare metal machines:

Ceph-ansible bare metal demo