Содержание

Схема взаимодействия сервисов

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

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

Условия развёртки:

Для всех ВМ использовался Redos 7.3.5 и рекомендуемыеми параметрами от 2 CPU, 4GB RAM, SSD от 40 GB, для NFS так же используется быстрый диск для уменьшения latency отработки данных.

Сборка осуществлялась на Корпоративном сервере 2024 версии 4400 и Сервере документов версии 622, rabbitmq версии 3.13.7, postgresql 16.4, redis 7.2.6

Созданы записи в DNS:

A *.test3.s7-office.site 192.168.27.35

A ds-cluster.test3.s7-office.site 192.168.27.35

Так же возможно создание записей для нод кластеров для обращения к ним по DNS имени. В статье описаны примеры подключения с минимальным набором A записей

Используется сертификат wildcard на домен test3.s7-office.site — будет фигурировать в настройках nginx

1. Кластер БД postgresql

Описание

  1. Patroni: Patroni — это инструмент для управления высокодоступным кластером PostgreSQL. Он обеспечивает автоматизированное управление основным/резервным сервером, мониторинг состояния серверов, выбора основного сервера (leader), решения конфликтов и так далее. Patroni помогает обеспечить высокую доступность и отказоустойчивость для кластера PostgreSQL.
  2. etcd: etcd — это распределенное хранилище ключей-значений, используемое Patroni для хранения конфигурации и состояния кластера. Он обеспечивает централизованное хранение данных, нужных для согласованности и синхронизации между серверами кластера PostgreSQL. Etcd также используется для обнаружения и выбора основного сервера. Для работы кластера необходимо , чтобы как минимум два хоста etcd были доступны

1.2 Установка кластера postgresql

1.2.1 Настройка хостов

Мы будем использовать три хоста (минимальный набор для организации кластера) для кластера postgresql и один хост для haproxy:

  • psql1: 192.168.27.239 ( etcd + patroni + postgresql )
  • psql2: 192.168.27.219  ( etcd + patroni + postgresql )
  • psql3: 192.168.27.108 ( etcd + patroni + postgresql )
  • haproxy: 192.168.27.83 (haproxy)

При использовании firewalld указать на всех нодах:

sudo firewall-cmd --permanent --add-port=2380/tcp
sudo firewall-cmd --permanent --add-port=2379/tcp
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --permanent --add-port=8008/tcp
 
sudo firewall-cmd --reload
1.2.1.1 Переименуйте все хосты кластера postgresql и добавьте в файл hosts (в нашем случаи мы будем использовать имя psql)
1.2.1.1.1 На первом хосте
192.168.27.239:

hostnamectl set-hostname psql1

systemctl restart systemd-hostnamed
1.2.1.1.2 На втором хосте
192.168.27.219:

hostnamectl set-hostname psql2

systemctl restart systemd-hostnamed
1.2.1.1.3 На третьем хосте
192.168.27.108:

hostnamectl set-hostname psql3

systemctl restart systemd-hostnamed
1.2.1.2 Добавьте данные о хостах в файл /etc/hosts на ВСЕХ хостах
192.168.27.239 psql1
192.168.27.219 psql2
192.168.27.108 psql3

1.2.2 Установка ETCD ( на хостах psql1, psql2, psql3 )

1.2.2.1 Обновляем систему, устанавливаем etcd, останавливаем сервис etcd
dnf update -y

yum install etcd -y

