Установка и настройка Ceph. Подключение дисков Rados Block Device и CephFS.
Ceph является проектом с открытым кодом, который предоставляет определяемые программным обеспечением унифицированные решения для хранения данных. Ceph является распределенной системой хранения, которая является массивно масштабируемой и высокопроизводительной и при этом не имеет единой точки отказа. С самого начала она разрабатывалась для высокой масштабируемости, до уровней эксабайт и выше, при работе на общеупотребимых аппаратных средствах.
Подробно о внутренней Кухне CEPH
Подробно о внутренней Кухне CEPH
Подготовка
если у вас Firewalld:
firewall-cmd --permanent --add-port=6789/tcp
firewall-cmd --permanent --add-port=6800-7100/tcp
если у вас IPTables:
sed -i "/-A INPUT -i lo -j ACCEPT/a # CEPH\n-A INPUT -m state --state NEW -m tcp -p tcp --dport 6800:7100 -j ACCEPT\n-A INPUT -m state --state NEW -m tcp -p tcp --dport 6789 -j ACCEPT" /etc/sysconfig/iptables
useradd ceph -m
passwd ceph
rm -rf /etc/sudoers.d/ceph; echo -e "ceph ALL = (root) NOPASSWD:ALL\nDefaults:ceph \!requiretty" >> /etc/sudoers.d/ceph; chmod 0440 /etc/sudoers.d/ceph
vi /etc/sudoers.d/ceph
ceph ALL = (root) NOPASSWD:ALL
Defaults:ceph !requiretty
или
Defaults:ceph !requiretty
или
vi /etc/hosts
192.168.0.10 server1.river.ru
192.168.0.11 server2.river.ru
192.168.0.12 server3.river.ru
или
echo -e "172.16.198.231 server1.river.ru\n172.16.198.231 server1.river.ru\n172.16.198.232 server2.river.ru\n172.16.198.232 server2\n172.16.198.233 server3.river.ru\n172.16.198.233 server3\n" >> /etc/hosts
192.168.0.11 server2.river.ru
192.168.0.12 server3.river.ru
или
echo -e "172.16.198.231 server1.river.ru\n172.16.198.231 server1.river.ru\n172.16.198.232 server2.river.ru\n172.16.198.232 server2\n172.16.198.233 server3.river.ru\n172.16.198.233 server3\n" >> /etc/hosts
vi /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
* где jewel — LTS версия ceph; el7 — релиз CentOS 7. Эти значения нужно заменить на другие, если используемые версии отличаются. Релиз Linux CentOS можно посмотреть командой uname -r, а актуальную версию Ceph по ссылке http://docs.ceph.com/docs/jewel/releases/
luminous/el7/
luminous/el7/
Установка Ceph
yum -y update
yum -y install ceph-deploy
mv /etc/yum.repos.d/ceph.repo /etc/yum.repos.d/ceph-deploy.repo
(для устранения ошибки
[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph')
На Сервере1
[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph')
На Сервере1
su - ceph
ssh-keygen
Enter, Enter, Enter ....
копируем ключ на все сервера
Enter, Enter, Enter ....
копируем ключ на все сервера
ssh-copy-id -i ceph@server1.river.ru
ssh-copy-id -i ceph@server2.river.ru
ssh-copy-id -i ceph@server3.river.ru
Директория для работы
mkdir ceph-admin;cd ceph-admin
Созадание кластера
ceph-deploy new server1.river.ru server2.river.ru server3.river.ru
ceph-deploy gatherkeys server1.river.ru server2.river.ru server3.river.ru
ceph-deploy gatherkeys server1.river.ru server2.river.ru server3.river.ru
ceph-deploy install server1.river.ru server2.river.ru server3.river.ru
Обновляем до последней версии ceph
ssh ceph@server1.river.ru 'sudo yum update -y';ssh ceph@server2.river.ru 'sudo yum update -y';ssh ceph@server3.river.ru 'sudo yum update -y'
Инициализация сервера монитора
ceph-deploy mon create-initial
Просмотр дисков на сервере
ceph-deploy disk list server1.river.ru
Подготовка дисков
ceph-deploy osd prepare server1.river.ru:sdb server2.river.ru:sdb server3.river.ru:sdb
Активация дисков
ceph-deploy osd activate server1.river.ru:sdb1 server2.river.ru:sdb1 server3.river.ru:sdb1
Инициализация демона MDS - метаданных для CephFS
ceph-deploy mds create server1.river.ru server2.river.ru
Создание 2х пулов на MDS узле и активация МетаДата Сервера
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128
ceph fs new datafs cephfs_metadata cephfs_data
Развернуть дополнительный MDS standby
sudo ceph-deploy mds create ceph02
Удалить дополнительный MDS standby пока невозможно, согласно оф.документации.
Но можно сделать так.
Удаление CephFS и связанных с ней пулов
Для каждого демона начиная с резервных:- переводим демон в режим fail:
ceph mds fail 0
- останавливаем демон на ноде системными средствами
systemctl stop ceph-mds@lv-s-ceph08.service
- Удаляем папку с данными демона на ноде. По умолчанию данные демонов MDS лежат в /var/lib/ceph/mds/cluster_name-node_name/ .
rm -rf /var/lib/ceph/mds/ceph-lv-s-ceph08/
ceph fs rm datafs --yes-i-really-mean-itПосле этого можно удалить пулы которые использовались для работы файловой системы:
ceph osd pool rm cephfs_data cephfs_data --yes-i-really-really-mean-it
ceph osd pool rm cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
Просмотр статусов
Правка правsudo chmod +r /etc/ceph/ceph.client.admin.keyring
Просмотр состояния дисков
ceph osd tree
Просмотр состояния кластера
ceph -s
cluster 91507cd6-5f63-4478-9ae1-0c2e8955bcd6
health HEALTH_OK
monmap e2: 3 mons at {ceph01=172.16.16.221:6789/0,ceph02=172.16.16.222:6789/0,ceph03=172.16.16.223:6789/0}
election epoch 20, quorum 0,1,2 ceph01,ceph02,ceph03
fsmap e9: 1/1/1 up {0=ceph01.int.lv.cox.ru=up:active}, 2 up:standby
osdmap e37: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v19725: 320 pgs, 3 pools, 55264 kB data, 12855 objects
555 MB used, 30098 MB / 30653 MB avail
320 active+clean
monmap e2: 3 mons
- Работает 3 демона монитора
fsmap ...{0=ceph01.int.lv.cox.ru=up:active}, 1 up:standby
- 1 демон MDS активный и одни standby
osdmap e37: 3 osds:
- 3 демона osd
Подключение диска Block Device (rbd)
www.server-world.infoНа Сервер1
ceph-deploy install client.river.ru
ceph-deploy admin client.river.ru
На Клиенте
chmod 644 /etc/ceph/ceph.client.admin.keyring
rbd create rbddisk01--size 10240 (10Гб)
rbd ls -lrbd map rbddisk01
rbd showmapped
mkfs.ext4 /dev/rbd0
mkdir /mnt/rbddisk01
mount /dev/rbd0 /mnt/rbddisk01
Подключение диска CephFS
www.server-world.infossh ceph@server1.river.ru "sudo ceph-authtool -p /etc/ceph/ceph.client.admin.keyring" > admin.key
mount -t ceph server1.river.ru:6789:/ /mnt -o name=admin,secretfile=admin.key
либо через fstab
vi /etc/fstab
добавить строку
server1.river.ru, server2.river.ru:/ /opt/cox/fs ceph name=admin,secretfile=/etc/ceph/ceph.key,noatime,_netdev 0 2
*_netdev - чтобы монтирование прошло после подъёма сети.
Команды
ceph df
ceph osd stat
ceph osd dump
ceph osd tree
ceph mds stat
ceph fs dump
MDS Failover варианты
Правка ceph.conf
На админской машине
su - ceph
vi ~/ceph-admin/ceph.conf
[mon]
mon clock drift allowed = 2
mon host = server1,server3,server3
mon addr = 192.168.0.10:6789,192.168.0.11:6789,192.168.0.12:6789
[mon.a]
host = server1
mon addr = 192.168.0.10:6789
[mon.b]
host = server2
mon addr = 192.168.0.11:6789
[mon.c]
host = server3
mon addr = 192.168.0.12:6789
[osd]
[osd.0]
host = server1
osd data = /mnt/disk1/
osd journal = /mnt/disk1/journal
[osd.1]
host = server2
osd data = /mnt/disk1/
osd journal = /mnt/disk1/journal
[osd.2]
host = server3
osd data = /mnt/disk1/
osd journal = /mnt/disk1/journal
mon clock drift allowed = 2
mon host = server1,server3,server3
mon addr = 192.168.0.10:6789,192.168.0.11:6789,192.168.0.12:6789
[mon.a]
host = server1
mon addr = 192.168.0.10:6789
[mon.b]
host = server2
mon addr = 192.168.0.11:6789
[mon.c]
host = server3
mon addr = 192.168.0.12:6789
[osd]
[osd.0]
host = server1
osd data = /mnt/disk1/
osd journal = /mnt/disk1/journal
[osd.1]
host = server2
osd data = /mnt/disk1/
osd journal = /mnt/disk1/journal
[osd.2]
host = server3
osd data = /mnt/disk1/
osd journal = /mnt/disk1/journal
Тиражирование конфигурации среди узлов Кластера
ceph-deploy --overwrite-conf config push server1 server2 server3
Также желательно на админской машине
vi ~/.ssh/config
Host server1
Hostname server1.river.ru
IdentityFile /home/ceph/.ssh/id_rsa
User ceph
Host ceph2
Hostname ceph2.intra.net
IdentityFile /home/ceph/.ssh/id_rsa
User ceph
Host server2
Hostname server2.river.ru
IdentityFile /home/ceph/.ssh/id_rsa
User ceph
Host server3
Hostname server3.river.ru
IdentityFile /home/ceph/.ssh/id_rsa
User ceph
vasilisc.com Preflight
Добавление новых нод и OSD демонов
ceph-deploy install server4.river.ru
ceph-deploy --overwrite-conf osd prepare server4:/SDB
ceph-deploy --overwrite-conf osd activate server4:/SDB
ceph-deploy --overwrite-conf osd activate server4:/SDB
vasilisc.com osd
docs.ceph.com Add/Remove OSDs
sudo systemctl start ceph.target
Остановка
sudo systemctl stop ceph.target
Рестарт
sudo systemctl stop ceph.target;sudo systemctl start ceph.target
Статус
sudo systemctl status ceph.target
docs.ceph.com - Operating a Cluster
/usr/bin/systemctl enable ceph-osd@2
отключаем автоматическое обновление карты
osd_crush_update_on_start = false
docs.ceph.com Add/Remove OSDs
Остановка, Старт, Рестарт кластера Ceph
Cтартsudo systemctl start ceph.target
Остановка
sudo systemctl stop ceph.target
Рестарт
sudo systemctl stop ceph.target;sudo systemctl start ceph.target
Статус
sudo systemctl status ceph.target
docs.ceph.com - Operating a Cluster
/usr/bin/systemctl enable ceph-osd@2
Правка Crush-Карты Ceph
В ~/ceph-admin/ceph.confотключаем автоматическое обновление карты
osd_crush_update_on_start = false
Достаём карту
ceph osd getcrushmap -o map.running
Декомпилируем
crushtool -d map.running -o map.decompile
После правки компилируем
crushtool -c map.decompile -o map.new
И отправлем карту в Ceph
ceph osd setcrushmap -i map.new
Удаление OSD
Пометить нужны OSD на выход
ceph osd out osd.3
Остановить OSD
ceph osd down osd.3
Удалить OSD
ceph osd rm osd.3
Если
Error EBUSY: osd.11 is still up; must be down before removal
Error EBUSY: osd.11 is still up; must be down before removal
тогда на хосте где распологается данный OSD выполнить
systemctl stop ceph-osd@3
Удалить OSD из Crush-Map
ceph osd crush rm osd.3
1) Статус ceph
ceph -s
health HEALTH_WARN
too many PGs per OSD (320 > max 300)
Проверить количество Placement Groups можно так:
ceph pg dump | awk '
/^pg_stat/ { col=1; while($col!="up") {col++}; col++ }
/^[0-9a-f]+\.[0-9a-f]+/ { match($0,/^[0-9a-f]+/); pool=substr($0, RSTART, RLENGTH); poollist[pool]=0;
up=$col; i=0; RSTART=0; RLENGTH=0; delete osds; while(match(up,/[0-9]+/)>0) { osds[++i]=substr(up,RSTART,RLENGTH); up = substr(up, RSTART+RLENGTH) }
for(i in osds) {array[osds[i],pool]++; osdlist[osds[i]];}
}
END {
printf("\n");
printf("pool :\t"); for (i in poollist) printf("%s\t",i); printf("| SUM \n");
for (i in poollist) printf("--------"); printf("----------------\n");
for (i in osdlist) { printf("osd.%i\t", i); sum=0;
for (j in poollist) { printf("%i\t", array[i,j]); sum+=array[i,j]; sumpool[j]+=array[i,j] }; printf("| %i\n",sum) }
for (i in poollist) printf("--------"); printf("----------------\n");
printf("SUM :\t"); for (i in poollist) printf("%s\t",sumpool[i]); printf("|\n");
}'
Получим вывод:
pool : 0 1 2 | SUM
----------------------------------------
osd.0 64 128 128 | 320
osd.1 64 128 128 | 320
osd.2 64 128 128 | 320
----------------------------------------
SUM : 192 384 384 |
Узнать текущий фактор репликации
ceph osd dump | grep -i poolpool 0 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0
pool 1 'cephfs_data' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 20 flags hashpspool crash_replay_interval 45 stripe_width 0
pool 2 'cephfs_metadata' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 18 flags hashpspool stripe_width 0
Ошибки
Ошибка при выполнении ceph -s и прочих
librados: client.admin authentication error (1) Operation not permitted
Error connecting to cluster: PermissionError
Решение
Проверить что есть права на чтение у ceph
/etc/ceph/ceph.client.admin.keyring
Чтобы пересоздать файл
ceph-deploy admin <adminserverhostname>
Знакомство с хранилищем Ceph в картинках
https://bogachev.biz/ceph
Облако на OpenNebula с Ceph, MariaDB Galera Cluster и OpenvSwitch
Комментариев нет:
Отправить комментарий