Thank you for reading this post, don't forget to subscribe!
Имеется несколько хостов:
[192.168.1.180] swarm_master1_180
[192.168.1.181] swarm_master2_181
[192.168.1.182] swarm_master3_182
[192.168.1.183] swarm_node1_183
[192.168.1.184] swarm_node2_184
[192.168.1.185] swarm_node3_185
на них установлен docker swarm 3 мастера и 3 ноды.
на всех серверах правим /etc/hosts
192.168.1.180 swarm_master1_180
192.168.1.181 swarm_master2_181
192.168.1.182 swarm_master3_182
192.168.1.183 swarm_node1_183
192.168.1.184 swarm_node2_184
192.168.1.185 swarm_node3_185
ВАЖНО!!!!!!!! hostname у серверов должен совпадать с именами в /etc/hosts
также на всех серверах уже установлен docker.
vgcreate vg-ceph /dev/sdb
lvcreate -L 5G -n ceph vg-ceph
mkfs.ext4 -L ceph /dev/vg-ceph/ceph
http://onreader.mdl.ru/LearningCeph/content/index.html
adduser ceph
и группу
groupadd ceph
добавляем его в группу wheel
usermod -a -G wheel ceph
Пользователь дожен быть в следующих группах:
id ceph
uid=1002(ceph) gid=10(wheel) groups=10(wheel),1000(ceph)
и добавляем группу в sudo:
%wheel ALL=(ALL) NOPASSWD: ALL
ставим пароль на пользователя(на всех нодах)
passwd ceph
также можно добавить и просто пользователя ceph в sudo:
[spoiler]ceph ALL = (root) NOPASSWD:ALL
Defaults:ceph !requiretty
* в данном примере учетной записи ceph предоставлены права суперпользователя без необходимости повторного ввода пароля.
[/spoiler]
ставим пакеты:
yum install -y yum-plugin-priorities
yum install -y yum-utils
Добавляем репозиторий на каждую ноду
можем использовать данный репозиторий hammer:
[spoiler]
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-hammer/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
Но мы рекомендуем использовать репозиторий mimic
vim /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
* где rpm-mimic— LTS версия ceph, котрая будет корректно работать с lvm(версия ceph не менее 13.0.0(не путать с ceph-deploy)); el7 — релиз CentOS 7. Эти значения нужно заменить на другие, если используемые версии отличаются. Релиз Linux CentOS можно посмотреть командой uname -r, а актуальную версию Ceph по ссылке http://docs.ceph.com/docs/jewel/releases/
Примечание:
Обязательно должен быть включен репозиторий Centos Extras и epel.
[spoiler]
vim CentOS-Base.repo
#######################
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled = 1
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled = 1
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled = 1
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
##############################
vim epel.repo
#############################################
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
[/spoiler]
ВАЖНО !!!!!
[spoiler]Чтобы использовать разделы lvm необходима утилита ceph-volume, но она доступна только в более новых версиях ceph.
Если ceph уже установлен, его необходимо обновить. Заходим под пользователем ceph в директорию в которой инициировали кластер:
[ceph@node1 ceph-admin]$ pwd
/var/ceph-admin
Обновим мониторы:
Вы можете использовать ceph-deploy для адресации всех узлов монитора одновременно. Например
ceph-deploy install --release {release-name} ceph-node1[ ceph-node2]
ceph-deploy install --release hammer mon1 mon2 mon3
посмотреть все релизы/версии можно на офф сайте:
https://docs.ceph.com/docs/nautilus/releases/
[ceph@node1 ceph-admin]$ ceph-deploy install --release mimic node1 node2 node3
далее пойдёт инстал пакетов на все ноды.
после данной установки ceph-volume становится доступен.
[/spoiler]
Создаём директорию из которой будем запускать все команды:
[root@swarm_node1_183 ~]# mkdir /var/ceph-adminDIR
изменяем владельца
[root@swarm_node1_183 ~]# chown ceph:ceph /var/ceph-adminDIR/
---------
Производим установку ceph на всех нодах:
yum install ceph-deploy -y
yum install ceph-fuse -y
меняем имя репозитория на всех нодах:
mv /etc/yum.repos.d/ceph.repo /etc/yum.repos.d/ceph-deploy.repo
далее под пользователем ceph генерируем ssh ключи и копируем публичные на все ноды:
[root@swarm_node1_183 ~]# su - ceph
[ceph@swarm_node1_183 ~]$ cd /var/ceph-adminDIR/
[ceph@swarm_node1_183 ceph-adminDIR]$ ssh-keygen #здесь пароль не вводим
ssh-copy-id ceph@192.168.1.184
ssh-copy-id ceph@192.168.1.185
Создаем новый кластер:
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy new swarm_node1_183 swarm_node2_184 swarm_node3_185
если у вас в системе более 2 сетевых интерфейсов, и нужно указать какую подсеть использовать, то для этого добавляем в файл:
[ceph@swarm_node1_183 ceph-adminDIR]$ vim /var/ceph-adminDIR/ceph.conf
нашу подсеть:
public_network = 192.168.1.0/24
чтобы конфиг принял следующий вид:
[ceph@swarm_node1_183 ceph-adminDIR]$ cat /var/ceph-adminDIR/ceph.conf
fsid = 4e3f0791-34d7-4576-add4-ec632275fb3f
mon_initial_members = swarm_node1_183, swarm_node2_184, swarm_node3_185
mon_host = 192.168.1.183,192.168.1.184,192.168.1.185
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
public_network = 192.168.1.0/24
[/spoiler]
osd pool default size = 2 означает что 2 пула эт норм
Устанавливаем Ceph на все узлы кластера:
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy install swarm_node1_183 swarm_node2_184 swarm_node3_185
Создание и запуск мониторов. Выполним начальную настройку сервера монитора Ceph:
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy mon create-initial
если необходимо внести изменения в конфиг ceph.conf, то после изменения перезапускаем создание мониторов с обновлённым конфигом:
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy --overwrite-conf mon create swarm_node1_183 swarm_node2_184 swarm_node3_185
также можно использовать следующие команды чтобы только обновить конфигурационный файл:
ceph-deploy --overwrite-conf config push swarm_node1_183 swarm_node2_184 swarm_node3_185
ceph-deploy --overwrite-conf config push 192.168.1.183
Для того чтобы подготовить, развернуть и активировать OSD можно воспользоваться одной командой create
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy osd create --data vg-ceph/ceph swarm_node1_183
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy osd create --data vg-ceph/ceph swarm_node2_184
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy osd create --data vg-ceph/ceph swarm_node3_185
Добавим ноды в мониторинг
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy mon add swarm_node1_183
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy mon add swarm_node2_184
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy mon add swarm_node3_185
Скопируем ключи и конфигурационный файл на ноды:
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy admin swarm_node1_183 swarm_node2_184 swarm_node3_185
на всех нодах добавим права:
chmod +r /etc/ceph/ceph.client.admin.keyring
Добавим ceph-mgr (Manager daemon) — сервис который стал обязательным с версии Luminous
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy mgr create swarm_node1_183
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy mgr create swarm_node2_184
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy mgr create swarm_node3_185
После добавляем в автозагрузку на всех нодах:
systemctl enable ceph-mgr@*.service
и стартуем:
systemctl start ceph-mgr@*.service
Также запускаем:
systemctl start rbdmap.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
проверяем статус: [ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph status</strong> cluster: id: 4e3f0791-34d7-4576-add4-ec632275fb3f health: HEALTH_OK services: mon: 3 daemons, quorum swarm_node1_183,swarm_node2_184,swarm_node3_185 mgr: swarm_node1_183(active), standbys: swarm_node2_184, swarm_node3_185 osd: 3 osds: 3 up, 3 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 3.0 GiB used, 12 GiB / 15 GiB avail pgs: <span style="font-family: georgia, palatino, serif;">Проверяем статус OSD</span> [ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph osd status</strong> +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ | id | host | used | avail | wr ops | wr data | rd ops | rd data | state | +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ | 0 | swarm_node1_183 | 1025M | 4094M | 0 | 0 | 0 | 0 | exists,up | | 1 | swarm_node2_184 | 1025M | 4094M | 0 | 0 | 0 | 0 | exists,up | | 2 | swarm_node3_185 | 1025M | 4094M | 0 | 0 | 0 | 0 | exists,up | +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ |
Диски, доступные на сервере можно посмотреть следующей командой:
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy disk list swarm_node2_184
[spoiler]
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /bin/ceph-deploy disk list swarm_node2_184
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] debug : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] subcommand : list
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f6a6efe0cb0>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] host : ['swarm_node2_184']
[ceph_deploy.cli][INFO ] func : <function disk at 0x7f6a6f222938>
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] default_release : False
[swarm_node2_184][DEBUG ] connection detected need for sudo
[swarm_node2_184][DEBUG ] connected to host: swarm_node2_184
[swarm_node2_184][DEBUG ] detect platform information from remote host
[swarm_node2_184][DEBUG ] detect machine type
[swarm_node2_184][DEBUG ] find the location of an executable
[swarm_node2_184][INFO ] Running command: sudo fdisk -l
[swarm_node2_184][INFO ] Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
[swarm_node2_184][INFO ] Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
[swarm_node2_184][INFO ] Disk /dev/mapper/centos-root: 2147 MB, 2147483648 bytes, 4194304 sectors
[swarm_node2_184][INFO ] Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
[swarm_node2_184][INFO ] Disk /dev/mapper/centos-usr: 4999 MB, 4999610368 bytes, 9764864 sectors
[swarm_node2_184][INFO ] Disk /dev/mapper/centos-home: 1073 MB, 1073741824 bytes, 2097152 sectors
[swarm_node2_184][INFO ] Disk /dev/mapper/centos-var: 4999 MB, 4999610368 bytes, 9764864 sectors
[swarm_node2_184][INFO ] Disk /dev/mapper/vg--ceph-ceph: 5368 MB, 5368709120 bytes, 10485760 sectors
Проверим что каждый монитор подключился к кворуму:
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph mon stat
e1: 3 mons at {swarm_node1_183=192.168.1.183:6789/0,swarm_node2_184=192.168.1.184:6789/0,swarm_node3_185=192.168.1.185:6789/0}, election epoch 16, leader 0 swarm_node1_183, quorum 0,1,2 swarm_node1_183,swarm_node2_184,swarm_node3_185
Основная настройка закончилась теперь создадим POOL
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph osd pool create rbd 128 128
pool 'rbd' created
- менее 5 OSD - значение
pg_num
иpgp_num
ставим 128; - от 5 до 10 OSD - значение
pg_num
иpgp_num
ставим 512; - от 10 до 50 OSD - значение
pg_num
иpgp_num
ставим 4096;
чтобы после перезагрузки не выполняться команду
modprobe rbd
нужно создать файл
/etc/modules-load.d/rbd.conf с содержимым rbd
[ceph@swarm_node1_183 ceph-adminDIR]$ rbd pool init rbd
Посмотреть все пулы:
ceph osd lspools
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph osd lspools
1 rbd
[ceph@swarm_node1_183 ceph-adminDIR]$ rbd create swarm --size 1024 # команда для примера создания блочного устройства с именем swarm
modprobe rbd # запустить на каждой ноде, где стоит клиент ceph
Проверяем что данное устройство было создано:
[ceph@swarm_node1_183 ceph-adminDIR]$ rbd ls
swarm
[root@swarm_node2_184 ~]# rbd ls
swarm
[root@swarm_node3_185 ~]# rbd ls
swarm
посмотрим информацию о устройстве:
[ceph@swarm_node1_183 ceph-adminDIR]$ rbd info swarm
[spoiler]
1 2 3 4 5 6 7 8 9 10 |
rbd image '<strong>swarm</strong>': size <strong>1 GiB</strong> in 256 objects order 22 (4 MiB objects) id: 109a6b8b4567 block_name_prefix: rbd_data.109a6b8b4567 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten op_features: flags: create_timestamp: Wed Aug 21 16:41:16 2019 |
[/spoiler]
Остановить все демоны ceph:
systemctl stop ceph\*.service
systemctl stop ceph\*.target
Запустить все демоны ceph:
systemctl start ceph\*.service
systemctl start ceph\*.target
Также запускаем:
systemctl start rbdmap.service
Установка клиента Ceph
Если необходимо установить клиента на стороннем сервере, то на узле администратора используйте инструмент
ceph-deploy из папки кластера, чтобы установить ceph-client на только что созданной клиентской виртуальной машине.
(ПРЕДВАРИТЕЛЬНО необходимо добавить репозиторий и установить ceph)
добавляем пользователя ceph на все ноды
adduser ceph
groupadd ceph
добавляем его в группу wheel
usermod -a -G wheel ceph
id ceph
uid=1002(ceph) gid=10(wheel) groups=10(wheel),1000(ceph)
и добавляем группу в sudo:
%wheel ALL=(ALL) NOPASSWD: ALL
ставим пароль на пользователя(на всех нодах)
passwd ceph
ставим пакет:
yum install -y yum-plugin-priorities
yum install -y yum-utils
vim /etc/yum.repos.d/ceph-deploy.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
1 2 3 |
<span style="font-family: georgia, palatino, serif;">[root@swarm_master1_180 ~]# <strong>yum install ceph-deploy </strong></span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master2_181 ~]# <strong>yum install ceph-deploy </strong></span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master3_182 ~]# <strong>yum install ceph-deploy</strong></span> |
Теперь подключаемся к ноде с которой производилась установка кластера и под пользователем ceph
раскидываем на клиенты ssh ключи:
1 2 3 4 5 6 |
<span style="font-family: georgia, palatino, serif;">[ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ssh-copy-id ceph@192.168.1.180</strong></span> <span style="font-family: georgia, palatino, serif;">[ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ssh-copy-id ceph@192.168.1.181</strong></span> <span style="font-family: georgia, palatino, serif;">[ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ssh-copy-id ceph@192.168.1.182</strong></span> после переходим в директорию: <span style="font-family: georgia, palatino, serif;"><strong>/var/ceph-adminDIR</strong> и </span><span style="font-family: georgia, palatino, serif;">выполняем следующие команды для установки:</span> |
ceph-deploy install {client ip or hostname}
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy install swarm_master1_180
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy install swarm_master2_181
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy install swarm_master3_182
Теперь настройте клиент так, чтобы он мог подключаться к кластеру.
ceph-deploy admin {client ip or hostname}
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph-deploy admin swarm_master1_180 swarm_master2_181 swarm_master3_182
1 2 3 4 5 |
<span style="font-family: georgia, palatino, serif;">[root@swarm_master1_180 ~]# <strong>modprobe rbd</strong></span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master2_181 ~]# <strong>modprobe rbd</strong></span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master3_182 ~]# <strong>modprobe rbd </strong></span>проверяем наличие пула: |
1 2 3 4 5 6 7 8 9 10 |
<span style="font-family: georgia, palatino, serif;">[root@swarm_master1_180 ~]# <strong>rbd ls</strong></span> <span style="font-family: georgia, palatino, serif;">swarm</span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master2_181 ~]# <strong>rbd ls</strong></span> <span style="font-family: georgia, palatino, serif;">swarm</span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master3_182 ~]# <strong>rbd ls</strong></span> <span style="font-family: georgia, palatino, serif;">swarm Добавляем в <strong>/etc/fstab</strong> предварительно создав файл на всех нодах:</span> |
ceph-authtool -p /etc/ceph/ceph.client.admin.keyring > /etc/ceph/ceph.key
1 2 3 4 5 |
<span style="font-family: georgia, palatino, serif;"> swarm_node1_183:6789:/ /ceph ceph name=admin,secretkay=/etc/ceph/ceph.key,_netdev,noatime 0 0 swarm_node2_184:6789:/ /ceph ceph name=admin,secretkay=/etc/ceph/ceph.key,_netdev,noatime 0 0 swarm_node3_185:6789:/ /ceph ceph name=admin,secretkay=/etc/ceph/ceph.key,_netdev,noatime 0 0 </span> |
Установка ceph кластера для блочных устройств закончена.
========================================
Создание блочного устройства и монтирование в Docker
Ставим плагин Docker для работы с блочными устройствами(на все ноды)
docker plugin install rexray/rbd
1 2 3 4 5 6 7 8 9 |
<span style="font-family: georgia, palatino, serif;">[root@swarm_master1_180 ~]# docker plugin install rexray/rbd</span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master2_181 ~]# docker plugin install rexray/rbd</span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master3_182 ~]# docker plugin install rexray/rbd</span> <span style="font-family: georgia, palatino, serif;">[ceph@swarm_node1_183 ~]# docker plugin install rexray/rbd</span> <span style="font-family: georgia, palatino, serif;">[ceph@swarm_node2_184 ~]# docker plugin install rexray/rbd</span> <span style="font-family: georgia, palatino, serif;">[ceph@swarm_node3_185 ~]# docker plugin install rexray/rbd Смотрим, что плагин поставился и при необходимости включаем его</span> |
docker plugin ls
ID NAME DESCRIPTION ENABLED
b0550a38f1d2 rexray/rbd:latest REX-Ray for Ceph RBD false
Если отключен включаем
docker plugin enable rexray/rbd
проверяем:
1 2 3 4 5 6 7 8 |
[root@swarm_master1_180 ~]# <strong>docker plugin ls</strong> ID NAME DESCRIPTION ENABLED 11af5d998f7e rexray/rbd:latest REX-Ray for Ceph RBD <strong>true</strong> Создать volume можно следующей командой: <strong>docker volume create --driver rexray/rbd --name test</strong> <span style="font-family: georgia, palatino, serif;">Далее создаем volume на ceph для Docker </span> |
[root@swarm_node1_183 ~]# docker volume create -d rexray/rbd -o name=nginx -o monitors=swarm_node1_183:6789,swarm_node2_184:6789,swarm_node3_184:6789 -o mds_namespace=test
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@swarm_node1_183 ~]# <strong>docker volume ls</strong> DRIVER VOLUME NAME rexray/rbd:latest cephfs_data1 rexray/rbd:latest swarm [root@swarm_master1_180 ~]# <strong>docker volume ls</strong> DRIVER VOLUME NAME rexray/rbd:latest cephfs_data1 rexray/rbd:latest swarm [root@swarm_node1_183 ~]# <strong>docker volume inspect cephfs_data1 </strong> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[spoiler] [ { "CreatedAt": "0001-01-01T00:00:00Z", "Driver": "rexray/rbd:latest", "Labels": {}, "Mountpoint": "", "Name": "cephfs_data1", "Options": { "mds_namespace": "test", "monitors": "swarm_node1_183:6789,swarm_node2_184:6789,swarm_node3_184:6789", "name": "nginx" }, "Scope": "global", "Status": { "availabilityZone": "", "fields": null, "iops": 0, "name": "cephfs_data1", "server": "rbd", "service": "rbd", "size": 16, "type": "rbd" } } ] [/spoiler] |
1 2 3 4 |
как видим данный volume доступен на всех серверах. |
На любом из монитора Ceph можем посмотреть данный раздел командой
rbd info cephfs_data1
1 2 |
[root@swarm_master2_181 ~]# <strong>rbd info cephfs_data1 </strong> |
1 2 3 4 5 6 7 8 9 10 11 12 |
[spoiler] rbd image 'cephfs_data1': size 16 GiB in 4096 objects order 22 (4 MiB objects) id: 11046b8b4567 block_name_prefix: rbd_data.11046b8b4567 format: 2 features: layering op_features: flags: create_timestamp: Wed Aug 21 22:36:01 2019 [/spoiler] |
для проверки запускаем контейнер и прокидываем наш volume
[root@swarm_master1_180 ~]# docker container run -d --volume-driver rexray/rbd -v cephfs_data1:/data nginx
Здесь для ключа volume-driver мы указали поставленный нами плагин rexray/rbd, в качестве volume созданный нами cephfs_data1, data(можно указать tmp)-это куда будет монтироваться данный volume внутри контейнера, ну и собственно, nginx - сам docker-image.
Если контейнер запустился, то можем проверить всё ли корректно смонтировалось.
Для этого попробуем смонтировать созданный volume, как блочное устройство в файловую систему самого сервера(там где у нас стоит докер и запущен контейнер,
[root@swarm_master1_180 ~]# mount /dev/rbd/rbd/cephfs_data1 /mnt/
[root@swarm_master1_180 ~]# df -h | grep mnt
/dev/rbd0 16G 45M 15G 1% /mnt
Заходим в директорию /mnt/data и создаём файл.
[root@swarm_master1_180 ~]# cd /mnt/data/
[root@swarm_master1_180 data]# echo "WORK mother facker" > 1.txt
Далее заходим в сам контейнер и проверяем появился ли у нас созданный файл
1 2 3 4 5 6 7 8 9 |
[root@swarm_master1_180 ~]# <strong>docker ps</strong> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f92fd890001 nginx "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes 80/tcp exciting_rubin [root@swarm_master1_180 ~]# <strong>docker exec -ti 0f92fd890001 bash</strong> root@0f92fd890001:~# <strong>cat /data/1.txt</strong> WORK mother facker <span style="font-family: georgia, palatino, serif;">Видим созданный файл, для дальнейшей проверке нам необходимо остановить данный контейнер и запустить его на другой ноде:</span> |
1 2 |
<span style="font-family: georgia, palatino, serif;">[root@swarm_master1_180 ~]# <strong>docker stop 0f92fd890001</strong></span> <span style="font-family: georgia, palatino, serif;">[root@swarm_master1_180 ~]# <strong>docker rm 0f92fd890001</strong></span> |
и размонтируем блочное устройство
[root@swarm_master1_180 ~]# umount /mnt/
Запускаем контейнер и прокидываем volume в него:
[root@swarm_node1_183 ~]# docker container run -d --volume-driver rexray/rbd -v cephfs_data1:/data nginx
если при монтировании возникнет следующая ошибка:
[root@swarm_node1_183 ~]# docker container run -d --volume-driver rexray/rbd -v cephfs_data1:/data nginx
77e83366b2e4cda90e84c5acc97372dd685269d421685df8e5e58b1159474199
docker: Error response from daemon: error while mounting volume '': VolumeDriver.Mount: docker-legacy: Mount: cephfs_data1: failed: unable to map rbd.
то необходимо запустить следующую команду:
[root@swarm_node1_183 ~]# rbd map cephfs_data1
/dev/rbd0
запускаем контейнер командой выше и заходим в него:
1 2 3 |
[root@swarm_node1_183 ~]# <strong>docker ps</strong> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ded0a377759d nginx "nginx -g 'daemon of…" 33 seconds ago Up 30 seconds 80/tcp flamboyant_mendel |
1 2 3 4 5 6 7 8 9 10 11 |
<span style="font-family: georgia, palatino, serif;">[root@swarm_node1_183 ~]# <strong>docker exec -ti ded0a377759d bash</strong></span> <span style="font-family: georgia, palatino, serif;">root@ded0a377759d:/# <strong>cat /data/1.txt</strong></span> <span style="font-family: georgia, palatino, serif;">WORK mother facker </span>как мы видим, всё ОК вольюм сохраняется, и доступен со всех нод. <span style="font-family: georgia, palatino, serif;"><strong>ВАЖНО!!!!!!! volume с блочного устройства невозможно примонтировать к 2м контейнерам сразу ================================================= Возможные проблемы, если с кластером что то произошло и возникла ошибка: </strong></span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span style="font-family: georgia, palatino, serif;">[ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph -s</strong></span> <span style="font-family: georgia, palatino, serif;"> cluster:</span> <span style="font-family: georgia, palatino, serif;"> id: 4e3f0791-34d7-4576-add4-ec632275fb3f</span> <strong><span style="font-family: georgia, palatino, serif;"> health: HEALTH_WARN</span></strong> <span style="font-family: georgia, palatino, serif;"> Degraded data redundancy: 62/186 objects degraded (33.333%), 49 pgs degraded, 128 pgs undersized</span> <span style="font-family: georgia, palatino, serif;"> services:</span> <span style="font-family: georgia, palatino, serif;"> mon: 3 daemons, quorum swarm_node1_183,swarm_node2_184,swarm_node3_185</span> <span style="font-family: georgia, palatino, serif;"> mgr: swarm_node1_183(active), standbys: swarm_node2_184, swarm_node3_185</span> <span style="font-family: georgia, palatino, serif;"> osd: 3 osds: 2 up, 2 in</span> <span style="font-family: georgia, palatino, serif;"> data:</span> <span style="font-family: georgia, palatino, serif;"> pools: 1 pools, 128 pgs</span> <span style="font-family: georgia, palatino, serif;"> objects: 62 objects, 137 MiB</span> <span style="font-family: georgia, palatino, serif;"> usage: 2.3 GiB used, 7.7 GiB / 10 GiB avail</span> <span style="font-family: georgia, palatino, serif;"> pgs: 62/186 objects degraded (33.333%)</span> <span style="font-family: georgia, palatino, serif;"> 79 active+undersized</span> <span style="font-family: georgia, palatino, serif;"> 49 active+undersized+degraded</span> |
1 |
<span style="font-family: georgia, palatino, serif;"><strong> </strong></span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
[ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph osd tree</strong> ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.01469 root default -3 0.00490 host swarm_node1_183 0 hdd 0.00490 osd.0 <strong>down </strong> 0 1.00000 -5 0.00490 host swarm_node2_184 1 hdd 0.00490 osd.1 up 1.00000 1.00000 -7 0.00490 host swarm_node3_185 2 hdd 0.00490 osd.2 up 1.00000 1.00000 [ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph osd status</strong> +----+-----------------+-------+-------+--------+---------+--------+---------+----------------+ | id | host | used | avail | wr ops | wr data | rd ops | rd data | state | +----+-----------------+-------+-------+--------+---------+--------+---------+----------------+ | <strong>0 | | 0 | 0 | 0 | 0 | 0 | 0 | autoout,exists</strong> | | 1 | swarm_node2_184 | 1164M | 3955M | 0 | 0 | 0 | 0 | exists,up | | 2 | swarm_node3_185 | 1164M | 3955M | 0 | 0 | 0 | 0 | exists,up | +----+-----------------+-------+-------+--------+---------+--------+---------+----------------+ Поскольку данный OSD не работает, Ceph помечает этот OSD вышедшим из кластера в некоторый момент времени; по умолчанию, через 300 секунд. Если нет, мы можем сделать это вручную: [root@swarm_node1_183 ~]# <strong>ceph osd out osd.0</strong> osd.0 is already out. Удалим отказавший OSD из карты CRUSH: [root@swarm_node1_183 ~]# <strong>ceph osd crush rm osd.0</strong> removed item id 0 name 'osd.0' from crush map Уничтожим ключ аутентификации Ceph для этого OSD: [root@swarm_node1_183 ~]# <strong>ceph auth del osd.0</strong> updated Наконец, удалим этот OSD из кластера Ceph: [root@swarm_node1_183 ~]# <strong>ceph osd rm osd.0</strong> removed osd.0 Далее переходим под нашего пользователя: [root@swarm_node1_183 ~]# <strong>su - ceph</strong> Переходим в директорию откуда производилась установка: [ceph@swarm_node1_183 ~]$ <strong>cd /var/ceph-adminDIR/ </strong>Перед добавлением диска в кластер Ceph, выполним полное стирание (zap) диска: [ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph-deploy disk zap swarm_node1_183 vg-ceph/ceph </strong>Далее создаём монитор: [ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph-deploy --overwrite-conf mon create swarm_node1_183</strong> И производим установку: [ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph-deploy osd create --data vg-ceph/ceph swarm_node1_183</strong> Готово, проверяем доступность: |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
[ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph osd tree</strong> ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.01469 root default -3 0.00490 host swarm_node1_183 0 hdd 0.00490 osd.0 <strong>up </strong> 1.00000 1.00000 -5 0.00490 host swarm_node2_184 1 hdd 0.00490 osd.1 up 1.00000 1.00000 -7 0.00490 host swarm_node3_185 2 hdd 0.00490 osd.2 up 1.00000 1.00000 [ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph osd status</strong> +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ | id | host | used | avail | wr ops | wr data | rd ops | rd data | state | +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ | <strong>0 | swarm_node1_183 | 1165M | 3954M | 0 | 0 | 0 | 0 | exists,up</strong> | | 1 | swarm_node2_184 | 1165M | 3954M | 0 | 0 | 0 | 0 | exists,up | | 2 | swarm_node3_185 | 1165M | 3954M | 0 | 0 | 0 | 0 | exists,up | +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ [ceph@swarm_node1_183 ceph-adminDIR]$ <strong>ceph -s</strong> cluster: id: 4e3f0791-34d7-4576-add4-ec632275fb3f <strong>health: HEALTH_OK</strong> services: mon: 3 daemons, quorum swarm_node1_183,swarm_node2_184,swarm_node3_185 mgr: swarm_node3_185(active), standbys: swarm_node1_183, swarm_node2_184 osd: 3 osds: 3 up, 3 in data: pools: 1 pools, 128 pgs objects: 62 objects, 137 MiB usage: 3.4 GiB used, 12 GiB / 15 GiB avail pgs: 128 active+clean ================================== при наличии ошибки: |
7ff07f7fe700 0 -- 192.168.1.183:0/2751460566 >> 192.168.1.183:6804/1012 conn(0x7ff068005640 :-1 s=STATE_CONNECTING_WAIT_CONNECT_REPLY_AUTH pgs=0 cs=0 l=1).handle_connect_reply connect got BADAUTHORIZER
1 2 3 4 5 6 7 8 9 10 |
ceph osd status +----+------+-------+-------+--------+---------+--------+---------+-----------+ | id | host | used | avail | wr ops | wr data | rd ops | rd data | state | +----+------+-------+-------+--------+---------+--------+---------+-----------+ | 0 | | 0 | 0 | 0 | 0 | 0 | 0 | exists,up | | 1 | | 0 | 0 | 0 | 0 | 0 | 0 | exists,up | | 2 | | 0 | 0 | 0 | 0 | 0 | 0 | exists,up | +----+------+-------+-------+--------+---------+--------+---------+-----------+ необходимо произвести перезапуск: |
systemctl restart ceph.target
==============================
если необходимо удалить osd
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph osd out osd.3
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph osd down osd.3
[ceph@swarm_node1_183 ceph-adminDIR]$ sudo systemctl stop ceph-osd@3
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph osd rm osd.3
если статус DNE то:
1 2 3 4 5 6 7 8 9 10 |
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.01959 root default -3 0.00980 host swarm_node1_183 0 hdd 0.00490 osd.0 up 1.00000 1.00000 3 hdd 0.00490 osd.3 DNE 0 -5 0.00490 host swarm_node2_184 1 hdd 0.00490 osd.1 up 1.00000 1.00000 -7 0.00490 host swarm_node3_185 2 hdd 0.00490 osd.2 up 1.00000 1.00000 |
[ceph@swarm_node1_183 ceph-adminDIR]$ ceph osd crush rm osd.3
[root@swarm_node1_183 ~]# ceph auth list
[root@swarm_node1_183 ~]# ceph auth del osd.3