1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chenaisheng-pgclusteradmin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 31 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 18:48 605714b

Pgclusteradmin — это инструмент для управления кластерами PostgreSQL, разработанный на основе Go.

Основные функции:

  • централизованное управление данными узлов;
  • онлайн-конфигурация параметров запуска и управление несколькими версиями файлов конфигурации;
  • управление шаблонами конфигурационных файлов;
  • запуск, остановка, перезапуск и отображение состояния служб;
  • привязка и отвязка виртуальных IP-адресов (VIP) к узлам;
  • пробуждение резервных машин;
  • автоматическое переключение между основным и резервным узлами;
  • генерация и экспорт отчётов о проверках;
  • инструменты управления процессами и блокировками таблиц;
  • инструмент для сбора статистики запросов.

Система поддерживает многопользовательский режим, аутентификацию, а также SSH-аутентификацию с использованием паролей и публичных ключей. Пользователи могут удалённо управлять системой через браузер. Интерфейс пользователя реализован с помощью EasyUI.

Функциональный список:

  1. Добавление, редактирование и удаление данных об узлах.
  2. Конфигурация параметров запуска для каждого узла, управление несколькими версиями конфигурационных файлов и шаблонами конфигураций.
  3. Запуск, остановка, перезагрузка и отображение статуса служб на отдельных узлах.
  4. Привязка и отвязка VIP-адресов к конкретным машинам.
  5. Управление пробуждением резервных машин.
  6. Автоматическое переключение между основными и резервными узлами.
  7. Генерация и экспорт отчётов о проверках.
  8. Инструменты управления процессами.
  9. Инструменты управления блокировками таблиц.
  10. Инструмент для сбора статистики запросов.

Среда развёртывания:

  • IP: 192.168.0.231;
  • операционная система: CentOS 6.9;
  • язык программирования Go: версия go1.8.3 для Linux/AMD64;
  • PostgreSQL: версия 9.6.1.

Для установки и настройки среды разработки необходимо выполнить следующие шаги:

  1. Установка Go.

    • Скачать архив с исходным кодом Go: wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz.
    • Распаковать архив: tar zxf go1.8.3.linux-amd64.tar.gz -C /usr/local.
  2. Настройка переменных окружения Go.

    • Открыть файл /etc/profile в редакторе: vim /etc/profile.
    • Добавить строки:
      GOROOT=/usr/local/go
      GOBIN=$GOROOT/bin
      PATH=$PATH:$GOBIN
      GOPATH=/home/go
      export GOROOT GOBIN GOPATH PATH
    • Сохранить изменения и выйти из редактора.
    • Выполнить команду для активации изменений: source /etc/profile.
    • Проверить версию Go: go version.
  3. Установка PostgreSQL.

    • Загрузить исходный код PostgreSQL: wget https://ftp.postgresql.org/pub/source/v9.6.1/postgresql-9.6.1.tar.gz.
    • Разархивировать файл: tar zxf postgresql-9.6.1.tar.gz.
    • Скомпилировать и установить PostgreSQL:
      • Перейти в каталог с исходниками: cd postgresql-9.6.1.
      • Запустить скрипт настройки: ./configure --prefix=/usr/local/pgsql9.6.1 --with-perl --with-tcl --with-python --with-openssl --with-pam --without-ldap --with-libxml --with-libxslt.
      • Собрать PostgreSQL: gmake.
      • Установить PostgreSQL: gmake install.
    • Инициализировать базу данных:
      • Войти в систему как пользователь postgres: su postgres.
      • Создать каталог для хранения данных: /usr/local/pgsql9.6.1/bin/initdb -D /home/postgres/data9.6.1 -E utf8 -U postgres -W.
    • Настроить файл конфигурации PostgreSQL (postgresql.conf):
      • Включить приём подключений со всех адресов: listen_addresses = '*'.
      • Определить место хранения логов: log_destination = 'csvlog'.
      • Включить сборщик журналов: logging_collector = on.
    • Настроить файл конфигурации аутентификации (pg_hba.conf):
      • Разрешить подключения с хостов из сети 192.168.1.0/24 с использованием метода аутентификации MD5: host all all 192.168.1.0/24 md5.
    • Перезапустить службу PostgreSQL после внесения изменений в конфигурацию.
    • Создать базу данных pgcluster и настроить параметры кодировки и шаблона:
      • Подключиться к PostgreSQL: /usr/local/pgsql9.6.1/bin/psql -h 192.168.1.10 -U postgres -d postgres -p 5432.
      • Выбрать базу данных postgres: postgres=# \c postgres.
      • Создать новую базу данных: create database pgcluster ENCODING 'utf8' template template0;.
      • Переключиться на новую базу данных: \c pgcluster.
      • Импортировать скрипт создания таблиц (pgcluster.sql).
  4. Скачать необходимые пакеты Go.

    • Для поддержки SSH:
      • Перейти в каталог /usr/local/go/src/github.com/.
      • Создать новый каталог golang.org: mkdir golang.org.
      • Перейти в этот каталог: cd golang.org/.
      • Создать подкаталог x: mkdir x.
      • Перейти в него: cd x/.
      • Клонировать репозиторий пакета поддержки SSH: git clone https://github.com/golang/crypto.git.
    • Для работы с сессиями:
      • Вернуться в каталог верхнего уровня /usr/local/go/src: cd /usr/local/go/src.
      • Создать каталоги github.com и astaxie: mkdir github.com astaxie.
      • Перейти в astaxie/: cd github.com/astaxie/.
      • Клонировать пакет поддержки сессий: git clone https://github.com/astaxie/session.
    • Для взаимодействия с PostgreSQL:
      • Вернуться в каталог верхнего уровня: cd /usr/local/go/src/github.com/.
      • Создать каталог pkg: mkdir pkg.
      • Перейти туда: cd pkg.
      • Клонировать пакеты поддержки ошибок и pgx:
        • git clone https://github.com/pkg/errors.
        • git clone https://github.com/jackc/pgx.