systemctl stop etcd
1.2.2.2 Создаем конфигурацию /etc/etcd/etcd.conf:
1.2.2.2.1 На первом хосте 192.168.27.239 psql1:
ETCD_NAME="psql1"
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_HEARTBEAT="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="http://192.168.27.239:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.27.239:2379,http://localhost:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.239:2380"
ETCD_INITIAL_CLUSTER="psql1=http://192.168.27.239:2380,psql2=http://192.168.27.219:2380,psql3=http://192.168.27.108:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.239:2379"
ETCD_ENABLE_V2="true"
1.2.2.2.2 На втором хосте 192.168.27.219 psql2:
ETCD_NAME="psql2"
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_HEARTBEAT="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="http://192.168.27.219:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.27.219:2379,http://localhost:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.219:2380"
ETCD_INITIAL_CLUSTER="psql1=http://192.168.27.239:2380,psql2=http://192.168.27.219:2380,psql3=http://192.168.27.108:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.219:2379"
ETCD_ENABLE_V2="true
1.2.2.2.3 На третьем хосте 192.168.27.108 psql3:
ETCD_NAME="psql3"
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_HEARTBEAT="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="http://192.168.27.108:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.27.108:2379,http://localhost:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.108:2380"
ETCD_INITIAL_CLUSTER="psql1=http://192.168.27.239:2380,psql2=http://192.168.27.219:2380,psql3=http://192.168.27.108:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.108:2379"
ETCD_ENABLE_V2="true"
  • ETCD_NAME —  имя хоста на котором производится настройка
  • ETCD_LISTEN_CLIENT_URLS — url для прослушивания клиентских запросов. ( можно указать 0.0.0.0:2379 в этом случаи хост будет слушать все )
  • ETCD_ADVERTISE_CLIENT_URLS — url для клиентских запросов ( указываем ip хоста, на котором производится настройка )
  • ETCD_INITIAL_ADVERTISE_PEER_URLS — url для запросов от других узлов etcd  ( указываем ip хоста, на котором производится настройка )
  • ETCD_INITIAL_CLUSTER_TOKEN — токен для идентификации кластера ( должен совпадать на каждом хоста postgresql )
  • ETCD_INITIAL_CLUSTER — все узлы и их url ( конструкция выглядит следующим образом «host_name_1=http://ip_iddress:2380,host_name_2=http://ip_iddress:2380,host_name_3=http://ip_iddress:2380» )
  • ETCD_INITIAL_CLUSTER_STATE — начальное состояние кластера
  • ETCD_DATA_DIR —  директорию, где хранятся данные ETCD
  • ETCD_ELECTION_TIMEOUT — таймаут выборов в миллисекундах
  • ETCD_HEARTBEAT — интервал между отправкой heatbeat сигналов в миллисекундах
1.2.2.3 Перезапустите службы и проверьте работу etcd
systemctl daemon-reload

systemctl enable etcd

systemctl start etcd

В случае если были ошибки в конфигурациях и служба корректно не запускалась, потребуется удалить каталог и перезапустить службы на всех нодах:

rm -rf /var/lib/etcd/* — каталог назначения данных

systemctl restart etcd

Для проверки работы:

etcdctl member list

etcdctl endpoint status --write-out=table --endpoints=psql1:2379,psql2:2379,psql3:2379

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

1.2.3 Установка PostgreSQL ( на хостах psql1,psql2,psql3 )

1.2.3.1 Установите БД на всех нодах
dnf install postgresql16 postgresql16-server postgresql16-contrib -y

Проверьте что БД не запущена на всех нодах

systemctl stop postgresql-16.service
1.2.3.1.1 на первой ноде psql1

/usr/pgsql-16/bin/postgresql-16-setup initdb — инициализация БД

systemctl start postgresql-16.service — запуск службы

sudo -i -u postgres psql — вход в БД

CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'replicator'; - создание пользователя replicator и установка пароля
 
ALTER USER postgres PASSWORD 'postgres'; - изменение пользователя postgres и установка нового пароля
 
CREATE USER cddisk WITH password 'cddisk'; - создание пользователя cddisk и установка пароля для приложения Корпоративный сервер
CREATE DATABASE cddisk OWNER cddisk; - создание базы данных cddisk для приложения Корпоративный сервер
GRANT ALL privileges ON DATABASE cddisk TO cddisk; - предоставление прав к БД
 
CREATE USER ds WITH password 'ds'; создание пользователя ds и установка пароля для приложения Сервер документов
CREATE DATABASE ds OWNER ds; - создание базы данных ds для приложения Сервер документов
GRANT ALL privileges ON DATABASE ds TO ds; - предоставление прав к БД

Рекомендуется изменить пользователей и пароли для безопасности

При использовании firewalld добавьте на все ноды:

1.2.3.1.2 на других нодах проверить что БД не запущена
systemctl status postgresql-16.service

1.2.4 Установка Patroni( на хостах psql1, psql2, psql3 )

1.2.4.1 Установите зависимости и patroni на всех нодах

dnf install python3 python3-pip python3-psycopg2 patroni -y
dnf install python3-devel-3.8.2-15.el7.x86_64 (или более новее)
dnf install libpq-devel-15.0-2.el7.x86_64 (или более новее)
pip3 install wheel
pip3 install patroni[etcd]

Дополнительно:
в файле ~/.bashrc и добавьте

export PATRONICTL_CONFIG_FILE=/etc/patroni/patroni.yml
1.2.4.3 Создайте конфигурацию patroni

Примечание: В зависимости от версии postgresql значения data_dir и bin_dir могут быть другими.

Поэтому значения будут выглядеть следующим образом на момент сборки стенда:

data_dir: /var/lib/pgsql/16/data

bin_dir: /usr/pgsql-16/bin
1.2.4.3.1 На первом хосте 192.168.27.239 postgresql1 /etc/patroni/patroni.yml:

Обратить внимание на форматирование и настройки postgresql

name: psql1
scope: pg-cluster
 
watchdog:
  mode: off
 
restapi:
  listen: 192.168.27.239:8008
  connect_address: "192.168.27.239:8008"
 
etcd:
  hosts: 192.168.27.239:2379,192.168.27.219:2379,192.168.27.108:2379
 
bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        max_connections: 2000
        superuser_reserved_connections: 5
        max_locks_per_transaction: 64
        max_prepared_transactions: 0
        huge_pages: try
        shared_buffers: 512MB
        work_mem: 128MB
        maintenance_work_mem: 256MB
        effective_cache_size: 2GB
        checkpoint_timeout: 15min
        checkpoint_completion_target: 0.9
        wal_compression: on
        min_wal_size: 2GB
        max_wal_size: 4GB
        wal_buffers: 32MB
        default_statistics_target: 1000
        seq_page_cost: 1
        random_page_cost: 4
        effective_io_concurrency: 2
        synchronous_commit: on
        autovacuum: on
        autovacuum_max_workers: 5
        autovacuum_vacuum_scale_factor: 0.01
        autovacuum_analyze_scale_factor: 0.02
        autovacuum_vacuum_cost_limit: 200
        autovacuum_vacuum_cost_delay: 20
        autovacuum_naptime: 1s
        max_files_per_process: 4096
        archive_mode: on
        archive_timeout: 1800s
        archive_command: cd .
        wal_level: replica
        wal_keep_segments: 130
        max_wal_senders: 10
        max_replication_slots: 10
        hot_standby: on
        hot_standby_feedback: True
        wal_log_hints: on
        shared_preload_libraries: pg_stat_statements,auto_explain
        pg_stat_statements.max: 10000
        pg_stat_statements.track: all
        pg_stat_statements.save: off
        auto_explain.log_min_duration: 10s
        auto_explain.log_analyze: true
        auto_explain.log_buffers: true
        auto_explain.log_timing: false
        auto_explain.log_triggers: true
        auto_explain.log_verbose: true
        auto_explain.log_nested_statements: true
        track_io_timing: on
        log_lock_waits: on
        log_temp_files: 3
        track_activities: on
        track_counts: on
        track_functions: all
        log_checkpoints: on
        logging_collector: on
        log_truncate_on_rotation: on
        log_rotation_age: 1d
        log_rotation_size: 0
        log_line_prefix: '%t [%p-%l] %r %q%u@%d '
        log_filename: 'postgresql-%a.log'
        log_directory: /var/lib/pgsql/16/data/log
 
  initdb:
    - encoding: UTF8
    - data-checksums
 
  pg_hba:
    - local all postgres peer
    - host replication replicator 192.168.27.239/32 md5
    - host replication replicator 192.168.27.219/32 md5
    - host replication replicator 192.168.27.108/32 md5
    - host replication replicator 127.0.0.1/32 md5
    - host all all 0.0.0.0/0 md5
 
postgresql:
  pgpass: /var/lib/pgsql/16/.pgpass
  listen: 192.168.27.239:5432
  connect_address: "192.168.27.239:5432"
  data_dir: /var/lib/pgsql/16/data/
  bin_dir: /usr/pgsql-16/bin/
  config_dir: /var/lib/pgsql/16/data
  pg_hba:
    - local all postgres peer
    - host replication replicator 192.168.27.239/32 md5
    - host replication replicator 192.168.27.219/32 md5
    - host replication replicator 192.168.27.108/32 md5
    - host replication replicator 127.0.0.1/32 trust
    - host all all 0.0.0.0/0 md5
  replication:
    username: replicator
    password: replicator
  superuser:
    username: postgres
    password: postgres
 
  remove_data_directory_on_rewind_failure: false
  remove_data_directory_on_diverged_timelines: false
 
  create_replica_methods:
    - basebackup
  basebackup:
    max-rate: '100M'
    checkpoint: 'fast'
 
watchdog:
  mode: off # Allowed values: off, automatic, required
  device: /dev/watchdog
  safety_margin: 5
 
tags:
  nofailover: false
  noloadbalance: false
  clonefrom: false
  nosync: false

В конфигурации параметры БД возможно изучить на сайте postgresql

1.2.4.3.2 На втором хосте 192.168.27.219 psql2 /etc/patroni/patroni.yml

Так же укажите файл patroni.yml, изменив на ip адреса машины 192.168.27.219:8008

в параметрах

restapi: listen: 192.168.27.239:8008 connect_address: "192.168.27.239:8008"

postgresql: pgpass: /var/lib/pgsql/16/.pgpass listen: 192.168.27.239:5432 connect_address: "192.168.27.239:5432"
1.2.4.3.3 На втором хосте 192.168.27.108 psql3 etc/patroni/patroni.yml

Так же указать файл patroni.yml, изменив на ip адреса машины аналогично прошлому пункту 192.168.27.108:8008

1.2.4.3.4 Выполните команды на всех нодах
sudo chown postgres:postgres -R /etc/patroni
sudo chmod 700 /etc/patroni

Примечание: В случае использовании firewalld:

firewall-cmd --permanent --add-port=8008/tcpfirewall-cmd --reload
1.2.4.4 Краткое описание /etc/patroni/patroni.yml:

Это конфигурационный файл для Patroni, инструмента управления высокодоступным кластером PostgreSQL.

scope: Название кластера («pg_cluster»)

name: Имя текущего узла («postgresql1 или postgreslq2»).

restapi: Настройки для REST API Patroni.

  • listen: IP и порт для прослушивания REST API («0.0.0.0:8008»).
  • connect_address: IP и порт, по которым будут подключаться клиенты к REST API (192.168.27.239:8008).

etcd: Настройки для подключения к ETCD, распределенному хранилищу состояния.

  • hosts: Список хостов ETCD для подключения (192.168.27.239:2379,192.168.27.219:2379,192.168.27.108:2379).

bootstrap: Настройки для начальной настройки кластера.

  • dcs: Настройки распределенной системы координирования (DCS).
    • ttl: Время жизни записи в DCS в секундах («30»).
    • loop_wait: Интервал опроса DCS в секундах («10»).
    • retry_timeout: Тайм-аут для повторных попыток взятия лока в DCS в секундах («10»).
    • maximum_lag_on_failover: Максимально допустимая задержка репликации перед переключением мастера в байтах («1048576»).
    • postgresql: Настройки для PostgreSQL.
      • use_pg_rewind: Использовать ли pg_rewind для восстановления («true»).
      • use_slots: Включить ли использование слотов репликации («true»).
      • parameters: Дополнительные параметры PostgreSQL, указанные в формате «ключ: значение».
  • initdb: Настройки для команды initdb.
  • pg_hba: Разрешения доступа к PostgreSQL.
  • users: Пользователи PostgreSQL.
    • admin: Имя пользователя («admin») и его настройки, включая пароль и опции.

postgresql: Настройки для PostgreSQL.

  • listen: IP и порт для прослушивания PostgreSQL (0.0.0.0:5432 — для всех адресов без исключения).
  • connect_address: IP и порт, по которым будут подключаться клиенты к PostgreSQL (192.168.27.239:5432).
  • data_dir: Директория, где хранятся данные PostgreSQL («/var/lib/pgsql/16/data/»).
  • config_dir: Директория настроек существующей базы («/var/lib/pgsql/16/data»)
  • bin_dir: Директория, где находятся исполняемые файлы PostgreSQL («/usr/lib/postgresql/16/bin»).
  • pgpass: Путь к файлу pgpass для автоматической аутентификации в PostgreSQL.
  • authentication: Настройки аутентификации PostgreSQL.
    • replication: Пользователь для репликации («replicator») и его пароль.
    • superuser: Суперпользователь («postgres») и его пароль.
  • parameters: Дополнительные параметры PostgreSQL, указанные в формате «ключ: значение».

tags: Дополнительные теги для управления поведением Patroni.

  • nofailover: Запретить автоматический переход к другому мастеру при сбое («false»).
  • noloadbalance: Запретить автоматическую балансировку нагрузки («false»).
  • clonefrom: Запретить клонирование другой реплики («false»).
  • nosync: Отключить синхронизацию реплик («false»).
1.2.4.5 Настройка сервиса patroni для всех нод

в файл ~/.bashrc добавьте

export PATRONICTL_CONFIG_FILE=/etc/patroni/patroni.yml
1.2.4.6 Перезапустите сервис patroni и проверьте состояние кластера:
systemctl daemon-reload
systemctl enable patroni --now
systemctl status patroni
patronictl list

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

1.2.4.7 Полезные команды при настройке

в случае если не указывался из пункта 1.2.4.5, то потребуется указания ключа

patronictl -c /etc/patroni/patroni.yml edit-config — изменение принятой конфигурации patroni.yml (может потребовать при проверке правильности принимаемых параметров patroni)

patronictl -c /etc/patroni/patroni.yml restart pg-cluster psql1

patronictl -c /etc/patroni/patroni.yml restart pg-cluster psql2

patronictl -c /etc/patroni/patroni.yml restart pg-cluster psql3

patroni --validate-config /etc/patroni/patroni.yml проверка конфигурации на ошибки

Система сама выберет лидера(master) и реплики (slave).

Если выключить машину Лидер то этот статус автоматически назначается на любой доступный хост.

2. Rabbitmq кластер

2.1. Установка ПО RabbitMQ

Примечание: При включенной службе firewalld необходимо добавить порты 15672, 25672, 4369 и выполнить настройку для amqp.

# Добавьте службу:
firewall-cmd --zone=public --add-service=amqp (все ноды в кластере RabbitMQ + хост с HAProxy)
  
# Добавьте порты:
firewall-cmd --zone=public --add-port=25672/tcp (все ноды в кластере RabbitMQ)
firewall-cmd --zone=public --add-port=4369/tcp (все ноды в кластере RabbitMQ)
firewall-cmd --zone=public --add-port=15672/tcp (все ноды в кластере RabbitMQ + хост с HAProxy)
  
# Примените внесённые изменения:
firewall-cmd --runtime-to-permanent
  
# Проверяем правила для зоны public:
firewall-cmd --zone=public --list-all

2.1.1 Установка ПО RabbitMQ для всех нод

dnf install  rabbitmq-server -y

systemctl enable --now rabbitmq-server

2.2. Настройка хостов с ПО RabbitMQ

Примечание: При отсутствии возможности добавить записи на DNS сервере, необходимо сделать записи в файле /etc/hosts на ВСЕХ нодах в кластере и хосте с HAProxy.

/etc/hosts
127.0.0.1 localhost rabmq1
  
192.168.27.238 rabmq1.localdomain
192.168.27.118 rabmq2.localdomain
192.168.27.31 rabmq3.localdomain
192.168.27.83 haproxy

Переименуйте все ноды

hostnamectl set-hostname rabmq1.localdomain

hostnamectl set-hostname rabmq2.localdomain

hostnamectl set-hostname rabmq3.localdomain

2.2.1 Настройка ноды rabmq1

# Создаем файл
mcedit /etc/rabbitmq/rabbitmq-env.conf
  
# Добавляем переменные окружения
RABBITMQ_NODENAME=rabbit@rabmq1.localdomain
RABBITMQ_USE_LONGNAME=true

2.2.2 Настройка нод rabmq2 и rabmq3

# Создаем файл
mcedit /etc/rabbitmq/rabbitmq-env.conf
# Добавляем переменные окружения
RABBITMQ_NODENAME=rabbit@rabmq2.localdomain
RABBITMQ_USE_LONGNAME=true

и

# Создаем файл
mcedit /etc/rabbitmq/rabbitmq-env.conf
# Добавляем переменные окружения
RABBITMQ_NODENAME=rabbit@rabmq3.localdomain
RABBITMQ_USE_LONGNAME=true

2.2.3 Скопируйте сookie с Primary на Secondary ноды

Любым удобным для Вас способом, копируем c заменой сookie /var/lib/rabbitmq/.erlang.cookie с rabmq1 ноды на ВСЕ остальные ноды в кластере.
назначьте права на сookie на нодах

chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

Перезапустите службу на всех нодах кластера

systemctl restart rabbitmq-server

2.2.4 Добавление нод rabmq2 и rabmq3 к кластеру

# Остановите приложение на нодах rabmq2 и rabmq3 для добавления к кластеру:
rabbitmqctl stop_app

# Потребуется сброс rabbitmq на нодах rabmq2 и rabmq3
rabbitmqctl reset

# Добавьте ноды к кластеру, выполните на rabmq2 и rabmq3

rabbitmqctl join_cluster rabbit@rabmq1.localdomain
 
# Запустите приложение на нодах rabmq2 и rabmq3:
rabbitmqctl start_app
 
# Проверьте статус кластера на всех нодах:
rabbitmqctl cluster_status

2.3. Настройка кластера RabbitMQ

2.3.1 Включите плагин Management Plugin на всех нодах кластера

rabbitmq-plugins enable \
rabbitmq_management

2.3.2 Создайте виртуальный хост для haproxy и пользователя для подключения к Серверу документов и Корпоративному серверу

На ноде rabmq1 создайте vhost haproxy и пользователя r7office с доступом к vhost:

rabbitmqctl add_vhost haproxy

Создайте пользователя r7office с паролем r7office и выдайте ему права

rabbitmqctl add_user r7office r7office

Примечание: На версии КС 4400 нет возможности использовать отличный от корня «/». Предоставьте права r7-office для Корпоративного сервера:

rabbitmqctl set_permissions -p / r7office ".*" ".*" ".*"

При необходимости выдайте права администратора если будет использоваться пользователь для подключения с помощью Management Plugin

rabbitmqctl set_user_tags r7office administrator

Выдайте права пользователю r7office на vhost haproxy (кластер сервера документов)

rabbitmqctl set_permissions -p haproxy r7office ".*" ".*" ".*"

Настраиваем зеркальную очередь с префиксом amq (при сбое сервера A эти блоки очереди выходят на сервер B)

rabbitmqctl set_policy haproxy '^(?!amq\.).*' '{"ha-mode": "all"}'

2.4 Проверяем работу кластера

Поочередно останавливаем службу rabbitmq-server.service на нодах кластера

systemctl stop rabbitmq-server.service

Проверяем состояние ноды с помощью плагина Management Plugin http://192.168.27.238:15672/

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

3. Кластер Redis

Примечание: При отсутствии возможности добавить записи на DNS сервере, необходимо сделать записи в файле /etc/hosts на ВСЕХ нодах в кластере и хосте с HAProxy.

/etc/hosts
127.0.0.1 localhost redis1
  
192.168.27.238 redis1.localdomain redis1
192.168.27.118 redis2.localdomain redis2
192.168.27.31 redis3.localdomain redis3
192.168.27.83 haproxy

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

hostnamectl set-hostname redis1.localdomain

hostnamectl set-hostname redis2.localdomain

hostnamectl set-hostname redis3.localdomain

При включенной службе firewalld необходимо добавить порты 15672256724369 и выполнить настройку для amqp.

# Добавляем порты:
firewall-cmd --permanent --add-port=6379/tcp (redis, все ноды в кластере )
firewall-cmd --permanent --add-port=26379/tcp (sentinal, все ноды в кластере)
  
# Применяем внесённые изменения:
firewall-cmd --runtime-to-permanent
  
# Проверяем правила для зоны public:
firewall-cmd --zone=public --list-all

3.1 Установка Redis и Sentinal

dnf install redis -y

на все ноды

3.2 Настройка

Внесите правки в файл /etc/redis/redis.conf

maxclients 20000 - максимальное количество клиентов
maxmemory-policy allkeys-lfu - политика вытеснения ключей
save "" - политика создания снапшотов - отключение
appendonly no - отключение сохранения базы данных Redis в файл
masterauth "SecretPassword" - укажите пароль к Мастеру
 
Укажите представление ноды в кластере:
 
на ноде redis1:
replica-announce-ip redis1.localdomain
 
на ноде redis2:
replica-announce-ip redis2.localdomain
 
на ноде redis3:
replica-announce-ip redis3.localdomain
requirepass "SecretPassword" - пароль к Мастеру
 
На нодах redis2 и redis3 укажите:
replicaof redis1.localdomain 6379

Внесите правки в файл /etc/redis/sentinel.conf

на ноде redis 1
sentinel announce-ip redis1.localdomain
 
на ноде redis 2
sentinel announce-ip redis2.localdomain
 
на ноде redis 3
sentinel announce-ip redis-3.localdomain
 
на всех нодах
sentinel monitor mymaster redis1.localdomain 6379 2
sentinel auth-pass mymaster SecretPassword
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 6000
sentinel resolve-hostnames yes
sentinel announce-hostnames yes

3.3 Запустите сервисы и проверьте работу

sudo systemctl restart redis
sudo systemctl enable redis
  • redis-cli -p 26379 info sentinel — инфо о работе sentinel
  • redis-cli -p 26379 sentinel ckquorum mymaster — инфо о кворуме
  • redis-cli -a SecretPassword info replication | grep role — проверка роли

4. HAProxy для кластеров PGSQL, RabbitMQ, Redis

HAProxy — это программное обеспечение балансировки нагрузки и прокси-сервер, который часто используется в кластерах для распределения запросов по различным серверам баз данных. HAProxy принимает запросы от клиентов и направляет их к соответствующим серверам в кластере, чтобы достичь балансировки нагрузки и повысить производительность кластера. Адресация на кластера будет производится согласно портам сервисов.

4.1 Установка и запуск сервиса

dnf install haproxy

systemctl enable haproxy --now

4.2 Настройка

В файле /etc/haproxy/haproxy.cfg укажите адреса нод кластеров psql, rabbitmq, redis

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    log /dev/log local0
    log /dev/log local1 notice
    #chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
  
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    tcp
    log                     global
    retries                 3
    timeout queue           5s
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
 
listen stats
    mode http
    bind :7000
    stats enable
    stats uri /
 
### PostgreSQL ###
listen postgres_master
    bind :5000
    option tcplog
    option httpchk OPTIONS /master
    http-check expect status 200
    default-server inter 3s fastinter 1s fall 3 rise 4 on-marked-down shutdown-sessions
    server psql1 192.168.27.239:5432 check port 8008 #адрес первой ноды БД
    server psql2 192.168.27.219:5432 check port 8008 #адрес второй ноды БД
    server psql3 192.168.27.108:5432 check port 8008 #адрес третьей ноды БД
 
listen postgres_replicas
    bind :5001
    option tcplog
    option httpchk OPTIONS /replica
    balance roundrobin
    http-check expect status 200
    default-server inter 3s fastinter 1s fall 3 rise 2 on-marked-down shutdown-sessions
    server psql1 192.168.27.239:5432 check port 8008 #адрес первой ноды БД
    server psql2 192.168.27.219:5432 check port 8008 #адрес второй ноды БД
    server psql3 192.168.27.108:5432 check port 8008 #адрес третьей ноды БД
### PostgreSQL ###
 
### RabbitMQ ###
listen rabbitmq
    bind :5672
    mode tcp
    balance roundrobin
    server rabmq1 rabmq1.localdomain:5672 check inter 2s rise 2 fall 3 #адрес первой ноды брокера сообщений
    server rabmq2 rabmq2.localdomain:5672 check inter 2s rise 2 fall 3 #адрес второй ноды брокера сообщений
    server rabmq3 rabmq3.localdomain:5672 check inter 2s rise 2 fall 3 #адрес третьей ноды брокера сообщений
 
listen rabbitmq_management
    bind :15672
    balance source
    server rabmq1 rabmq1.localdomain:15672 check inter 2s #адрес первой ноды брокера сообщений
    server rabmq2 rabmq2.localdomain:15672 check inter 2s #адрес второй ноды брокера сообщений
    server rabmq3 rabmq3.localdomain:15672 check inter 2s #адрес третьей ноды брокера сообщений
### RabbitMQ ###
 
### Redis ###
frontend redis_master
  bind :6379
  mode tcp
  option tcplog
  option clitcpka
  timeout client 24h
  default_backend redis_master
 
backend redis_master
  balance first
  mode tcp
  timeout queue 2s
  timeout connect 2s
  timeout check 1s
  option srvtcpka
  timeout server 24h
  option tcp-check
  tcp-check connect
  tcp-check send AUTH\ SecretPassword\r\n #укажите пароль для мастера из пункта 3.2
  tcp-check send PING\r\n
  tcp-check expect string +PONG
  tcp-check send info\ replication\r\n
  tcp-check expect string role:master
  tcp-check send QUIT\r\n
  tcp-check expect string +OK
  server redis1 192.168.27.208:6379 check inter 5s
  server redis2 192.168.27.133:6379 check inter 5s
  server redis3 192.168.27.185:6379 check inter 5s
### Redis ###
  • haproxy -f /etc/haproxy/haproxy.cfg -d — для проверки конфигурации
  • sysmtectl status haproxy — для проверки статуса сервиса

5. NFS — хранение общих каталогов

При включенной службе firewalld необходимо добавить сервис и выполнить настройку для nfs.

# Добавляем службу:
sudo firewall-cmd --permanent --zone=public --add-service=nfs
   
# Перезапускаем службу firewalld:
sudo firewall-cmd --reload
   
# Проверяем правила для зоны public:
sudo firewall-cmd --zone=public --list-all

5.1 Установка

sudo dnf install nfs-utils nfs4-acl-tools -y

sudo systemctl enable nfs-server --now

5.2 Настройка

Каталоги для Сервера документов:

  • mkdir -p /mnt/ds/cache — общий каталог кэшированных данных (распакованных файлов) сервера документов
  • mkdir -p /mnt/ds/data/ — размещается файл лицензии с именно таким именем license.lic

Каталоги для Корпоративного сервера 2024:

  • mkdir -p /mnt/search — хранение индексов для поисковой системы
  • mkdir -p /mnt/disk
  • mkdir -p /mnt/disk/filestorage — хранение пользовательских данных
  • mkdir -p /mnt/disk/filestorage_temp — временный каталог хранения пользовательских данных
  • mkdir -p /mnt/disk/filestorage_temp_proc — каталог для хранения временных данных proccessing

5.2.1 Указание пользователя и группы на каталоги

Важно заметить, что в данной инструкции рассматривается чистая инсталляции без имеющихся Сервера документов (DS). Если у Вас уже есть DS, то необходимо указать UID и GID пользователя ds с ВМ, где установлен DS.

Можно воспользоваться командой:

id ds

В данной инструкции установки не рассматривается наличие уже установленного Документ сервера, поэтому UID и GID будут везде указаны 976. Если Вам важно сохранить имеющийся DS, то необходимо использовать GID и UID с данной ВМ, либо изменить их на ней, возможно использовать данные команды:

supervisorctl stop all
groupmod -g 976 ds
usermod -u 976 -g 976 ds
chown -R ds:ds /var/lib/r7-office/
chown -R ds:ds /var/www/r7-office/
chown -R ds:ds /etc/r7-office/

В случае если сервер не установлен перейдите к пункту 7 и после установки DS проверьте какие выданы GID и UID на установленном сервере документов

Создание пользователя на хосте с ролью NFS:

ВАЖНО: UID и GID пользователя ds должны быть одинаковые на всех ВМ с Документ сервером и NFS хранилищем

Создайте группу с gid 976

groupadd -g 976 ds

Создайте пользователя с uid 976 и добавляем его в группу с gid 976

useradd -u 976 -g 976  ds

Укажите права на каталоги

chown ds:ds -R /mnt/ds/

5.2.2 Редактируйте файл

/etc/exports

/mnt/ds/cache 192.168.26.0/24(rw,insecure,nohide,all_squash,anonuid=976,anongid=976,no_subtree_check)
/mnt/ds/data 192.168.26.0/24(rw,insecure,nohide,all_squash,anonuid=976,anongid=976,no_subtree_check)
/mnt/disk/filestorage 192.168.27.0/24(rw,nohide,all_squash,anonuid=119,anongid=131,no_subtree_check)
/mnt/disk/filestorage_temp 192.168.27.0/24(rw,nohide,all_squash,anonuid=119,anongid=131,no_subtree_check)
/mnt/disk/filestorage_temp_proc 192.168.27.0/24(rw,nohide,all_squash,anonuid=119,anongid=131,no_subtree_check)
/mnt/search 192.168.26.0/24(rw,nohide,all_squash,anonuid=972,anongid=972,no_subtree_check)

где,

  • /mnt/ds/cache –путь к папке, для которой раздается доступ;
  • 192.168.26.0/24 –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, включающая такой контроль, предполагается по умолчанию. Контроль поддерева можно не выполнять в том случае, если экспортируемый каталог совпадает с разделом диска;

Для публикации сетевых директорий

exportfs -ra

6. Кластер ДС

При включенной службе firewalld необходимо добавить сервис и выполнить настройку для Сервера документов.

# Добавляем службу:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
 
# Перезапускаем службу firewalld:
sudo firewall-cmd --reload
   
# Проверяем правила для зоны public:
sudo firewall-cmd --zone=public --list-all

6.1 Установите и запустите nginx

dnf install nginx -y

systemctl enable nginx --now

6.2 Установка утилита nfs и монтирование каталоги

6.2.1 Установите пакет

dnf install nfs-utils

6.2.2 Создайте группу и пользователя (id те же, что и на nfs должны быть)

groupadd -g 976 ds
useradd -u 976 -g 976 ds

6.2.3 Создайте каталоги

mkdir /var/lib/r7-office/documentserver/App_Data/cache -p
mkdir /var/www/r7-office/Data -p

6.2.4 Назначьте права

chown ds:ds -R /var/lib/r7-office/
chown ds:ds -R /var/www/r7-office/

6.2.5 Монтирование

sudo mount -t nfs -O uid=1100,iocharset=utf-8 192.168.26.247:/mnt/ds/cache /var/lib/r7-office/documentserver/App_Data/cache
sudo mount -t nfs -O uid=1100,iocharset=utf-8 192.168.26.247:/mnt/ds/data /var/www/r7-office/Data

Где,

  • 192.168.26.247 — ip nfs сервера;
  • /mnt/ds/cahce и /mnt/ds/data— каталог на nfs сервере;
  • /var/www/r7-office/Data и /var/lib/r7-office/documentserver/App_Data/cache — пути монтирования на ВМ с DS.

6.2.6 Проверьте монтирование

df -h

6.2.7 Добавьте запись в /etc/fstab

192.168.26.247:/mnt/ds/cache /var/lib/r7-office/documentserver/App_Data/cache nfs defaults 0 0
192.168.26.247:/mnt/ds/data /var/www/r7-office/Data nfs defaults 0 0

6.3 Установка Сервера документов и настройка

Произведите установку сервера документов по актуальной инструкции

В файл /etc/hosts добавьте запись для адресации с haproxy

192.168.27.83 haproxy

6.3.1 Конфигурация

Если это первая инсталляция, то файла этого нет, можете сделать рандомный секрет, например, командой ниже:
AuthorizationJwt можете использовать по умолчанию.

cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32

Задайте секрет и хедер

declare -x JWT_SECRET=VrTMopwWwGP1
declare -x JWT_HEADER=AuthorizationJwt

Это параметры из файла /etc/r7-office/documentserver/local.json
Должны быть ОДИНАКОВЫ для всех ВМ с DS в кластере, если используется JWT

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Если JWT необходимо отключить, то выполните данную команду

declare -x JWT_ENABLED=false

Запустите скрипт

bash documentserver-configure.sh

Будут запрошены данные
Для PostgreSQL:

  • Host: 192.168.27.83:5000
  • Database: ds
  • User: ds
  • Password: ds

Где,

  • host — ip адрес HAproxy;
  • Database — имя Базы Данных;
  • User — Имя пользователя;
  • Password — Пароль от пользователя.

Для AMQP

  • Host: 192.168.27.83
  • User: r7office
  • Password: r7office

Где,

  • host — ip адрес HAproxy;
  • user — пользователь для подключения;
  • password — пароль от пользователя.

В конфигурации /etc/r7-office/documentserver/local.json укажите в параметре rabbitmq:

"rabbitmq": {
"url": "amqp://r7office:r7office@192.168.27.83/ds"
},
  • где r7office:r7office — логин и пароль из пункта 2.3.2;
  • 192.168.27.83 — адрес сервера haproxy;
  • /ds — виртуальный адрес из пункта 2.3.2

Для Redis:

в файле /etc/r7-office/documentserver/default.json измените параметр host и добавьте опцию авторизации password:

"redis": {
                                "name": "redis",
                                "prefix": "ds:",
                                "host": "192.168.27.83",
                                "port": 6379,
                                "options": {
                                        "password": "SecretPassword"
                                }
                        },

Где,

  • host — ip адрес HAproxy;
  • prefix — ключи для идентификации сервера документов
  • port — порт подключения;
  • password — пароль от пользователя.

Выполните перезапуск служб сервера документов

systemctl restart ds-*

6.3.2 Проверьте статус служб

systemctl status ds-*

и логирование в файле /var/log/r7-office/documentserver/docservice/out.log

6.3.3 Повторить для всех нод Сервера документов и указать одинаковые параметры JWT secret и header

7. NGINX балансер (внешний)

При включенной службе firewalld необходимо добавить сервис и выполнить настройку для Nginx прокси сервера.

# Добавляем службу:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
 
# Перезапускаем службу firewalld:
sudo firewall-cmd --reload
   
# Проверяем правила для зоны public:
sudo firewall-cmd --zone=public --list-all

7.1 Установите и запустите nginx

dnf install nginx -y
systemctl enable nginx --now

7.2 Добавьте конфигурационный файл

7.2.1 /etc/nginx/conf.d/r7-ds.conf

Данная настройка является Проксированием HTTPS на HTTP (Прокси сервер на HTTPS, DS на HTTP)
Этот сценарий используется, если требуется обеспечить безопасное соединение, чтобы все запросы автоматически перенаправлялись на HTTPS

upstream docservice {
# Указать все сервера с DS
  server 192.168.26.65;
  server 192.168.26.133;
}
  
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.test3.s7-office.site;
  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.test3.s7-office.site;
  server_tokens off;
  root /usr/share/nginx/html;
  
  ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt;
  ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.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.test3.s7-office.site; — указано dns имя reverse proxy;
  • ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; — указан путь до полной цепочки сертификатов;
  • ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; — указан путь до закрытого ключа.

7.2.2 Проверьте конфигурацию

nginx -t

7.2.3 Перезапустите сервис

systemctl restart nginx

7.2.4 Проверьте доступность

Перейдите по адресу ds-cluster.s7-office.site.ru и будет отображаться страница запущенного сервера документов

8. Установка сервера приложений Корпоративный сервер 2024

Информация дополняет действия из статьи.

Корпоративный сервер — сервер приложений будет разведен на несколько серверов согласно схеме

При включенной службе firewalld необходимо добавить сервис и выполнить настройку для Корпоративного сервера и после развертки всей

# Добавляем службу:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
 
# Перезапускаем службу firewalld:
sudo firewall-cmd --reload
   
# Проверяем правила для зоны public:
sudo firewall-cmd --zone=public --list-all

8.1 Добавление репозитория

8.1.1 Откройте файл на редактирование

/etc/yum.repos.d/r7server.repo

8.1.2 Добавьте следующий текст

[r7server]
name=r7server
baseurl=https://downloads.r7-office.ru/repository/r7-server-yum/
enabled=1
gpgcheck=1
gpgkey=https://download.r7-office.ru/repos/RPM-GPG-KEY-R7-OFFICE.public
sslverify=1
username=server
password=KwmuQmOzuFIw9wcJsL3zb

8.1.3. Обновите список репозиториев с подгружаемыми данными

sudo yum makecache

8.2 Скачайте архив Р7-Диск для установки и положите его на ВМ

Рекомендуем, для корректной установки, архив разместить в директории, отличной от /root, например в /mnt или /tmp

8.2.1 Зайдите в директорию с архивом

cd /mnt

8.2.2 Распакуйте архив

unzip RedOS_*.zip

8.2.3 Выполните команду

sed -i "s/dnf install -y postgresql-client/dnf install -y postgresql/" CDDisk/install.sh

8.2.4 Настройка SSL

Перед установкой скопируйте crt и key файлы в папку sslcert.

Имя файла должно содержать название домена и расширение.

Обязательно в .crt указывать всю цепочку сертификатов, домен, промежуточные и корневой.

Например, для домена test3.s7-office.site имена файлов должны быть test3.s7-office.site.crt и test3.s7-office.site.key.

8.2.5 Добавьте права на исполнение скрипту

chmod +x online_installer.sh

8.2.6 Запустите установку

sudo bash ./online_installer.sh

На запрос пароля для sudo введите его

8.3 В процессе установки:

8.3.1 Чистая установка

Если требуется выполнить чистую установку (удалит имеющуюся инсталляцию Р7-Диск и зависимости):

  • Выберите Да

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

8.3.2 Установка СУБД

PostgreSQL будет на другой ВМ:

  • Выберите Да

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

8.3.3 Установка сервера документов:

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Сервер Документов находится на другой ВМ, то:

  • Выберите Нет

Также, необходимо сделать А запись в dns указывающий Ваш домен и IP адрес внешнего proxy nginx сервера из пункта 7

Пример добавленной А записи в DNS у провайдера Selectel указан на скриншоте:

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

8.3.4 URL Сервера документов

Укажите url и протокол, как в примере ниже

https://ds-cluster.test3.s7-office.site

8.3.5 Секрет для DS и формирования JWT

Введите секрет (Набор цифр, букв и спецсимволов. Длина от 8 символов) для защищённого доступа Р7-Диска и Сервера Документов — данные из пункта 6.3.1

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

8.3.6 Установка api и web диска

Основное приложения Р7-Диска и веба (статика) сайта.

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Для его установки:

  • Выберите Да

8.3.7 Тип СУБД Р7-Диск

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

  • Выберите PostgreSQL

8.3.8 Создание БД

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Создание БД не требуется

  • Выберите Нет

8.3.9 Хост СУБД

СУБД установлена отдельно,

  • укажите ip адрес haproxy

8.3.10 Порт СУБД

По умолчанию 5432 используется. Потребуется указать порт 5000

8.3.11 Пользователь с правами БД

созданный на этапе развертки БД пункт 2.3.1

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

8.3.12 Пароль пользователя

созданный на этапе развертки БД пункт 2.3.1

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

8.3.13 coremachinkey от CS

Измените на актуальный, если есть Р7-Офис Корпоративный сервер 2019 и нажмите ОК,

если нет, нажмите Ок без редактирования

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

8.3.14 Настройка https

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Проверьте наличие сертификата и ключа в каталоге ssl из пункта 8.2.4

Выберите Да

8.3.15 Укажите домен

Пример test3.s7-office.site

Необходимо указать домен, в котором у Вас созданы записи

Например, при домене r7.ru, необходимо создать запись *.test3.s7-oiffice.site. Пример записи в Selectel ниже c указанием proxy nginx из пункта

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

8.3.16 Префикс Р7-Диск

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб р7-Диска

Например, если Вы хотите, чтобы открылся Р7-Диск по адресу cddisk.test3.s7-oiffice.site, то указать нужно именно cddisk, без указания домена.

8.3.17 Префикс Р7-Админ

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб админ панели.

Например, если Вы хотите, чтобы открылся Р7-Админ по адресу admin.test3.s7-oiffice.site, то указать нужно именно admin, без указания домена.

8.3.18. Префикс Р7-Почта

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб календаря.

Например, если Вы хотите, чтобы открылся Р7-Календарь по адресу mail.test3.s7-oiffice.site, то указать нужно именно calendar, без указания домена.

8.3.19 Префикс Р7-Календарь

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб календаря.

Например, если Вы хотите, чтобы открылся Р7-Календарь по адресу calendar.test3.s7-oiffice.site, то указать нужно именно calendar, без указания домена.

8.3.20 Префикс Р7-Проекты

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб календаря.

Например, если Вы хотите, чтобы открылся Р7-Календарь по адресу projects.test3.s7-oiffice.site, то указать нужно именно calendar, без указания домена.

8.3.21 Перезагрузите систему

Для корректной работы Р7-Диска, требуется перезагрузка.

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

  • Введите Да;
  • Введите Нет, если требуется Вам выполнить дополнительные действия до перезагрузки.

Без перезагрузки Р7-Диск работать не будет

8.4 Включение rabbitmq для КС24 для проверки работы кластеров

/opt/r7-office/Api/appsettings.json
/opt/r7-office/Sso.Api/appsettings.json
/opt/r7-office/Processing/appsettings.json

Укажите адрес nginx балансера для сервисов

"rabbitMq": {
"host": "192.168.27.83", - укажите haproxy
"username": "r7office", - ранее созданные данные из пункта 3.2
"password": "r7office",
"timeout": 10
},

9. Продолжение настройки nginx proxy из пункта 7

При включенной службе firewalld необходимо добавить сервис и выполнить настройку для Корпоративного сервера и после развертки всей

# Добавляем службу:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
 
# Перезапускаем службу firewalld:
sudo firewall-cmd --reload
   
# Проверяем правила для зоны public:
sudo firewall-cmd --zone=public --list-all

9.1 Конфигурации:

Отредактируйте файл /etc/nginx/nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;
 
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
 
worker_cpu_affinity     auto;
worker_priority         -2;
worker_rlimit_nofile 30000;
pcre_jit        on;
 
events {
    multi_accept on;
        worker_connections      8192;
        use                     epoll;
}
 
http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
     
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   300;
    types_hash_max_size 4096;
    server_tokens off;
    keepalive_requests              10000;
    aio                             on;
    reset_timedout_connection       on;
    send_timeout                    1200;
    client_body_timeout             30;
    client_header_timeout           30;
    server_names_hash_max_size      4096;
     
        ##
        # Proxy Settings
        ##
 
        proxy_connect_timeout           300;
        proxy_send_timeout              300;
        proxy_read_timeout              300;
        proxy_temp_file_write_size      64k;
        proxy_buffer_size               4k;
        proxy_buffers                   32 16k;
        proxy_busy_buffers_size         32k;
        proxy_temp_path                 /var/lib/nginx/tmp/proxy;
        proxy_cache_valid               1h;
        proxy_cache_key                 $scheme$proxy_host$request_uri$cookie_US;
        proxy_cache_path                /var/lib/nginx/proxy  levels=1:2      inactive=2h     keys_zone=onee:10m  max_size=100m;
        #fastcgi_cache_path             /var/lib/nginx/fastcgi levels=1:2      inactive=2h     keys_zone=two:10m  max_size=100m;
    ##
    # Open file Settings
    ##
 
        open_file_cache                 max=100000 inactive=60s;
        open_file_cache_valid           30s;
        open_file_cache_min_uses        2;
        open_file_cache_errors          on;
 
        ##
        # Gzip Settings
        ##
 
        gzip                            on;
        gzip_min_length                 1000;
        gzip_proxied                    expired no-cache no-store private auth;
        gzip_types                      text/plain text/css text/javascript application/javascript application/x-javascript text/xml application/xml application/xml+rss application/json;
        gzip_disable                    "msie6";
        gzip_static                     on;
        gzip_proxied                    any;
        gzip_comp_level                 7;
        gzip_vary                       on;
 
        ssl_buffer_size 16k;
        http2_chunk_size 8k;
 
        resolver 77.88.8.8 valid=300s ipv6=off;
        resolver_timeout 5s;
 
        ##
        # Header Settings
        ##
 
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options nosniff;
        add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
        proxy_hide_header X-Powered-By;
     
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

Создайте конфигурации в /etc/nginx/conf.d/

admin.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/admin;
        index index.html;
 
        server_name admin.test3.s7-office.site; #укажите доменное имя модуля админ
        server_tokens off;
 
        client_max_body_size 25M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
         
        location /saml2 {
            proxy_set_header host $host;
            proxy_set_header X-real-ip $remote_addr;
            proxy_set_header X-forward-for $proxy_add_x_forwarded_for;
            proxy_set_header X-Module Admin;
            proxy_pass http://0.0.0.0:38034/saml2;
        }
         
        location /api {
            proxy_pass http://backend_api/api;
            proxy_set_header X-real-ip $remote_addr;
            proxy_set_header X-forward-for $proxy_add_x_forwarded_for;
            proxy_set_header X-Module Admin;
        }
         
        location /web-apps {
            proxy_pass http://0.0.0.0:8083/web-apps;
        }
         
        location / {
                try_files $uri $uri/ /index.html;
        }
}

calendar.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/calendar;
        index index.html;
 
        server_name calendar.test3.s7-office.site; #укажите доменное имя модуля календарь
        server_tokens off;
 
        client_max_body_size 25M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
                try_files $uri $uri/ /index.html;
        }
}

cddisk.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/cddisk;
        index index.html;
 
        server_name cddisk.test3.s7-office.site; #укажите доменное имя модуля главной страницы приложения
        server_tokens off;
 
        client_max_body_size 1024M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
                try_files $uri $uri/ /index.html;
        }
}

cdmail.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/cdmail;
        index index.html;
 
        server_name cdmail.test3.s7-office.site; #укажите доменное имя модуля почта
        server_tokens off;
 
        client_max_body_size 25M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
                try_files $uri $uri/ /index.html;
        }
}

contacts.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/contacts;
        index index.html;
 
        server_name contacts.test3.s7-office.site; #укажите доменное имя модуля контакты
        server_tokens off;
 
        client_max_body_size 32M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
            try_files $uri $uri/ /index.html;
        }
}

projects.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/projects;
        index index.html;
 
        server_name projects.test3.s7-office.site; #укажите доменное имя модуля проекты
        server_tokens off;
 
        client_max_body_size 32M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
            try_files $uri $uri/ /index.html;
        }
}

r7-ds.conf

upstream docservice { #укажите все ноды серверов документов для переключения в режиме round robin
  server 192.168.26.65;
  server 192.168.26.133;
}
  
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.test3.s7-office.site; #укажите доменное общее имя кластера серверов документов
  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.test3.s7-office.site; #укажите доменное общее имя кластера серверов документов
  server_tokens off;
  root /usr/share/nginx/html;
  
  ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
  ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.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;
  
  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;
  }
}

regfs.conf

server {
  listen 7777;
  root /usr/share/nginx/html;
 
location / {
  proxy_pass http://backend_reg;
  proxy_http_version 1.1;
  }
}

upstream.conf

upstream backend_api { #укажите адреса нод вынесенных api
        server 192.168.27.73:38033;
        server 192.168.27.143:38033;
}
upstream backend_reg{ #укажите адреса нод вынесенных registry+filestorage
        server 192.168.27.153:7777;
        server 192.168.27.109:7777;
}

9.2 Перенесите с КС следующие каталоги

/var/www/r7-office/admin

/var/www/r7-office/calendar

/var/www/r7-office/cddisk

/var/www/r7-office/cdmail

/var/www/r7-office/contacts

/var/www/r7-office/projects

10. Вынос processing

https://support.r7-office.ru/corporate-server2024/settings_cs-r7disk/vynos-servisa-processing-red-os-beta/

При включенной службе firewalld необходимо добавить порт 7777.

# Добавляем службу:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
  
# Добавляем порты:
firewall-cmd --zone=public --add-port=7777/tcp
  
# Применяем внесённые изменения:
firewall-cmd --runtime-to-permanent
  
# Проверяем правила для зоны public:
firewall-cmd --zone=public --list-all

10.1 На установленном КС

10.1.1 Заархивируйте необходимые файлы и директории

tar czvf processing.tar.gz --selinux /opt/r7-office/Processing /var/log/r7-office/CDDisk/R7.Storage.Server.Processing.Host /var/log/r7-office/CDDisk/Processing /etc/supervisord.conf /etc/supervisord.d /var/r7-office/filestorage_temp_proc

10.1.2 Узнайте uid и gid пользователя cddisk

id cddisk

10.2 На ВМ с ролью Processing

10.2.1 Настройка NFS

Укажите в /etc/fstab

192.168.26.247:/mnt/disk/filestorage_temp_proc /var/r7-office/filestorage_temp_proc nfs defaults 0 2

, где ip указывается адрес nfs

Примонтируйте каталог

mount -a

10.2.2 Перенесите архив с КС и распакуйте

tar xzvf processing.tar.gz --selinux -C /

10.2.3 Произведите установку на ВМ роли Processing

sudo dnf install dotnet-sdk-3.1 postgresql-odbc supervisor -y

10.2.4 Создайте группу и пользователя

groupadd -g 972 cddisk
useradd -u 972 -g 972 cddisk

10.2.5 Удалите лишние конфигурационные файлы

rm -f /etc/supervisord.d/{cddisk-api,cddisk-filestorage,cddisk-registry,cddisk-ssoapi,cddisk-searchapi}.ini

10.2.6 Отредактируйте файл

/etc/supervisord.d/cddisk.ini

Приведите к виду

[group:cddisk]
programs=processing

10.2.7 Отредактируйте файл

/opt/r7-office/Processing/appsettings.json

Хост с Registry

Укажите ip с внешним прокси сервером

"serviceRegistry": {
  "address": "http://192.168.27.35:7777"
},

Укажите ip HAProxy и корректные данные по доступу к БД и Rabbitmq из пункта

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=test;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;"
  },
"DbType": "postgre",
  "rabbitMq": {
    "host": "192.168.27.83",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  }

10.2.8 Перезапустите сервис и добавьте в автозагрузку

systemctl enable supervisord.service

systemctl restart supervisord.service

10.2.9 Повторите действия для последующих нод Processing

11. Вынос search

ссылка https://support.r7-office.ru/corporate-server2024/settings_cs-r7disk/vynos-servisa-search-red-os-beta/

При включенной службе firewalld необходимо добавить порт 2664.

11.1 На установленном КС

11.1.1 Заархивируйте необходимые файлы и директории

tar czvf search.tar.gz --selinux /opt/r7-office/SearchApi /var/log/r7-office/CDDisk/SearchApi /var/log/r7-office/CDDisk/Bsa.Search.Api.Host /etc/supervisord.d /var/r7-office/searchindex

11.1.2 Узнайте uid и gid пользователя cddisk

id cddisk

11.2 На ВМ с ролью Search

11.2.1 Настройка NFS

Укажите в /etc/fstab

192.168.26.247:/mnt/search /var/r7-office/searchindex nfs defaults 0 2

где ip указывается адрес nfs

Примонтируйте каталог

mount -a

Перенесите архив с КС и распакуйте

tar xzvf search.tar.gz --selinux -C /

11.2.2 Произведите установку

sudo dnf install dotnet-sdk-3.1 postgresql-odbc supervisor -y

11.2.3 Создайте группу и пользователя

groupadd -g 972 cddisk
useradd -u 972 -g 972 cddisk

11.2.4 Удалите лишние конфигурационные файлы

rm -f /etc/supervisord.d/{cddisk-api,cddisk-filestorage,cddisk-registry,cddisk-ssoapi,cddisk-processing,cddisk-ssoapi}.ini

11.2.5 Отредактируйте файл

/etc/supervisord.d/cddisk.ini

Приведите к виду

[group:cddisk]
programs=searchapi

11.2.6 Перезапустите сервис и добавьте в автозагрузку

systemctl enable supervisord.service

systemctl restart supervisord.service

11.2.7 Повторите действия для последующих нод Search

12. Вынос api

ссылка https://support.r7-office.ru/corporate-server2024/settings_cs-r7disk/vynos-servisa-api-red-os-beta/

При включенной службе firewalld необходимо добавить порт 2664.

# Добавляем службу:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
  
# Добавляем порты:
firewall-cmd --permanent --zone=public --add-port=38033/tcp
  
# Применяем внесённые изменения:
firewall-cmd --runtime-to-permanent
  
# Проверяем правила для зоны public:
firewall-cmd --zone=public --list-all

12.1 На установленном КС

12.1.1 Заархивируйте необходимые файлы и директории

tar czvf api.tar.gz --selinux /opt/r7-office/Api/ /opt/r7-office/Sso.Api /var/log/r7-office/CDDisk/R7.Storage.Server.Api.Host /var/log/r7-office/CDDisk/R7.Sso.Api.Host /var/log/r7-office/CDDisk/Api /var/log/r7-office/CDDisk/R7.Sso.Api.Host /etc/supervisord.conf /etc/supervisord.d /var/r7-office/filestorage_temp

12.1.2 Узнайте uid и gid пользователя cddisk

id cddisk

12.2 На ВМ с ролью API

12.2.1 Настройка NFS

Укажите в /etc/fstab

192.168.26.247:/mnt/disk/filestorage_temp /var/r7-office/filestorage_temp nfs defaults 0 2

где ip указывается адрес nfs

Примонтируйте каталог

mount -a

12.2.2 Перенесите архив с КС и распакуйте

tar xzvf api.tar.gz --selinux -C /

12.2.3 Произведите установку на ВМ роли Processing

sudo dnf install dotnet-sdk-3.1 postgresql-odbc supervisor -y

12.2.4 Создайте группу и пользователя

groupadd -g 972 cddisk
useradd -u 972 -g 972 cddisk

12.2.5 Удалите лишние конфигурационные файлы

rm -f /etc/supervisord.d/{cddisk-processing,cddisk-filestorage,cddisk-registry,cddisk-searchapi}.ini

12.2.6 Отредактируйте файл

/etc/supervisord.d/cddisk.ini

Приведите к виду

[group:cddisk]
programs=api,apisso

12.2.7 Отредактируйте файл

/opt/r7-office/Api/appsettings.json

Хост с Registry

Укажите ip с внешним прокси сервером

"serviceRegistry": {
  "address": "http://192.168.27.35:7777"
},

Укажите ip HAProxy и корректные данные по доступу к БД и Rabbitmq из пункта

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=test;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;"
  },
"DbType": "postgre",
  "rabbitMq": {
    "host": "192.168.27.83",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  }

12.2.8 Отредактируйте файл

/opt/r7-office/Sso.Api/appsettings.json

Хост с Registry

Укажите ip с внешним прокси сервером

"serviceRegistry": {
  "address": "http://192.168.27.35:7777"
},

Укажите ip HAProxy и корректные данные по доступу к БД и Rabbitmq из пункта

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=test;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;"
  },
"keyPhraze": "3_Dd1d05fnaddf",
  "rabbitMq": {
    "host": "192.168.27.83",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  }

12.2.9 Перезапустите сервис и добавьте в автозагрузку

systemctl enable supervisord.service

systemctl restart supervisord.service
supervisorctl restart all

12.2.10 Повторите действия для последующих нод API

13. Вынос registry+filestorage

При включенной службе firewalld необходимо добавить порт 2664.

# Добавляем службу:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
  
# Добавляем порты:
firewall-cmd --permanent --zone=public --add-port=11581/tcp
firewall-cmd --permanent --zone=public --add-port=11580/tcp
 
# Применяем внесённые изменения:
firewall-cmd --runtime-to-permanent
  
# Проверяем правила для зоны public:
firewall-cmd --zone=public --list-all

13.1 На установленном КС

13.1.1 Заархивируйте необходимые файлы и директории

tar czvf regfs.tar.gz --selinux /opt/r7-office/FileStorage /opt/r7-office/Service.Registry /var/log/r7-office/CDDisk/FileStorage /var/log/r7-office/CDDisk/Service.Registry /etc/supervisord.conf /etc/supervisord.d /var/r7-office/filestorage

13.1.2 Узнайте uid и gid пользователя cddisk

id cddisk

13.2 На ВМ с ролью Registry+Filestorage

13.2.1 Настройка NFS

Укажите в /etc/fstab

192.168.26.247:/mnt/disk/filestorage /var/r7-office/filestorage nfs defaults 0 2

где ip указывается адрес nfs

Примонтируйте каталог

mount -a

13.2.2 Перенесите архив с КС и распакуйте

tar xzvf regfs.tar.gz --selinux -C /

13.2.3 Произведите установку

sudo dnf install dotnet-sdk-3.1 postgresql-odbc supervisor -y

13.2.4 Создайте группу и пользователя

groupadd -g 972 cddisk
useradd -u 972 -g 972 cddisk

13.2.5 Удалите лишние конфигурационные файлы

rm -f /etc/supervisord.d/{cddisk-processing,cddisk-searchapi,cddisk-ssoapi,cddisk-api}.ini

13.2.6 Отредактируйте файл

/etc/supervisord.d/cddisk.ini

Приведите к виду

[group:cddisk]
programs=filestorage,registry

13.2.7 Отредактируйте файл

/opt/r7-office/Service.Registry/appsettings.json

"Clients": [
    {
      "id": "IFileStorageService",
      "host": "http://192.168.27.153:11580/"
    },
    {
      "id": "IFileStorageRestService",
      "host": "http://192.168.27.153:11580/"
    },
    {
      "id": "IFolderStorageRestService",
      "host": "http://192.168.27.153:11580/"
    },
 
    { "id": "ITcpFolderStorageService",
      "Address": "192.168.27.153",
      "Port": "11581"
    },
    { "id": "ITcpFileStorageService",
      "Address": "192.168.27.153",
      "Port": "11581"
    },
    {
      "id": "ISearchService",
      "host": "http://192.168.26.187:2664"
    },
    {
      "id": "ISearchService",
      "host": "http://192.168.26.36:2664"
    }
  ],
  "ServiceRegistry": {
    "Host": "http://192.168.27.153:7777"
  }
}

, где

  • 192.168.27.153 — адрес текущего сервера
  • 192.168.26.187 и 192.168.26.36 — адреса нод Search

13.2.8 Отредактируйте файл

/opt/r7-office/FileStorage/appsettings.json

Укажите адрес текущего сервера

"FileStorage": {
    "Host": "http://192.168.27.153:11580"
  }

13.2.9 Повторите действия для других нод Registry+filestorage

14. Проверка работы сервиса

Перейдите по dns имени внешнего nginx (настройка производилась в пункте 9), используя имя cddisk.test3.s7-office.site.

По умолчанию логин и пароль superadmin

Перейдите по ссылкам из стартовой страницы для проверки работы приложения.

Была ли полезна статья?
Позвольте нам стать лучше