среда, 1 февраля 2017 г.

Установка и настройка Ceph




Установка и настройка Ceph. Подключение дисков Rados Block Device и CephFS.

Ceph является проектом с открытым кодом, который предоставляет определяемые программным обеспечением унифицированные решения для хранения данных. Ceph является распределенной системой хранения, которая является массивно масштабируемой и высокопроизводительной и при этом не имеет единой точки отказа. С самого начала она разрабатывалась для высокой масштабируемости, до уровней эксабайт и выше, при работе на общеупотребимых аппаратных средствах.
Подробно о внутренней Кухне CEPH

Первые настройки CentOS 7

 Рекомендации к Железу

Релизы 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

vi /etc/sudoers.d/ceph
     ceph ALL = (root) NOPASSWD:ALL
     Defaults:ceph !requiretty

или
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/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

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 
* где jewel — LTS версия ceph; el7 — релиз CentOS 7. Эти значения нужно заменить на другие, если используемые версии отличаются. Релиз Linux CentOS можно посмотреть командой uname -r, а актуальную версию Ceph по ссылке http://docs.ceph.com/docs/jewel/releases/


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
su - ceph
ssh-keygen
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 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 -l
rbd map rbddisk01
rbd showmapped

mkfs.ext4 /dev/rbd0
mkdir /mnt/rbddisk01
mount /dev/rbd0 /mnt/rbddisk01

Подключение диска CephFS

www.server-world.info

ssh 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 

Тиражирование конфигурации среди узлов Кластера
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
vasilisc.com osd
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
тогда на хосте где распологается данный 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 pool

pool 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
 dmosk.ru 

Комментариев нет:

Отправить комментарий