Это только часть текста, переведённая без учёта контекста. Если вам нужен полный перевод, пожалуйста, уточните запрос. ### Четыре, pgclusteradmin: развёртывание конфигурации и доступ

Скачивание исходного кода pgclusteradmin

[root@ad pgclusteradmin]# cd /home/ad
[root@ad ad]# git clone https://github.com/chenaisheng/pgclusteradmin
Клонирование в 'pgclusteradmin'...
Получение объектов: 374, сделано.
Сжатие объектов: 100% (177/177), сделано.
Всего 374 (дельта 201), повторно использовано 348 (дельта 185), повторно использовано без сжатия 0
Приём объектов: 100% (374/374), 284.09 КиБ | 197.00 КиБ/с, сделано.
Обработка дельт: 100% (201/201), сделано.
[root@ad ad]#

Настройка параметров подключения к базе данных

Откройте файл pgclusteradmin.go, перейдите в конец и найдите функцию extractConfig(), код которой выглядит следующим образом:

/*
Функция: настройка параметров соединения с PostgreSQL

Параметры: нет
Возвращаемое значение: pgx.ConnConfig — структура параметров соединения pgx
*/

func extractConfig() pgx.ConnConfig {

    var config pgx.ConnConfig

    config.Host = "127.0.0.1" // Хост или IP-адрес главного сервера базы данных
    config.User = "postgres"     // Пользователь для подключения
    config.Password = "pgsql"    // Пароль пользователя
    config.Database = "pgcluster" // Имя подключаемой базы данных
    config.Port = 5432            // Номер порта

    return config       
}  

Измените параметры в соответствии с конфигурацией PostgreSQL.

Конфигурация учётных записей пользователей для управления базой данных (пользователей операционной системы, обычно с именем пользователя postgres) и администраторов операционных систем (обычно с именем root) для удалённого входа по SSH с использованием закрытых ключей — этот шаг можно пропустить, если не используется аутентификация на основе закрытых ключей

Как настроить использование открытых и закрытых ключей для входа по SSH

1. Войдите как пользователь root и выполните следующую команду. Следуйте инструкциям на экране:

