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

Материал из База знаний
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
== Подготовка системы ==
 
== Подготовка системы ==
  
'''Обновление пакетов:'''
+
Обновление пакетов:
 
<pre>yum -y update</pre>
 
<pre>yum -y update</pre>
 
'''Синхронизация времени'''
 
  
 
Для корректной работы Ceph требуется, чтобы на нодах кластера было одинаковое время, поэтому на всех серверах настраиваем синхронизацию последнего.
 
Для корректной работы Ceph требуется, чтобы на нодах кластера было одинаковое время, поэтому на всех серверах настраиваем синхронизацию последнего.
Строка 16: Строка 14:
  
 
== Настройки файрвола ==
 
== Настройки файрвола ==
 +
 
Отключаем firewalld и SELinux
 
Отключаем firewalld и SELinux
 
<pre>systemctl stop firewalld
 
<pre>systemctl stop firewalld
Строка 24: Строка 23:
  
 
Имя хоста должно совпадать с доменным именем
 
Имя хоста должно совпадать с доменным именем
<pre>hostnamectl set-hostname ceph-kube/ceph-deployer</pre>
+
<pre>hostnamectl set-hostname ceph-node</pre>
  
 
Устанавливаем необходимые пакеты
 
Устанавливаем необходимые пакеты
Строка 47: Строка 46:
 
Генерируем ключ следующей командой и копируем на ноды будущего кластера:
 
Генерируем ключ следующей командой и копируем на ноды будущего кластера:
 
<pre>ssh-keygen
 
<pre>ssh-keygen
ssh-copy-id ceph@ceph-kube</pre>
+
ssh-copy-id ceph@ceph-node</pre>
  
 +
== Подготовка ceph-deploy ==
  
== Подготовка ceph-deploy ==
 
 
Настраиваем репозиторий
 
Настраиваем репозиторий
 
<pre>sudo rpm --import 'https://download.ceph.com/keys/release.asc'</pre>
 
<pre>sudo rpm --import 'https://download.ceph.com/keys/release.asc'</pre>
Строка 85: Строка 84:
  
 
Создаем файлы конфигурации командой
 
Создаем файлы конфигурации командой
<pre>ceph-deploy new ceph-kube</pre>
+
<pre>ceph-deploy new ceph-node</pre>
 
В результате в директории ceph-cluster появится файл ceph.conf, в который необходимо добавить параметры кластера, отличающиеся от дефолтных.
 
В результате в директории ceph-cluster появится файл ceph.conf, в который необходимо добавить параметры кластера, отличающиеся от дефолтных.
 
В частности ниже пример ceph.conf для одной ноды без репликации
 
В частности ниже пример ceph.conf для одной ноды без репликации
Строка 91: Строка 90:
 
<pre>[global]
 
<pre>[global]
 
fsid = 9564dca4-b183-43bb-8469-f74e33537580
 
fsid = 9564dca4-b183-43bb-8469-f74e33537580
mon_initial_members = ceph-kube
+
mon_initial_members = ceph-node
 
mon_host = 192.168.10.171
 
mon_host = 192.168.10.171
 
auth_cluster_required = cephx
 
auth_cluster_required = cephx
Строка 103: Строка 102:
 
== Деплой кластера ==
 
== Деплой кластера ==
 
Устанавливаем необходимые пакеты на ноды
 
Устанавливаем необходимые пакеты на ноды
<pre>ceph-deploy install --release nautilus ceph-kube</pre>
+
<pre>ceph-deploy install --release nautilus ceph-node</pre>
 
Деплой мониторов (указанных в ceph.conf)и сбор ключей кластера
 
Деплой мониторов (указанных в ceph.conf)и сбор ключей кластера
 
<pre>ceph-deploy mon create-initial</pre>
 
<pre>ceph-deploy mon create-initial</pre>
 
Копирование конфигурационных файлов и ключа администратора ceph на ноды:
 
Копирование конфигурационных файлов и ключа администратора ceph на ноды:
<pre>ceph-deploy admin ceph-kube</pre>
+
<pre>ceph-deploy admin ceph-node</pre>
 
Деплой демона MGR (обязателен для версий luminous и выше)
 
Деплой демона MGR (обязателен для версий luminous и выше)
<pre>ceph-deploy mgr create ceph-kube</pre>
+
<pre>ceph-deploy mgr create ceph-node</pre>
 
Деплой демонов метаданных
 
Деплой демонов метаданных
<pre>ceph-deploy mds create ceph-kube</pre>
+
<pre>ceph-deploy mds create ceph-node</pre>
 
На этом этапе уже можно проверить статус кластера:
 
На этом этапе уже можно проверить статус кластера:
 
