Подготовка
- Настройте разрешение DNS-имен на своем внутреннем DNS сервере или пропишите имена хостов в hosts
- Проверьте, что все хосты будущего кластера доступны как по коротким так и по полным именам
Подключаем последнюю стабильную версию репозитария и устанавливаем необходимые для работы компоненты на каждом из узлов кластера.
# add-apt-repository ppa:gluster/glusterfs-9
# apt install glusterfs-client glusterfs-server
# systemctl start glusterd.service
# systemctl enable glusterd.service
Для работы glusterfs необходимо разрешить взаимодействие между узлами по портам:
- 24007-24010 TCP
- 49152-49153 TCP
- 38465-38467 TCP
- 111 TCP/UDP
Пример настроек для UFW в Ubuntu Linux:
# ufw allow from 185.133.42.65 to any port 24007:24010 proto tcp
# ufw allow from 185.133.42.65 to any port 49152:49153 proto tcp
# ufw allow from 185.133.42.65 to any port 38465:38467 proto tcp
# ufw allow from 185.133.42.65 to any port 111 proto tcp
# ufw allow from 185.133.42.65 to any port 111 proto udp
Дружим кластер
К первому узлу добавляем два других.
# gluster peer probe prod-srv-02
# gluster peer probe prod-srv-03
Проверяем статус Gluster-а из трех узлов.
# gluster peer status
Number of Peers: 2
Hostname: prod-srv-02
Uuid: 0e496b5f-6419-42fd-9e68-12304b2408c9
State: Peer in Cluster (Connected)
Hostname: prod-srv-03
Uuid: 8859e4d4-bd54-40e8-be9b-5e6879b25eac
State: Peer in Cluster (Connected)
Пока все идет хорошо, но есть нюанс с запросом статуса с других узлов, где центральный узел не по имени, а по IP-адресу.
# gluster peer status
Number of Peers: 2
Hostname: 185.133.42.65
Uuid: d6f8728c-dfc7-48d5-96b2-1c0bcde88638
State: Peer in Cluster (Connected)
Hostname: prod-srv-02
Uuid: 0e496b5f-6419-42fd-9e68-12304b2408c9
State: Peer in Cluster (Connected)
Создаем хранилище
На каждом из узлов создаем каталог для хранилища данных GlusterFS.
# mkdir /opt/gluster-storage
Собираем хранилище из трех томов, обратите внимание, что один из хостов будет по IP-адресу так-как он не резолвится в PTR.
# gluster volume create gluster_volume replica 3 185.133.42.65:/opt/gluster-storage/ prod-srv-02:/opt/gluster-storage/ prod-srv-03:/opt/gluster-storage/
Пример для системы из двух хостов и одного арбитра.
# gluster volume create gluster_volume replica 3 185.133.42.65:/opt/gluster-storage/ prod-srv-02:/opt/gluster-storage/ prod-srv-03:/opt/gluster-storage/
В случае ошибки:
volume create: gluster_volume: failed: The brick prod-srv-02:/opt/gluster-storage is being created in the root partition. It is recommended that you don’t use the system’s
root partition for storage backend. Or use ‘force’ at the end of the command if you want to override this behavior.
Добавляем в конце команды “force”
В случае ошибки:
volume create: gluster_volume: failed: Staging failed on prod-srv-03. Error: Host prod-srv-03 is not in ‘Peer in Cluster’ state
Проверьте записи в файле hosts на наличие ошибок
Проверяем статус тома:
# gluster volume info
Volume Name: gluster_volume
Type: Replicate
Volume ID: 2e4cd540-117a-412b-8985-b516e568bc4c
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 3=3
Transport-type: tcp
Bricks:
Brick1: 185.133.42.65:/opt/gluster-storage
Brick2: prod-srv-02:/opt/gluster-storage
Brick3: prod-srv-03:/opt/gluster-storage
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off# gluster volume info
Volume Name: gluster_volume
Type: Replicate
Volume ID: 2e4cd540-117a-412b-8985-b516e568bc4c
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 3=3
Transport-type: tcp
Bricks:
Brick1: 185.133.42.65:/opt/gluster-storage
Brick2: prod-srv-02:/opt/gluster-storage
Brick3: prod-srv-03:/opt/gluster-storage
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
Запускаем том:
# gluster volume start gluster_volume
Настройка и запуск клиентов на узлах кластера
На каждом узле кластера создаем точку монтирования.
# mkdir /mnt/gluster-storage
Прописываем монтирование glusterfs в fstab
localhost:/gluster_volume /mnt/gluster-storage glusterfs defaults,_netdev 0 0
Вариант с FailOver-сервером
gluster-1:/gluster_volume /mnt/gluster-storage glusterfs defaults,_netdev,backupvolfile-server=gluster-2 0 0
Для чистоты эксперимента можно попробовать перезагружать хосты (если не прод-контур конечно)
Тестирование производительности
Три гео-распределенных узла объединенные каналом максимум 100 мегабит, без VPN.
На хосте
Линейная запись
# dd if=/dev/zero of=/tmp/test.bin bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 3,13427 s, 343 MB/s
Линейное чтение
# dd if=/tmp/test.bin of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 1,80814 s, 594 MB/s
В точке монтирования GlusterFS
Линейная запись
# dd if=/dev/zero of=/mnt/gluster-storage/test.bin bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 272,866 s, 3,9 MB/s
Линейное чтение
# dd if=/mnt/gluster-storage/test.bin of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 5,60246 s, 192 MB/s
Вполне предсказуемый результат.