ssh-keygen -t rsa    также можно использовать DSA
Генерация пары открытого и закрытого ключей RSA.
Введите файл, в котором сохранить ключ (/root/.ssh/id_rsa):                 
Рекомендуется просто нажать Enter, чтобы использовать путь по умолчанию
Создан каталог '/root/.ssh'
Введите парольную фразу (оставьте пустым, чтобы не вводить):            
Введите ту же парольную фразу ещё раз:                                  
Ваша идентификационная информация сохранена в файле /root/.ssh/id_rsa.
Ваш открытый ключ сохранён в файле /root/.ssh/id_rsa.pub.
Отпечаток ключа:
05:71:53:92:96:ba:53:20:55:15:7e:5d:59:85:32:e4 root@test
Изображение отпечатка ключа в формате randomart:
+--[ RSA 2048]----+
|   o o ..                |
| . o oo.+ .            |
| o.+... =               |
| ...o                     |
| o S                     |
| .                         |
|                           |
|                           |
|                           |
+--------------------+

На этом этапе в каталоге /root/.ssh создаются два файла: id_rsa — закрытый ключ, id_rsa.pub — открытый ключ.
Скопируйте открытый ключ в файл /root/.ssh/authorized_keys на компьютере, который будет использоваться для входа.
Теперь, когда вы сохранили свой закрытый ключ, ваш сервер стал намного безопаснее, чем при использовании входа с паролем от пользователя root.

2. Генерация открытых и закрытых ключей для пользователя базы данных postgres выполняется аналогично генерации ключей для пользователя root, также можно совместно использовать одну пару открытых и закрытых ключей.

3. Откройте файл pgclusteradmin.go и перейдите в конец. Найдите функции get_postgres_private_key() и get_root_private_key(). Скопируйте туда закрытые ключи, используемые пользователем базы данных и администратором операционной системы.

Запуск pgclusteradmin

[root@ad ad]# cd pgclusteradmin/
[root@ad pgclusteradmin]# go run pgclusteradmin.go

Доступ к pgclusteradmin

Запустите браузер и введите адрес http://192.168.0.231:10001, где 192.168.0.231 — это ваш IP-адрес. Вы войдёте в систему с учётными данными администратора: имя пользователя и пароль — admin.

Регистрация pgclusteradmin как службы (используется при развёртывании в рабочей среде, для тестирования можно пропустить)

1. Скомпилируйте программу pgclusteradmin.go в исполняемый файл:

[root@ad pgclusteradmin]# go build pgclusteradmin.go

2. Скопируйте программу pgclusteradmin и каталог easyui в каталог /usr/local/pgclusteradmin:

[root@ad pgclusteradmin]# mkdir /usr/local/pgclusteradmin
[root@ad pgclusteradmin]# cp pgclusteradmin easyui/ /usr/local/pgclusteradmin -rf

3. Скопируйте скрипт службы в каталог /etc/init.d/:

[root@ad pgclusteradmin]# cp ./etc/init.d/pgclusteradmin /etc/init.d/pgclusteradmin 
[root@ad pgclusteradmin]# chmod +x /etc/init.d/pgclusteradmin 

4. Настройте pgclusteradmin в качестве службы:

[root@ad pgclusteradmin]# chkconfig --add pgclusteradmin 
[root@ad pgclusteradmin]# chkconfig --list | grep pgclusteradmin 
pgclusteradmin  0:отключено  1:отключено  2:включено  3:включено  4:включено  5:включено  6:отключено

5. Протестируйте службу pgclusteradmin:

[root@ad pgclusteradmin]# service pgclusteradmin start **Запуск pgclusteradmin**

[root@ad pgclusteradmin]# service pgclusteradmin status pgclusteradmin (pid 15686) уже запущен.

[root@ad pgclusteradmin]# service pgclusteradmin restart Остановка pgclusteradmin... Запуск pgclusteradmin...

[root@nfs pgclusteradmin]# service pgclusteradmin status pgclusteradmin (pid 15717) уже запущен.

[root@ad pgclusteradmin]# service pgclusteradmin help Использование: /etc/init.d/pgclusteradmin {start|stop|status|restart|help} start — запуск pgclusteradmin; stop — остановка pgclusteradmin; status — отображение текущего статуса pgclusteradmin; restart — перезапуск pgclusteradmin, если он работает, путём отправки SIGHUP или запуск, если не работает; help — эта информация.

