Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Если данных в указанной таблице немного, то гораздо удобнее будет копировать таблицу целиком,
- нежели проверять какие данные изменились и после их отдельно копировать в другую таблицу.
- SQL Запрос будет выглядеть следующим образомЖ
- INSERT INTO Doctors_copy
- SELECT *
- FROM Doctors;
- Либо копировать по столбцам:
- INSERT INTO Doctors_copy (`a1_2`, `a2_2`, `a3_2`, `a4_2`)
- SELECT `a1`, `a2`, `a3`, `a4`
- FROM Doctors;
- Но на мой взгляд правильнее будет создать реплику базы Doctors.
- Внутри, при репликации, запросы, которые изменяют данные, направляются на основной сервер, там копируются и направляются на реплики
- и там повторяются.
- Создание реплики позволит держать обе базы (Doctors and Doctors_copy) в актуальном,
- синхронизированном виде, а также позволит решить такие проблемы как:
- Масштабируемость:
- Один сервер может не справляться с нагрузкой, вызываемой одновременными операциями чтения и записи в БД.
- Выгода от создания реплик будет тем больше, чем больше операций чтения приходится на одну операцию записи.
- Отказоустойчивость:
- В случае отказа реплики, все запросы чтения можно безопасно перевести на мастера.
- Если откажет мастер, запросы записи можно перевести на реплику.
- Резервирование данных:
- Реплику можно «тормознуть » на время, чтобы выполнить dump, а мастер — нет.
- Отложенные вычисления:
- Тяжелые и медленные SQL-запросы можно выполнять на отдельной реплике,
- не боясь помешать нормальной работе всей системы.
- При этом изменяющие данные запросы адресуем master-серверу, а запросы на чтение к slave-серверу,
- при увеличении нагрузки на чтение можно создать несколько slave-серверов и распределить между ними нагрузку.
- Из баз данных я бы выбрал или MySQL или PostgreSQL, обе базы поддерживают возможности репликации.
- В качестве ОС использовал бы Linux Ubuntu, Red Hat, Debian
- которые используются на большинстве серверов и отлично себя зарекомендовали бесперебойной работой.
- Далее будет приведен примерный список команд для установки и настройки PostgreSQL для работы master-slave:
- Для начала установим PostgreSQL на две машины:
- $ sudo apt install postgresql-9.6
- Запускаем его и добавляем в автозагрузку:
- $ systemctl start postgresql-9.6
- $ systemctl enable postgresql-9.6
- Авторизуемся под пользователем:
- $ sudo su - postgres
- Входим в psql:
- $ psql
- Задаем пароль:
- $ \password postgres
- Разрешаем компьютерам общаться:
- $ sudo ufw allow postgresql/tcp
- $sudo ufw allow 5432/tcp
- $ sudo ufw allow 5433/tcp
- Далее настраиваем отдельно мастер и отдельно slave:
- Для настройки master-сервера:
- Изменяем содержимое файла postgresql.conf в папке /etc/postgresql/9.6/main/ - устанавливаем нужные настройки, адреса серверов и т.д.
- Для настройки slave-сервера:
- Останавливаем работу slave-сервера, далее копируем данные с master-сервера.
- После этого меняем настройки /etc/postgresql/9.6/main/postgresql.conf.
- И снова запускаем службу.
- На этом настройка закончена. Тестируем все ли работает верно, если нет разбираемся и исправляем.
- Если все верно, наслаждаемся)
- При асинхронной репликации данные на slave-сервере могут появится с небольшой задержкой.
- Поэтому, в последовательных операциях необходимо использовать чтение с master-сервера, чтобы получить актуальные данные.
- При синхронной репликации запрос исполняется на master-сервере, затем пересылается на slave-сервер,
- которые в свою очередь уже отвечает на поступивший запрос. Таким образов обе базы в актуальном состоянии.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement