Ceph. Установка на одной ноде без репликации — различия между версиями

Материал из База знаний
Перейти к: навигация, поиск
(Новая страница: « == Подготовка системы == '''Обновление пакетов:''' <pre>yum -y update</pre> '''Синхронизация времени'''…»)
 
Строка 1: Строка 1:
 
+
[[category:Linux]]
 
== Подготовка системы ==
 
== Подготовка системы ==
  
Строка 114: Строка 114:
 
На этом этапе уже можно проверить статус кластера:
 
На этом этапе уже можно проверить статус кластера:
 
<pre>ceph status</pre>
 
<pre>ceph status</pre>
 +
 +
== Удаление кластера ==
 +
 +
В случае, если что-то пошло не так при деплое - можно удалить ceph c нод при помощи ceph-deploy:
 +
<pre>ceph-deploy purge {ceph-node} [{ceph-node}]
 +
ceph-deploy purgedata {ceph-node} [{ceph-node}]
 +
ceph-deploy forgetkeys
 +
rm ceph.*</pre>
  
 
== Создание OSD ==
 
== Создание OSD ==
Строка 121: Строка 129:
 
Деплой OSD на ноду:
 
Деплой OSD на ноду:
 
<pre>ceph-deploy osd create --data /dev/sdb ceph-kube </pre>
 
<pre>ceph-deploy osd create --data /dev/sdb ceph-kube </pre>
 +
 +
 +
== Ceph кластер из одной ноды ==
 +
В случае деплоя кластера на одну ноду без репликации (osd_pool_default_size = 1, osd_pool_default_min_size = 1) команда сeph status будет возвращать HEALTH: WARN и предупреждение, что в пулах хранится только одна реплика данных. Для отключения данного триггера необходимо прописать команду
 +
<pre>ceph config set global mon_warn_on_pool_no_redundancy false</pre>
 +
После перезагрузки кластера станет HEALTH: OK
  
 
== Установка дашборда ==
 
== Установка дашборда ==
Строка 184: Строка 198:
  
 
== Создание CephFS ==
 
== Создание CephFS ==
 
+
Создаем пулы для данных и метаданных
ceph osd pool create cephfs_data 32
+
<pre>ceph osd pool create cephfs_data 32
ceph osd pool create cephfs_metadata 32
+
ceph osd pool create cephfs_metadata 32</pre>
ceph fs new cephfs cephfs_metadata cephfs_data
+
Создаем файловую систему
ceph fs ls
+
<pre>ceph fs new cephfs cephfs_metadata cephfs_data</pre>
ceph auth get-or-create client.fsuser mon 'allow r' mds 'allow r, allow rw path=/data_path' osd 'allow rw pool=cephfs_data'
+
Убедимся, что cephfs создана. Команда
mkdir -p /mnt/cephfs
+
<pre>ceph fs ls</pre>
 +
Создаем пользователя  для доступа к cephfs.
 +
<pre>ceph auth get-or-create client.fsuser mon 'allow r' mds 'allow r, allow rw path=/data_path' osd 'allow rw pool=cephfs_data'</pre>
 +
Пользователь создан, ему выданы права чтение-запись на каталог /data_path, но сам каталог не создается  автоматически.
 +
Надо смонтировать корень cephfs с правами администратора и создать там каталог /data_path.
 +
<pre>mkdir -p /mnt/cephfs
 
mount.ceph 192.168.100.233:/ /mnt/cephfs -o name=admin,secret=`ceph auth get-key client.admin`
 
mount.ceph 192.168.100.233:/ /mnt/cephfs -o name=admin,secret=`ceph auth get-key client.admin`
mkdir -p /mnt/cephfs/data_path
+
mkdir -p /mnt/cephfs/data_path</pre>
 +
Получим и запомним ключ доступа клиента fsuser.
 +
<pre>ceph auth get-key client.fsuser</pre>
  
Монтирование CephFS
+
== Монтирование CephFS ==
mkdir -p /mnt/cephfs
+
Теперь переходим на сервер к которому хотим подключить сephfs.
mount.ceph 192.168.100.233:/data_path /mnt/cephfs -o name=fsuser,secret=AQCzdAZg9WfmLhAA1e3AcjfKYHUDfQ5uDKVaCA==
+
Сначала положим ключ доступа клиента fsuser в файл /etc/ceph/fsuser.secret.
 +
<pre>echo "<ключ доступа клиента fsuser>" >/etc/ceph/fsuser.secret</pre>
  