Пять. Графический интерфейс

  • Главная страница: описание.
  • Добавление узла: описание.
  • Конфигурация параметров: описание.
  • Управление службами: описание.
  • Привязка VIP: описание.
  • Пробуждение резервного сервера: описание.
  • Переключение основного и резервного серверов: описание.
  • Создание отчёта о проверке: описание.
  • Состояние отчёта о проверке: описание.
  • Отчёт о проверке табличного пространства: описание.
  • Отчёт о проверке роли: описание.
  • Отчёт о проверке базы данных: описание.
  • Отчёт о проверке таблицы: описание.
  • Отчёт о проверке внешней таблицы: описание.
  • Инструмент управления — управление процессами: описание.
  • Инструмент управления — блокировка таблицы — блокирующая блокировка: описание.
  • Инструмент управления — блокировка таблицы — двухфазная фиксация: описание.
  • Инструмент управления — статистика запросов: описание.

Шесть. Журнал обновлений

2017-08-20

  • В инструмент управления — блокировку таблицы добавлен функционал мониторинга «двухфазной фиксации» блокирующей блокировки, что вместе с ранее существовавшим мониторингом текущей блокирующей блокировки обеспечивает полный мониторинг блокировок PostgreSQL.
  • Исправлены проблемы с выбором флажков в инструменте управления — управлением процессами и инструментом управления — блокировкой таблицы, которые после операции оставались выбранными.
  • Из инструмента управления — блокировки таблицы удалён запрос ко всем базам данных, который приводил к несоответствию при выборе соответствующего отношения.

2017-08-16

  • Написан скрипт управления службой pgclusteradmin. Скрипт хранится в исходном пакете в каталоге etc/init.d и называется pgclusteradmin. Это сценарий оболочки.
  • Добавлен инструмент управления — управление службами для управления соединениями пользователей PostgreSQL и поддержки функций отмены запроса в режиме онлайн и уничтожения процесса.
  • Добавлен инструмент управления — блокировка таблиц для управления мониторингом блокировок PostgreSQL в различных состояниях ожидания, а также поддержки функций отмены запросов в режиме онлайн и уничтожения процессов. Благодарим «Деге» за предоставление метода мониторинга блокировок PostgreSQL до версии 9.5.
  • Добавлен инструмент управления — статистика запросов для визуализации статистики данных pg_stat_statements. Требуется поддержка модуля pg_stat_statements.
  • Переработана документация по инструментам, добавлена структура документации для удобства использования.

2017-08-08

  • Отчёт о проверке дополнен статистическими показателями «внешней таблицы».
  • Статистические показатели «табличных данных» дополнены «оценкой количества записей (reltuples)», «отклонением количества записей» (количество записей — reltuples), оценкой занимаемого дискового пространства (relpages), количеством строк на запись, либо pg_table_size()/количеством записей или reltuples.
  • Объединена статистика объектов «материализованного представления» в существующую статистику «табличные данные».
  • Соответствующие изменения внесены в экспорт отчётов о проверках.
  • Исправлено количество записей в функции inspection_report_table_rownum_update_run для разных баз данных, одного режима и одной таблицы.
  • Устранена проблема с нулевыми значениями в функции inspection_report_state_make при подсчёте занимаемого узлами пространства.

2017-06-19

  • Исправлена ошибка ssh: must specify HostKeyCallback в функции ssh_connect.
  • Исправлена ошибка в функции str_is_ip, связанная с определением IP-адреса.
  • Решена проблема выполнения на некоторых компьютерах CentOS в функции get_node_ip_bind_status.

2017-05-23

  • Оптимизирован способ создания отчётов о проверках, добавлены параметры для учёта баз данных и рассмотрения системных объектов, ограничения максимального числа процессов при подсчёте количества строк в таблице и решения проблемы высокой нагрузки на систему при подсчёте количества записей в больших таблицах. Подсчёт количества записей в таблице стал асинхронным, поэтому после успешного создания отчёта о проверке количество записей в таблице может быть ещё не подсчитано, особенно в больших таблицах. Только когда вы увидите, что значение «завершён ли подсчёт» в списке отчётов о проверке равно «да», все подсчёты будут завершены.
  • 2017-05-05
  • Добавлена основная функция отчёта о проверках.

2017-04-16

  • Исправлен существующий баг в интерфейсе getnode_type_and_status.

2017-04-12

  • Во всех интерфейсах или функциях, связанных с SSH-подключением, добавлен метод аутентификации с использованием открытого и закрытого ключей.

