Using Different Mount Points on PMM Docker Deployments

Mount Points on PMM Docker

Mount Points on PMM DockerIn this blog post, we’ll see how to use different mount points on PMM Docker deployments (Percona Monitoring and Management). This is useful if you want to use other mount points for the different directories, or even if you want to use a custom path that is not bound to Docker’s volumes directory (which is /var/lib/docker/volumes/ by default) within the same mount point.

There are two ways in which you can achieve this:

  • using symlinks after the pmm-data container is created
  • modifying the docker create command to use different directories

In the following examples, /pmm/ is used as the new base directory. One can, of course, choose different directories for each if needed. Also, remember to be aware of any SELinux or AppArmor policies you may have in place.

Using symlinks

For this, we need to follow these steps:

  1. Create the needed directories
  2. Create the pmm-data container
  3. Move contents from default Docker paths to the desired paths
  4. Create symlinks that point to the moved directories

Let’s see this with some commands and outputs. In this example, we will use /pmm/ as if it were the new mount point:

shell> mkdir /pmm/opt/
shell> mkdir /pmm/opt/prometheus
shell> mkdir /pmm/var/lib/

shell> docker create
  -v /opt/prometheus/data
  -v /opt/consul-data
  -v /var/lib/mysql
  -v /var/lib/grafana
  --name pmm-data
  percona/pmm-server:1.7.0 /bin/true
4589cd1bf8ce365f8f62eab9f415eb14f1ce3a76b0123b7aad42e93385455303

shell> docker inspect pmm-data | egrep "Source|Destination"
"Source": "/var/lib/docker/volumes/a191331f6be1a177003ef2fdeee53f92fc190dc67b0c402ee7b47b4461ffa522/_data",
"Destination": "/opt/prometheus/data",
"Source": "/var/lib/docker/volumes/7208317edff4565f649df294cfb05fc1888e6ab817c18abc5f036c419e364d4b/_data",
"Destination": "/var/lib/grafana",
"Source": "/var/lib/docker/volumes/547b3f083a0a33b6cd75eb72e2cc25c383f5d4db2d8a493b25eb43499e2f5807/_data",
"Destination": "/var/lib/mysql",
"Source": "/var/lib/docker/volumes/7473ac5d2dac4440ac94fae2faf4a63af95baaabed4b14d9414f499ae9b5761d/_data",
"Destination": "/opt/consul-data",
shell> DOCKER_CONSUL_DATA="/var/lib/docker/volumes/7473ac5d2dac4440ac94fae2faf4a63af95baaabed4b14d9414f499ae9b5761d/_data"
shell> DOCKER_PROMETHEUS_DATA="/var/lib/docker/volumes/a191331f6be1a177003ef2fdeee53f92fc190dc67b0c402ee7b47b4461ffa522/_data"
shell> DOCKER_GRAFANA_DATA="/var/lib/docker/volumes/7208317edff4565f649df294cfb05fc1888e6ab817c18abc5f036c419e364d4b/_data"
shell> DOCKER_MYSQL_DATA="/var/lib/docker/volumes/547b3f083a0a33b6cd75eb72e2cc25c383f5d4db2d8a493b25eb43499e2f5807/_data"
shell> mv $DOCKER_CONSUL_DATA /pmm/opt/consul-data
shell> mv $DOCKER_PROMETHEUS_DATA /pmm/opt/prometheus/data
shell> mv $DOCKER_GRAFANA_DATA /pmm/var/lib/grafana
shell> mv $DOCKER_MYSQL_DATA /pmm/var/lib/mysql

shell> ln -s /pmm/opt/consul-data $DOCKER_CONSUL_DATA
shell> ln -s /pmm/opt/prometheus/data $DOCKER_PROMETHEUS_DATA
shell> ln -s /pmm/var/lib/grafana $DOCKER_GRAFANA_DATA
shell> ln -s /pmm/var/lib/mysql $DOCKER_MYSQL_DATA

After this, we can start the pmm-server container (see below).

Modifying the docker create command

For this, we need to follow these other steps:

  1. Create the needed directories
  2. Create a temporary pmm-data container
  3. Copy its contents to the new locations, and delete it (the temporary container)
  4. Create the permanent pmm-data container with the modified paths (-v arguments)
  5. Fix ownership of files in the copied directories (to avoid errors when starting the pmm-server container later on)

Let’s see this in practical terms again, assuming we want to use the /pmm/ mount point.

shell> mkdir /pmm/opt/
shell> mkdir /pmm/opt/prometheus
shell> mkdir /pmm/var/lib/

shell> docker create
  -v /opt/prometheus/data
  -v /opt/consul-data
  -v /var/lib/mysql
  -v /var/lib/grafana
  --name pmm-data-temporary
  percona/pmm-server:1.7.0 /bin/true
76249e1830c2a9c320466e41a454e9e80bf513e9b046e795ec41a33d75df5830

shell> docker cp pmm-data-temporary:/opt/prometheus/data /pmm/opt/prometheus/data
shell> docker cp pmm-data-temporary:/opt/consul-data /pmm/opt/consul-data
shell> docker cp pmm-data-temporary:/var/lib/mysql /pmm/var/lib/mysql
shell> docker cp pmm-data-temporary:/var/lib/grafana /pmm/var/lib/grafana
shell> docker rm -v pmm-data-temporary

shell> docker create
  -v /pmm/opt/prometheus/data:/opt/prometheus/data
  -v /pmm/opt/consul-data:/opt/consul-data
  -v /pmm/var/lib/mysql:/var/lib/mysql
  -v /pmm/var/lib/grafana:/var/lib/grafana
  --name pmm-data
  percona/pmm-server:1.7.0 /bin/true
d4c10ae9fb2e38758df999268573f4a8cddb5b47389b349f55733d2e54815bf0

shell> docker run --rm --volumes-from pmm-data -it percona/pmm-server:1.7.0 chown -R pmm:pmm /opt/prometheus/data /opt/consul-data
shell> docker run --rm --volumes-from pmm-data -it percona/pmm-server:1.7.0 chown -R grafana:grafana /var/lib/grafana
shell> docker run --rm --volumes-from pmm-data -it percona/pmm-server:1.7.0 chown -R mysql:mysql /var/lib/mysql

After this, we can start the pmm-server container (see below).

Running pmm-server container

After following either of the steps mentioned above, we can run the pmm-server container with the exact same commands as shown in the online documentation:

shell> docker run -d
   -p 80:80
   --volumes-from pmm-data
   --name pmm-server
   --restart always
   percona/pmm-server:1.7.0
0caa14f6fa22c419876de0dfb635535dbba41a2bd82b51b3d8a5be0b763fa6d2

And that’s it! Now you should have custom mount points on PMM docker deployment.

The post Using Different Mount Points on PMM Docker Deployments appeared first on Percona Database Performance Blog.

关注dbDao.com的新浪微博

扫码加入微信Oracle小密圈,了解Oracle最新技术下载分享资源

TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569