Автомонтирование CephFS
+
Монтируем каталог /data_path из cephfs с правами клиента fsuser.
mcedit /etc/ceph/fsuser.secret
+
<pre>mkdir -p /mnt/cephfs
#####
+
mount.ceph 192.168.100.233:/data_path /mnt/cephfs -o name=fsuser,secretfile=/etc/ceph/fsuser.secret</pre>
AQCzdAZg9WfmLhAA1e3AcjfKYHUDfQ5uDKVaCA==
 
#####
 
mcedit /etc/fstab
 
#####
 
192.168.100.233:/ /mnt/cephfs ceph name=fsuser,secretfile=/etc/ceph/fsuser.secret,_netdev,noatime 0 0
 
#####
 
  
  
== Полезные команды ==
+
== Автомонтирование CephFS ==
ceph status
 
ceph -s
 
ceph -w
 
ceph osd pool ls
 
ceph auth get-key client.user
 
ceph auth get-key client.fsuser
 
  
 +
Сначала убедимся, что у нас есть файл в котором лежит ключ доступа от пользователя fsuser
 +
<pre>cat /etc/ceph/fsuser.secret</pre>
  
удаление пула
+
Далее добавим запись в /etc/fstab (не забываем исправлять ip адреса серверов).
ceph tell mon.\* injectargs '--mon-allow-pool-delete=true'
+
<pre>echo "192.168.100.233:/ /mnt/cephfs ceph name=fsuser,secretfile=/etc/ceph/fsuser.secret,_netdev,noatime 0 0">>/etc/fstab</pre>
ceph osd pool delete kube kube --yes-i-really-really-mean-it
 
  
 +
== Полезные команды ==
 +
Состояние кластера
 +
<pre>ceph -s</pre>
 +
Просмотр состояния кластер с выводом сообщений лога на экран (полезно например, чтобы увидеть статус перебалансировки данных при изменении количества OSD)
 +
<pre>ceph -w</pre>
 +
Получение списка пулов
 +
<pre>ceph osd pool ls</pre>
 +
Получение ключей пользователей ceph
 +
<pre>ceph auth get-key client.user
 +
ceph auth get-key client.fsuser</pre>
 +
Детализованный вывод по пулам
 +
<pre>ceph osd dump | more</pre>
 +
Удаление пула (сперва разрешаем удаление, затем удаляем)
 +
<pre>ceph tell mon.\* injectargs '--mon-allow-pool-delete=true'
 +
ceph osd pool delete kube kube --yes-i-really-really-mean-it</pre>
 
Установка ceph-common на ubuntu
 
Установка ceph-common на ubuntu
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
+
<pre>wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
 
echo deb https://download.ceph.com/debian-nautilus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
 
echo deb https://download.ceph.com/debian-nautilus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
 
sudo apt update
 
sudo apt update
sudo apt install ceph-common
+
sudo apt install ceph-common</pre>
 +
 
 +
== Материалы ==
  
ceph-deploy purge {ceph-node} [{ceph-node}]
+
<pre>https://ralph.blog.imixs.com/2020/02/28/howto-install-ceph-on-centos-7/
ceph-deploy purgedata {ceph-node} [{ceph-node}]
+
https://www.dmosk.ru/instruktions.php?object=ceph-centos7</pre>
ceph-deploy forgetkeys
 
rm ceph.*
 

Версия 10:07, 19 января 2021

Подготовка системы

Обновление пакетов:

yum -y update

Синхронизация времени

Для корректной работы Ceph требуется, чтобы на нодах кластера было одинаковое время, поэтому на всех серверах настраиваем синхронизацию последнего.

yum -y install ntp python2-pip.noarch
systemctl enable ntpd
systemctl start ntpd

Задаем временную зону:

cp /usr/share/zoneinfo/Asia/Novosibirsk /etc/localtime

Настройки файрвола

Отключаем firewalld и SELinux

systemctl stop firewalld
systemctl disable firewalld

mcedit /etc/selinux/config
SELINUX=disabled

Имя хоста должно совпадать с доменным именем

hostnamectl set-hostname ceph-kube/ceph-deployer

Устанавливаем необходимые пакеты

yum -y install epel-release
yum -y install mc net-tools htop

Создание пользователя и доступа по ключу

Создаем пользователя ceph на всех нодах кластера

useradd ceph -m
passwd ceph