2017-04-04

  • Добавлены управление несколькими версиями параметров и управление шаблонами файлов параметров.

2017-03-28

  • Устранена утечка памяти из-за невозможности освободить ресурсы при подключении по SSH.

2017-03-23

  • Исправлена ошибка, связанная с неправильным присвоением значения переменной modlename в обработчике parameter_saveHandler.

2017-03-22

  • Добавлен новый функциональный модуль «пробуждение резервных серверов», поддерживающий пробуждение одним нажатием и привязку VIP. После успешного пробуждения система автоматически проверяет, находится ли узел в «режиме синхронной репликации» и есть ли «синхронизация с резервным сервером». Если это «режим синхронной репликации», а «синхронизации с резервным сервером» нет, программа автоматически переводит узел в режим «асинхронной репликации».
  • Переписан интерфейс «управление службами», решена проблема извлечения ошибочных журналов после перенаправления журналов.
  • Некоторые интерфейсы оптимизированы, выполнение кода в асинхронном режиме повысило эффективность выполнения.

2017-03-14

  • Добавлен новый функциональный модуль «конфигурация параметров», поддерживающий сохранение и перезагрузку одним нажатием или сохранение и перезапуск одним нажатием, а также просто сохранение текущей конфигурации.

2017-03-13

  • Добавлен новый функциональный модуль «управление VIP», чтобы обеспечить лучшую совместимость приложений при переключении между основным и резервным серверами, мы привяжем IP-адрес к службе PostgreSQL узлов.

2017-03-12

  • Функция getnode_type_and_status изменена для передачи и возврата значений по каналам без указания адреса.
  • Функция get_node_ip_bind_status возвращает данные по каналу в виде структуры, а не сериализованных значений структуры, что упрощает вызов в других местах.
  • Функция master_slave_relation_check изменена для передачи аргументов по каналам без указания адресов.

2017-03-11

  • При добавлении и редактировании узлов ограничено повторение «имени хоста + пути к данным».
  • Index.html оптимизирован для операций.

2017-03-09

  • Функция ssh_run_chan изменена для возврата данных по каналу с более простым типом данных.
  • Интерфейс promoteHandler исправлен, ранее в главном резервном узле при передаче переменных в функцию master_slave_relation_check аргументы были перепутаны.

2017-03-08

  • Интерфейс getnoderowsHandler изменён с последовательного получения списка состояний каждого узла на асинхронный, что значительно повышает эффективность возврата интерфейса списка. 2017-3-7

    1. Изменить интерфейс «promoteHandler», чтобы вместо последовательного выполнения было многократное асинхронное выполнение, что ускорит выполнение.

2017–3–4

    1. Исправить все ошибки в проекте, связанные с тем, что не найдены команды ip и ifconfig.

2017–3–3

    1. Исправить интерфейс «promote_get_ip_bind_statusHandler» (интерфейс для получения информации о привязке IP к основному и резервному узлам), чтобы он асинхронно получал информацию об IP обоих узлов одновременно, что улучшит скорость отклика программы.
    1. Исправить ошибку в интерфейсе «insertnodeHandler» (добавление данных узла), связанную с преждевременным выполнением rows.Close().
    1. Внести изменения в интерфейсы «insertnodeHandler» и «updatenodeHandler» (изменение данных узла) и запретить повторение host + pg_port.
    1. Исправить проблему в index.html, из-за которой после удаления данных узла на стороне клиента невозможно выполнить переключение между основным и резервным узлами без обновления страницы.
    1. Исправить баг в index.html, связанный с некорректной оценкой типа основного и резервного узлов при переключении между ними на стороне клиента.
    1. Исправить ошибку при выполнении команды ip a в интерфейсе get_node_ip_bind_status, связанную с невозможностью найти IP.

План разработки

    1. Оптимизировать код на стороне сервера и клиента, чтобы разделить модули и сделать их независимыми друг от друга, что облегчит совместную работу нескольких разработчиков в будущем.

Свяжитесь с нами

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/chenaisheng-pgclusteradmin.git
git@api.gitlife.ru:oschina-mirror/chenaisheng-pgclusteradmin.git
oschina-mirror
chenaisheng-pgclusteradmin
chenaisheng-pgclusteradmin
master