Содержание
Кластер не прошёл тестирование, статья выложена без всех стадий тестирования и проверок, поэтому может быть не актуальна и иметь ошибки.
0. Схема
1. Роль СУБД, RabbitMQ и Redis
Данные роли можно разнести по серверам, выполняя пункты 1.1, 1.2 и 1.3 на разных серверах.
При включенной службе firewalld необходимо выполнить настройку для postgresql, redis и amqp.
# Добавляем службы: sudo firewall-cmd --permanent --zone=public --add-service=postgresql sudo firewall-cmd --permanent --zone=public --add-service=redis sudo firewall-cmd --permanent --zone=public --add-service=amqp # Перезапускаем службу firewalld: sudo firewall-cmd --reload # Проверяем правила для зоны public: sudo firewall-cmd --zone=public --list-all
1.1. СУБД
1.1.1. Установите PostgreSQL
dnf install postgresql-server -y
1.1.2. Инициализируйте БД
/usr/bin/postgresql-setup --initdb --unit postgresql
1.1.3. Добавьте сервис в автозагрузку
systemctl enable postgresql
1.1.4. Приведите файл /var/lib/pgsql/data/pg_hba.conf к виду
# "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # Указать все сервера с DS host r7office r7office 192.168.25.234/32 md5 host r7office r7office 192.168.25.28/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5
Где, строки вида
- host ds ds 192.168.25.234/32 md5 — Это доступ к БД r7office пользователю r7office с ip 192.168.25.234 по методу md5
1.1.5. Приведите строки в файле /var/lib/pgsql/data/postgresql.conf к виду и раскомментируйте их
listen_addresses = 'localhost, 192.168.25.102' port = 5432
Где,
- localhost, 192.168.25.102 — интерфейсы, которые должен слушать PostgreSQL, можно также указать ‘*’, чтобы слушались все интерфейсы.
1.1.6. Перезапустите сервис
systemctl restart postgresql
Проверяем:
systemctl status postgresql
1.1.7. Проверьте, что слушает сервис нужные интерфейсы
netstat -tln | grep 5432
1.1.8. Создайте пользователя и БД
# Создание пользователя r7office с паролем r7office sudo -i -u postgres psql -c "CREATE USER r7office WITH PASSWORD 'r7office';" # Создание БД r7office и выдача прав для пользователя r7office sudo -i -u postgres psql -c "CREATE DATABASE r7office OWNER r7office;"
1.2. Установка и настройка Redis
1.2.1. Установите
dnf install redis -y
1.2.2. Добавьте в автозагрузку и запустите
systemctl enable redis --now
1.2.3. Отредактируйте файл /etc/redis/redis.conf, приведите строки к виду
bind 127.0.0.1 192.168.25.102 protected-mode no
Где,
- bind 127.0.0.1 192.168.25.102 — интерфейсы, которые необходимо слушать приложению
1.2.4. Перезапустите сервис
systemctl restart redis
1.2.5. Проверьте, слушает ли сервис порты
netstat -lpn | grep redis
1.3. Установка и настройка RabbitMQ
1.3.1. Установите
dnf install rabbitmq-server -y
1.3.2. Запустите и добавьте в автозагрузку
systemctl enable rabbitmq-server --now
1.3.3. Редактируйте/создайте (если нет в директории) файл /etc/rabbitmq/rabbitmq.conf, приведите параметры к виду
listeners.tcp.other_ip = 192.168.25.102:5672
Где,
- 192.168.25.102 — ip сервера с RabbitMQ
1.3.4. Перезапустите сервис
systemctl restart rabbitmq-server systemctl status rabbitmq-server
1.3.5. Проверьте, слушает ли порты сервис
netstat -lpn | grep beam
Пример вывода:
1.3.6. Выдайте права для ds
# Создаём пользователя r7office с паролем r7office и выдать ему права rabbitmqctl add_user r7office r7office rabbitmqctl set_permissions -p / r7office ".*" ".*" ".*" # Создаём хост с DS (выполнить для каждой ноды DS) rabbitmqctl add_vhost 192.168.25.234 # Даём права ВМ с DS (выполнить для каждой ноды DS) rabbitmqctl set_permissions -p 192.168.25.234 r7office ".*" ".*" ".*"
2. Роль балансировщика
2.1. Установите nginx
dnf install nginx -y
2.2. Запустите
systemctl enable nginx --now
2.3. Добавьте конфигурационные файлы
2.3.1. /etc/nginx/conf.d/r7-ds.conf
Этот сценарий используется, если требуется обеспечить безопасное соединение, чтобы все запросы автоматически перенаправлялись на HTTPS
upstream docservice { # Указать все сервера с DS server 192.168.25.234; server 192.168.25.28; server 192.168.25.38; } map $http_host $this_host { "" $host; default $http_host; } map $http_x_forwarded_proto $the_scheme { default $http_x_forwarded_proto; "" $scheme; } map $http_x_forwarded_host $the_host { default $http_x_forwarded_host; "" $this_host; } map $http_upgrade $proxy_connection { default upgrade; "" close; } proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $proxy_connection; proxy_set_header X-Forwarded-Host $the_host; proxy_set_header X-Forwarded-Proto $the_scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ## Normal HTTP host server { listen 0.0.0.0:80; server_name ds-cluster.devr7.ru; server_tokens off; ## Redirects all traffic to the HTTPS host return 301 https://$server_name:443$request_uri; } server { listen 0.0.0.0:443 ssl http2; server_name ds-cluster.devr7.ru; server_tokens off; root /usr/share/nginx/html; ssl_certificate /etc/nginx/ssl/devr7.ru-full.crt; ssl_certificate_key /etc/nginx/ssl/devr7.ru.key; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_prefer_server_ciphers on; ## [Optional] Before enabling Strict-Transport-Security headers, ensure your server is properly configured for SSL. ## This directive informs the browser to always use HTTPS. For more info see: ## - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; location / { proxy_pass http://docservice; proxy_http_version 1.1; } }
Где,
- в блоке upstream docservice {} — указаны сервера DS;
- server_name ds-cluster.devr7.ru; — указано dns имя reverse proxy;
- ssl_certificate /etc/nginx/ssl/devr7.ru-full.crt; — указан путь до полной цепочки сертификатов;
- ssl_certificate_key /etc/nginx/ssl/devr7.ru.key; — указан путь до закрытого ключа.
2.3.2. /etc/nginx/conf.d/r7-ds.conf
Данный конфигурационный файл для проксирования HTTP на HTTP
upstream docservice { # Указать все сервера с DS server 192.168.25.234; server 192.168.25.28; server 192.168.25.38; } map $http_host $this_host { "" $host; default $http_host; } map $http_x_forwarded_proto $the_scheme { default $http_x_forwarded_proto; "" $scheme; } map $http_x_forwarded_host $the_host { default $http_x_forwarded_host; "" $this_host; } map $http_upgrade $proxy_connection { default upgrade; "" close; } proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $proxy_connection; proxy_set_header X-Forwarded-Host $the_host; proxy_set_header X-Forwarded-Proto $the_scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ## Normal HTTP host server { listen 0.0.0.0:80; server_name ds-cluster.devr7.ru; server_tokens off; location / { proxy_pass http://docservice; proxy_http_version 1.1; } }
2.4. Проверьте конфигурацию
nginx -t
Пример вывода:
2.5. Перезапустите сервис
systemctl restart nginx
3. Файловое хранилище
Рассмотрим вариант простого nfs хранилища на RedOS 7.3, для примера
При включенной службе firewalld необходимо выполнить настройку для nfs.
# Добавляем службу: sudo firewall-cmd --permanent --zone=public --add-service=nfs # Перезапускаем службу firewalld: sudo firewall-cmd --reload # Проверяем правила для зоны public: sudo firewall-cmd --zone=public --list-all
3.1. Установите пакеты
dnf install nfs-utils nfs4-acl-tools -y
3.2. Запустите сервис
systemctl enable nfs-server --now
3.3. Создайте директории
mkdir /mnt/cache mkdir /mnt/data
3.4. Добавьте файл лицензии
По данному пути добавляем файл лицензии с именно таким именем license.lic
/mnt/data/license.lic
3.5. Создайте пользователя
Важно заметить, что в данной инструкции рассматривается чистая инсталляции без имеющихся DS. Если у Вас уже есть DS, то необходимо указать UID и GID пользователя ds с ВМ, где установлен DS.
Можно воспользоваться командой:
id ds
В данной инструкции установки не рассматривается наличие уже установленного Документ сервера, поэтому UID и GID будут везде указаны 1100. Если Вам важно сохранить имеющийся DS, то необходимо использовать GID и UID с данной ВМ, либо изменить их на ней, возможно использовать данные команды:
supervisorctl stop all groupmod -g 1100 ds usermod -u 1100 -g 1100 ds chown -R ds:ds /var/lib/r7-office/ chown -R ds:ds /var/www/r7-office/ chown -R ds:ds /etc/r7-office/
Создание пользователя:
ВАЖНО: UID и GID пользователя ds должны быть одинаковые на всех ВМ с Документ сервером и NFS хранилищем
# Создаём группу с gid 1100 groupadd -g 1100 ds # Создаём пользователя с uid 1100 и добавляем его в группу с gid 1100 useradd -u 1100 -g 1100 ds # Обновляем права на каталоги chown ds:ds -R /mnt/cache/ chown ds:ds -R /mnt/data
3.6. Редактируйте файл
/etc/exports
3.4. Добавьте строки примерно такого характера
/mnt/cache 192.168.25.0/24(rw,insecure,nohide,all_squash,anonuid=1100,anongid=1100,no_subtree_check) /mnt/data 192.168.25.0/24(rw,insecure,nohide,all_squash,anonuid=1100,anongid=1100,no_subtree_check)
Где,
- /mnt/cahce –путь к папке, для которой раздается доступ;
- 192.168.25.0 –IP-адрес, которому раздается доступ к папке (можно указать всю сеть, тогда запись примет вид 192.168.1.0/24)
- (rw,no_root_squash,sync) –набор опций, опции могут быть:
- rw –чтение запись(может принимать значение ro-только чтение);
- no_root_squash – по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать;
- nohide — NFS автоматически не показывает нелокальные ресурсы (например, примонтированые с помощью mount –bind), эта опция включает отображение таких ресурсов;
- subtree_check (no_subtree_check) — в некоторых случаях приходится экспортировать не весь раздел, а лишь его часть. При этом сервер NFS должен выполнять дополнительную проверку обращений клиентов, чтобы убедиться в том, что они предпринимают попытку доступа лишь к файлам, находящимся в соответствующих подкаталогах. Такой контроль поддерева (subtree checks) несколько замедляет взаимодействие с клиентами, но если отказаться от него, могут возникнуть проблемы с безопасностью системы. Отменить контроль поддерева можно с помощью опции no_subtree_check. Опция subtree_check, включающая такой контроль, предполагается по умолчанию. Контроль поддерева можно не выполнять в том случае, если экспортируемый каталог совпадает с разделом диска;
3.7. Выполните команду
Для публикации сетевых директорий
exportfs -ra
4. Роль DS
4.1. Установите nginx
dnf install nginx -y
4.1.1. Запустите сервис
systemctl enable nginx --now
4.2. Примонтируйте каталоги
# устанавливаем пакет dnf install nfs-utils # Создаём группу и пользователя (id теже, что и на nfs должны быть) groupadd -g 1100 ds useradd -u 1100 -g 1100 ds # Создаём каталоги mkdir /var/lib/r7-office/documentserver/App_Data/cache -p mkdir /var/www/r7-office/Data -p # Назначаем права chown ds:ds -R /var/lib/r7-office/ chown ds:ds -R /var/www/r7-office/ # Примонтировать sudo mount -t nfs -O uid=1100,iocharset=utf-8 192.168.25.146:/mnt/cache /var/lib/r7-office/documentserver/App_Data/cache sudo mount -t nfs -O uid=1100,iocharset=utf-8 192.168.25.146:/mnt/data /var/www/r7-office/Data
Где,
- 192.168.25.146 — ip nfs сервера;
- /mnt/cahce и /mnt/data— каталог на nfs сервере;
- /var/www/r7-office/Data и /var/lib/r7-office/documentserver/App_Data/cache — пути монтирования на ВМ с DS.
4.3. Проверьте монтирование
df -h
Примерный вывод:
4.4. Добавьте запись в /etc/fstab
192.168.25.146:/mnt/cache /var/lib/r7-office/documentserver/App_Data/cache nfs defaults 0 0 192.168.25.146:/mnt/data /var/www/r7-office/Data nfs defaults 0 0
Где,
- 192.168.25.146 — ip nfs сервера;
- /mnt/cache и /mnt/data — каталог на nfs сервере;
- /var/www/r7-office/Data и /var/lib/r7-office/documentserver/App_Data/cache — пути монтирования на ВМ с DS.
4.5. Добавьте репозиторий
В файл
/etc/yum.repos.d/r7-office.repo
Добавьте строки
[r7-office] name=r7-office repo baseurl=http://download.r7-office.ru/repo/centos/main/noarch/ gpgcheck=0 enabled=1
4.6. Добавьте в hosts
Добавьте записи для сервисов в /etc/hosts
192.168.25.102 rabbitmq 192.168.25.102 redis 192.168.25.102 postgresql
ip для сервисов может быть разный или у Вас может быть свой DNS с уже сделанными записями, поэтому данный пункт можете пропустить.
4.7. Установите DS
# Установим пакет dnf install r7-office-documentserver-ee -y
4.8. Запустите скрипт конфигурации
Если это первая инсталляция, то файла этого нет, можете сделать рандомный секрет, например, командой ниже:
AuthorizationJwt можете использовать по умолчанию.
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
4.8.1. Задайте секрет и хедер
declare -x JWT_SECRET=VrTMopwWwGP1 declare -x JWT_HEADER=AuthorizationJwt
Это параметры из файла /etc/r7-office/documentserver/local.json
Должны быть ОДИНАКОВЫ для всех ВМ с DS в кластере, если используется JWT
Если JWT необходимо отключить, то выполните данную команду
declare -x JWT_ENABLED=false
4.8.2. Запустите скрипт
bash documentserver-configure.sh
Будут запрошены данные
4.8.2.1. Для PostgreSQL:
- Host: postgresql
- Database: r7office
- User: r7office
- Password: r7office
Где,
- host — ip сервера с PostgreSQL или его dns имя (в данном примере запись из п.4.6);
- Database — имя Базы Данных;
- User — Имя пользователя;
- Password — Пароль от пользователя.
4.8.2.2. Для Redis:
- Host: redis
Где,
- host — ip сервера с Redis или его dns имя (в данном примере запись из п.4.6)
4.8.2.3. Для AMQP
- Host: rabbitmq
- User: r7office
- Password: r7office
Где,
- host — ip сервера с RabbitMQ или его dns имя (в данном примере запись из п.4.6);
- user — пользователь для подключения;
- password — пароль от пользователя.
4.9. Проверьте статус служб
supervisorctl status all
Примерный вывод:
4.10. Обновите параметр для nginx
Следующие действия обновят параметр secure_link_secret в файлах:
/etc/r7-office/documentserver/local.json /etc/r7-office/documentserver/nginx/ds.conf
4.10.1. Для Nginx:
4.10.2. Для DS:
ВАЖНО: Данный параметр должен быть также одинаковым на всех нодах DS.
4.10.3. Установите значение параметра
declare -x SECURE_LINK_SECRET=bC8xyZpur6WjunjL01gL
4.10.4. Выполните скрипт
bash documentserver-update-securelink.sh
5. Проверьте страницу DS
http://192.168.25.234/
Где,
- 192.168.25.234 — ip адрес DS.
Пример страницы:
5.1. Проверить страницу на балансировщике/reverse proxy
https://ds-cluster.devr7.ru/
Где,
- ds-cluster.devr7.ru — dns имя балансировщика/reverse proxy.
Пример страницы:
5.2. Повторите п.4 для каждого сервера DS