У созданной учетной записи должны быть привилегии суперпользователя. Для этого добавляем в файл /etc/sudoers.d/ceph:

ceph ALL = (root) NOPASSWD:ALL
Defaults:ceph !requiretty

Задаем следующие права:

chmod 0440 /etc/sudoers.d/ceph

Заходим в систему под учетной записью ceph:

su - ceph

Генерируем ключ следующей командой и копируем на ноды будущего кластера:

ssh-keygen
ssh-copy-id ceph@ceph-kube


Подготовка ceph-deploy

Настраиваем репозиторий

sudo rpm --import 'https://download.ceph.com/keys/release.asc'

Файл /etc/yum.repos.d/ceph.repo приводим к виду:

[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-nautilus/el7/$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-nautilus/el7//noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-nautilus/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

Устанавливаем ceph-deploy

yum -y install ceph-deploy

Создаем папку, в которой будут храниться логи, конфиги деплоя и прочее

mkdir ceph-cluster
cd ceph-cluster

Создаем файлы конфигурации командой

ceph-deploy new ceph-kube

В результате в директории ceph-cluster появится файл ceph.conf, в который необходимо добавить параметры кластера, отличающиеся от дефолтных. В частности ниже пример ceph.conf для одной ноды без репликации

[global]
fsid = 9564dca4-b183-43bb-8469-f74e33537580
mon_initial_members = ceph-kube
mon_host = 192.168.10.171
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 1
osd_pool_default_min_size = 1
osd_pool_default_pgp_num = 128
osd_pool_default_pg_num = 128

Деплой кластера

Устанавливаем необходимые пакеты на ноды

ceph-deploy install --release nautilus ceph-kube

Деплой мониторов (указанных в ceph.conf)и сбор ключей кластера

ceph-deploy mon create-initial

Копирование конфигурационных файлов и ключа администратора ceph на ноды:

ceph-deploy admin ceph-kube

Деплой демона MGR (обязателен для версий luminous и выше)

ceph-deploy mgr create ceph-kube

Деплой демонов метаданных

ceph-deploy mds create ceph-kube

На этом этапе уже можно проверить статус кластера:

ceph status

Удаление кластера

В случае, если что-то пошло не так при деплое - можно удалить ceph c нод при помощи ceph-deploy:

ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*

Создание OSD

Следующей командой можно получить список дисков на ноде

ceph-deploy disk list ceph-kube

Деплой OSD на ноду:

ceph-deploy osd create --data /dev/sdb ceph-kube 


Ceph кластер из одной ноды

В случае деплоя кластера на одну ноду без репликации (osd_pool_default_size = 1, osd_pool_default_min_size = 1) команда сeph status будет возвращать HEALTH: WARN и предупреждение, что в пулах хранится только одна реплика данных. Для отключения данного триггера необходимо прописать команду

ceph config set global mon_warn_on_pool_no_redundancy false

После перезагрузки кластера станет HEALTH: OK

Установка дашборда

yum -y install ceph-mgr-dashboard
ceph mgr module enable dashboard
ceph dashboard create-self-signed-cert
ceph dashboard ac-user-create <username> <password> administrator

Дашборд будет доступен по адресу https://ceph-kube:8443

Создание RBD

Команды выполняем на любой ноде кластера. Создаем пул:

ceph osd pool create kube 32 erasure

Теперь создадим пользователя, дадим ему права на доступ к пулу и сохраним ключ доступа в файл

ceph auth get-or-create client.user mon 'allow r, allow command "osd blacklist"' osd 'allow rwx pool=kube' | tee /etc/ceph/ceph.client.user.keyring

Создадим диск в пуле:

rbd create disk1 --size 2G --pool kube

Подключение RBD

На клиенте устанавливаем необходимые пакеты

yum -y install centos-release-ceph-nautilus
yum -y install ceph-common

Создадим файл конфигурации. В котором укажем IP адреса серверов. На которых запущен демон MON

cat << EOF >/etc/ceph/ceph.conf
mon host = 192.168.100.233
EOF

Убедитесь, что на сервере master-1.s000002 есть файл /etc/ceph/ceph.client.user.keyring c ключом клиента user. В случае отсутствия его необходимо скопировать с любой из нод

cat /etc/ceph/ceph.client.user.keyring

Теперь попробуем map'ить диск на сервере (подключить как блочное устройство)

rbd map disk1 --pool kube --id user

Вы должны получить сообщение о том, что набор возможностей образа RBD не поддерживается ядром и надо отключить часть feature.

rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable kube/disk1 object-map fast-diff deep-flatten".

Вводим команду из сообщения, чтобы отключить не поддерживаемые feature.

rbd feature disable kube/disk1 object-map fast-diff deep-flatten --id user

И map'им диск снова, создаем файловую систему и монтируем

rbd map disk1 --pool kube --id user
mkfs.xfs /dev/rbd0
mkdir -p /mnt/disk1 
mount /dev/rbd/kube/disk1 /mnt/disk1

Автомонтирование RBD

Внесите в файл /etc/ceph/rbdmap информацию о блочных устройствах, которые надо подключать при загрузке.

echo "kube/disk1 id=user,keyring=/etc/ceph/ceph.client.user.keyring" >> /etc/ceph/rbdmap

Включаем автозапуск скрипта rbdmap.

systemctl enable rbdmap
systemctl start rbdmap

Добавляем монтирование файловой системы блочного устройства в /etc/fstab.

echo "/dev/rbd/kube/disk1 /mnt/disk1 ext4 noauto,noatime 0 0" >>/etc/fstab

Перезагрузите сервер, введите команду mount или df и убедитесь, что смонтирован только disk1 из пула kube.


Изменение размера RBD диска

Изменяем размер RBD выполнив команду на любой из нод кластера

bd resize disk1 --size 6G --pool kube

С ноды, куда примонтирован диск производим расширение файловой системы:

dmesg | grep -i capacity
xfs_growfs -d /mnt/disk1/

Создание CephFS

Создаем пулы для данных и метаданных

ceph osd pool create cephfs_data 32
ceph osd pool create cephfs_metadata 32

Создаем файловую систему

ceph fs new cephfs cephfs_metadata cephfs_data

Убедимся, что cephfs создана. Команда

ceph fs ls

Создаем пользователя для доступа к cephfs.

ceph auth get-or-create client.fsuser mon 'allow r' mds 'allow r, allow rw path=/data_path' osd 'allow rw pool=cephfs_data'

Пользователь создан, ему выданы права чтение-запись на каталог /data_path, но сам каталог не создается автоматически. Надо смонтировать корень cephfs с правами администратора и создать там каталог /data_path.

mkdir -p /mnt/cephfs
mount.ceph 192.168.100.233:/ /mnt/cephfs -o name=admin,secret=`ceph auth get-key client.admin`
mkdir -p /mnt/cephfs/data_path

Получим и запомним ключ доступа клиента fsuser.

ceph auth get-key client.fsuser

Монтирование CephFS

Теперь переходим на сервер к которому хотим подключить сephfs. Сначала положим ключ доступа клиента fsuser в файл /etc/ceph/fsuser.secret.

echo "<ключ доступа клиента fsuser>" >/etc/ceph/fsuser.secret

Монтируем каталог /data_path из cephfs с правами клиента fsuser.

mkdir -p /mnt/cephfs
mount.ceph 192.168.100.233:/data_path /mnt/cephfs -o name=fsuser,secretfile=/etc/ceph/fsuser.secret


Автомонтирование CephFS

Сначала убедимся, что у нас есть файл в котором лежит ключ доступа от пользователя fsuser

cat /etc/ceph/fsuser.secret

Далее добавим запись в /etc/fstab (не забываем исправлять ip адреса серверов).

echo "192.168.100.233:/ /mnt/cephfs ceph name=fsuser,secretfile=/etc/ceph/fsuser.secret,_netdev,noatime 0 0">>/etc/fstab

Полезные команды

Состояние кластера

ceph -s

Просмотр состояния кластер с выводом сообщений лога на экран (полезно например, чтобы увидеть статус перебалансировки данных при изменении количества OSD)

ceph -w

Получение списка пулов

ceph osd pool ls

Получение ключей пользователей ceph

ceph auth get-key client.user
ceph auth get-key client.fsuser

Детализованный вывод по пулам

ceph osd dump | more

Удаление пула (сперва разрешаем удаление, затем удаляем)

ceph tell mon.\* injectargs '--mon-allow-pool-delete=true'
ceph osd pool delete kube kube --yes-i-really-really-mean-it

Установка ceph-common на ubuntu

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian-nautilus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt update
sudo apt install ceph-common

Материалы

https://ralph.blog.imixs.com/2020/02/28/howto-install-ceph-on-centos-7/
https://www.dmosk.ru/instruktions.php?object=ceph-centos7