First steps with Ceph
My aim was to play a bit with Ceph to get familiar with the object store. Setting up Ceph is not very easy if something is different from the example in the docs. I don't want to use a whole block device for OSD for example.
I used the docker image https://hub.docker.com/r/ceph/demo/ for that. I installed and started it:
docker pull ceph/demo
docker run -d --net=host -v /etc/ceph:/etc/ceph -e MON_IP=192.168.0.20 -e CEPH_PUBLIC_NETWORK=192.168.0.0/24 ceph/demo
MON_IP has to be the own host's IP and CEPH_PUBLIC_NETWORK the corresponding own network. docker ps didn't show a running container afterwards, so I deleted the container again with docker rm CONTAINER-ID and restarted it without the -d. It showed that my harddisk space was not sufficient, so I added mon data avail crit = 1 to /etc/ceph.conf. docker run CONTAINER-ID worked now; docker ps shows the running container.
I tried to connect to the object store with the Rados Java binding. The import in the examples of the Ceph docs was not quite correct. The corrected version is:
import com.ceph.rados.Rados;
import com.ceph.rados.exceptions.RadosException;
import java.io.File;
public class CephClientTest {
public static void main(String args[]) {
try {
Rados cluster = new Rados("admin");
System.out.println("Created cluster handle.");
File f = new File("/etc/ceph/ceph.conf");
cluster.confReadFile(f);
System.out.println("Read the configuration file.");
cluster.connect();
System.out.println("Connected to the cluster.");
} catch (RadosException e) {
System.out.println(e.getMessage() + ": " + e.getReturnValue());
}
}
}
The first output was
Ceph cluster; ENOENT: No such file or directory (-2)
This was related to the permissions of /etc/ceph/ceph.client.admin.keyring. After adding read permissions to it for other users the connection could be established successfully.