• Post category:Версия для Linux
  • Запись изменена:10.04.2024

Содержание

Кластер не прошёл тестирование, статья выложена без всех стадий тестирования и проверок, поэтому может быть не актуальна и иметь ошибки.

0. Схема

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

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

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

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

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

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

Пример вывода:

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

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 на HTTP (Прокси сервер на HTTPS, DS на HTTP)
Этот сценарий используется, если требуется обеспечить безопасное соединение, чтобы все запросы автоматически перенаправлялись на 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

Пример вывода:

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

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

Примерный вывод:

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

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

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

Если 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

Примерный вывод:

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

4.10. Обновите параметр для nginx

Следующие действия обновят параметр secure_link_secret в файлах:

/etc/r7-office/documentserver/local.json
/etc/r7-office/documentserver/nginx/ds.conf

4.10.1. Для Nginx:

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

4.10.2. Для DS:

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

ВАЖНО: Данный параметр должен быть также одинаковым на всех нодах 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.234ip адрес DS.

Пример страницы:

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

5.1. Проверить страницу на балансировщике/reverse proxy

https://ds-cluster.devr7.ru/

Где,

  • ds-cluster.devr7.rudns имя балансировщика/reverse proxy.

Пример страницы:

Кластер DS (DocumentServer) на RedOS 7.3 (beta)

5.2. Повторите п.4 для каждого сервера DS