<pre>ceph status</pre>
 
<pre>ceph status</pre>
Строка 126: Строка 125:
  
 
Следующей командой можно получить список дисков на ноде
 
Следующей командой можно получить список дисков на ноде
<pre>ceph-deploy disk list ceph-kube</pre>
+
<pre>ceph-deploy disk list ceph-node</pre>
 
Деплой OSD на ноду:
 
Деплой OSD на ноду:
<pre>ceph-deploy osd create --data /dev/sdb ceph-kube </pre>
+
<pre>ceph-deploy osd create --data /dev/sdb ceph-node </pre>
  
  
Строка 142: Строка 141:
 
ceph dashboard create-self-signed-cert
 
ceph dashboard create-self-signed-cert
 
ceph dashboard ac-user-create <username> <password> administrator</pre>
 
ceph dashboard ac-user-create <username> <password> administrator</pre>
Дашборд будет доступен по адресу https://ceph-kube:8443
+
Дашборд будет доступен по адресу https://ceph-node:8443
  
 
== Создание RBD ==
 
== Создание RBD ==
Строка 160: Строка 159:
 
Создадим файл конфигурации. В котором укажем IP адреса серверов. На которых запущен демон MON
 
Создадим файл конфигурации. В котором укажем IP адреса серверов. На которых запущен демон MON
 
<pre>cat << EOF >/etc/ceph/ceph.conf
 
<pre>cat << EOF >/etc/ceph/ceph.conf
mon host = 192.168.100.233
+
mon host = <node-ipaddress>
 
EOF</pre>
 
EOF</pre>
 
Убедитесь, что на сервере master-1.s000002 есть файл /etc/ceph/ceph.client.user.keyring c ключом клиента user. В случае отсутствия его необходимо скопировать с любой из нод  
 
Убедитесь, что на сервере master-1.s000002 есть файл /etc/ceph/ceph.client.user.keyring c ключом клиента user. В случае отсутствия его необходимо скопировать с любой из нод  
Строка 210: Строка 209:
 
Надо смонтировать корень cephfs с правами администратора и создать там каталог /data_path.
 
Надо смонтировать корень cephfs с правами администратора и создать там каталог /data_path.
 
<pre>mkdir -p /mnt/cephfs
 
<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 <node-ipaddress>:/ /mnt/cephfs -o name=admin,secret=`ceph auth get-key client.admin`
 
mkdir -p /mnt/cephfs/data_path</pre>
 
mkdir -p /mnt/cephfs/data_path</pre>
 
Получим и запомним ключ доступа клиента fsuser.
 
Получим и запомним ключ доступа клиента fsuser.
Строка 222: Строка 221:
 
Монтируем каталог /data_path из cephfs с правами клиента fsuser.
 
Монтируем каталог /data_path из cephfs с правами клиента fsuser.
 
<pre>mkdir -p /mnt/cephfs
 
<pre>mkdir -p /mnt/cephfs
mount.ceph 192.168.100.233:/data_path /mnt/cephfs -o name=fsuser,secretfile=/etc/ceph/fsuser.secret</pre>
+
mount.ceph <node-ipaddress>:/data_path /mnt/cephfs -o name=fsuser,secretfile=/etc/ceph/fsuser.secret</pre>
  
  
Строка 231: Строка 230:
  
 
Далее добавим запись в /etc/fstab (не забываем исправлять ip адреса серверов).
 
Далее добавим запись в /etc/fstab (не забываем исправлять ip адреса серверов).
<pre>echo "192.168.100.233:/ /mnt/cephfs ceph name=fsuser,secretfile=/etc/ceph/fsuser.secret,_netdev,noatime 0 0">>/etc/fstab</pre>
+
<pre>echo "<node-ipaddress>:/ /mnt/cephfs ceph name=fsuser,secretfile=/etc/ceph/fsuser.secret,_netdev,noatime 0 0">>/etc/fstab</pre>
  
 
== Полезные команды ==
 
== Полезные команды ==

Версия 10:11, 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-node

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

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-node

Подготовка 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-node

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

[global]
fsid = 9564dca4-b183-43bb-8469-f74e33537580
mon_initial_members = ceph-node
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-node

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

ceph-deploy mon create-initial

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

ceph-deploy admin ceph-node

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

ceph-deploy mgr create ceph-node

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

ceph-deploy mds create ceph-node

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

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-node

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

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


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-node: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 = <node-ipaddress>
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 <node-ipaddress>:/ /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 <node-ipaddress>:/data_path /mnt/cephfs -o name=fsuser,secretfile=/etc/ceph/fsuser.secret


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

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

cat /etc/ceph/fsuser.secret

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

echo "<node-ipaddress>:/ /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