The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Настройка Mysql кластера (mysql cluster replication)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: mysql, cluster, replication,  (найти похожие документы)
From: TuxR <http://www.rostovlinux.ru>; Date: Mon, 20 May 2006 18:21:07 +0000 (UTC) Subject: Настройка Mysql кластера Оригинал: http://www.rostovlinux.ru/content/view/966/56/ Это руководство было написано более года назад и это отличный признак, что оно не обновлялось с тех пор! Если у вас есть вопросы, пишите или купите мою книгу (US). Введение У вас ДОЛЖЕН быть третий сервер, как управляющий узел, но он может быть выключен после запуска кластера. Заметьте также, что я не рекомендую выключать управляющий сервер (смотрите дополнительные замечания внизу документа для получения более полной информации). Вы не можете запустить mysql кластер всего лишь с двумя серверами И иметь настоящую избыточность . Вам следует также запретить SELinux или применить следующие правила: (большое спасибо Robin Bowes который рассказал мне это): allow mysqld_t port_t:tcp_socket name_connect; allow mysqld_t var_lib_t:file append; allow mysqld_t var_lib_t:sock_file create; allow mysqld_t var_lib_t:file read; allow mysqld_t var_lib_t:sock_file unlink; allow mysqld_t var_lib_t:file { getattr write }; Несмотря на то, что возможно настроить кластер на двух физических серверах вы НЕ ПОЛУЧИТЕ возможность "убить" один сервер и чтобы кластер, при этом, продолжал нормально работать. Для этого вам нужен третий сервер выполняющий управляющие функции. Я продолжу разговор о трех серверах, mysql1.domain.com 192.168.0.1 mysql2.domain.com 192.168.0.2 mysql3.domain.com 192.168.0.3 Сервер 1 и 2 будут парой, которая будет . Это должно быть отлично для двух серверов за балансировщиком нагрузки или при использовании round robin DNS, и это хорошая альтернатива репликации. Сервер 3 нуждается только в минимальных изменениях и НЕ требует установки mysql. Это может быть low-end компьютер и он может выполнять другие задачи. Шаг 1: Установка mysql на первые два сервера: Выполните следующие действия на обоих mysql1 и mysql2: groupadd mysql useradd -g mysql mysql cd /usr/local/ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.15-linux-i686-glibc23.tar.gz tar -zxvf mysql-max-5.0.15-linux-i686-glibc23.tar.gz rm mysql-max-5.0.15-linux-i686-glibc23.tar.gz ln -s mysql-max-5.0.15-linux-i686-glibc23 mysql cd mysql scripts/mysql_install_db --user=mysql chown -R root . chown -R mysql data chgrp -R mysql . cp support-files/mysql.server /etc/rc.d/init.d/ chmod +x /etc/rc.d/init.d/mysql.server chkconfig --add mysql.server Пока не запускайте mysql. Шаг 2: Установка и настройка управляющего сервера Вам потребуются следующие файлы из каталога mysql bin/ : ndb_mgm и ndb_mgmd. Загрузите весь тарболл mysql-max и извлеките (достаньте/возьмите) их из каталога bin/. mkdir /usr/src/mysql-mgm cd /usr/src/mysql-mgm http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-max-5.0.15-pc-linux-gnu-i686.tar.gz/ tar -zxvf mysql-max-5.0.15-pc-linux-gnu-i686.tar.gz rm mysql-max-5.0.15-pc-linux-gnu-i686.tar.gz cd mysql-max-5.0.15-pc-linux-gnu-i686 mv bin/ndb_mgm . mv bin/ndb_mgmd . chmod +x ndb_mg* mv ndb_mg* /usr/bin/ cd rm -rf /usr/src/mysql-mgm Теперь вам нужно отредактировать конфигурационный файл (для этого управления): mkdir /var/lib/mysql-cluster cd /var/lib/mysql-cluster vi [or emacs or any other editor] config.ini Теперь вставьте следующее (измените немного, как указано): [NDBD DEFAULT] NoOfReplicas=2 [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] [TCP DEFAULT] # Managment Server (управляющий сервер) [NDB_MGMD] # the IP of THIS SERVER (IP этого сервера) HostName=192.168.0.3 # Storage Engines (Движки хранилищ) [NDBD] # the IP of the FIRST SERVER (STORAGE NODE) (IP первого сервера) HostName=192.168.0.1 DataDir= /var/lib/mysql-cluster [NDBD] # the IP of the SECOND SERVER (STORAGE NODE) (IP второго сервера) HostName=192.168.0.2 DataDir=/var/lib/mysql-cluster # 2 MySQL Clients (2 клиента MySQL) # Я оставил это пустым, чтобы позволить быстрые изменения клиентов MySQL # Вы можете ввести ниэних двух серверов здесь - Я предлагаю вам этого не делать [MYSQLD] [MYSQLD] Теперь запустите управляющий сервер: ndb_mgmd Это управляющий сервер mysql, не консоль управления. Следовательно, не ожидайте никакого вывода (мы запустим консоль позже). Шаг 3: Настройка серверов хранения БД / SQL и запуск mysql На каждом из двух серверов хранения БД / SQL (192.168.0.1 и 192.168.0.2) введите следующее (измените немного, как указано): vi /etc/my.cnf Нажмите i для перехода в режим вставки снова и вставьте это на обоих серверах (измените IP адреса на IP адреса управляющего сервера который вы настроили на шаге 2): [mysqld] ndbcluster # the IP of the MANAGMENT (THIRD) SERVER (IP управляющего (третьего) сервера) ndb-connectstring=192.168.0.3 [mysql_cluster] # the IP of the MANAGMENT (THIRD) SERVER(IP управляющего (третьего) сервера) ndb-connectstring=192.168.0.3 Знайте, что все в секции [mysql_cluster] заместит умолчания в [mysql], поэтому, если вы определите nodeid, а затем попытаетесь запустить несколько демонов на тех-же машинах, вам следует знать это! Сейчас мы создадим каталог данных и запустим движок базы: mkdir /var/lib/mysql-cluster cd /var/lib/mysql-cluster /usr/local/mysql/bin/ndbd --initial /etc/rc.d/init.d/mysql.server start Если вы сделали один сервер, теперь вернитесь назад к началу шага 3 и повторите в точности ту же процедуру на втором сервере. Заметьте, что вам следует использовать только --initial , если вы начали сначала или сделали изменения в файле config.ini на управляющем сервере. Шаг 4: Проверка работоспособности Теперь вы можете вернуться к управляющему серверу (mysql3) и войти в консоль управления: /usr/local/mysql/bin/ndb_mgm Введите команду SHOW, чтобы видеть что происходит. Пример вывода выглядит так: [root@mysql3 mysql-cluster]# /usr/local/mysql/bin/ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> show Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @192.168.0.1 (Version: 5.0.15, Nodegroup: 0, Master) id=3 @192.168.0.2 (Version: 5.0.15, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.0.3 (Version: 5.0.15) [mysqld(API)] 2 node(s) id=4 (Version: 5.0.15) id=5 (Version: 5.0.15) ndb_mgm> Если вы видите not connected, accepting connect from 192.168.0.[1/2/3] в первой или в последних двух строках, то у вас проблемы. Пожалуйста, напишите мне, предоставив столько подробностей, сколько возможно, и я могу попытаться найти, где вы сделали ошибку и изменить это HOWTO , чтобы исправить это. Если же здесь все в порядке - время проверить MySQL. На любом сервере mysql1 или mysql2 введите следующие команды: Заметьте, что мы еще не имеем пароля root. mysql use test; CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER; INSERT INTO ctest () VALUES (1); SELECT * FROM ctest; Вы должны увидеть 1 возвращенный ряд (со значением 1). Если это работает, теперь идите к другому серверу и запустите такой же SELECT, и посмотрите, что вы получите. Сделайте Insert с этого хоста и идите назад к хосту 1, и посмотрите, работает ли это. Если это работает, поздравляем. Последний тест - это убить один из серверов, чтобы посмотреть, что произойдет. Если вы имеете физический доступ к машине, просто отключите ее сетевой кабель и смотрите, что другой сервер продолжает работать хорошо (попробуйте запрос SELECT). Если вы не имеете физического доступа, сделайте следующее: ps aux | grep ndbd Вы получите вывод, похожий на этот: root 5578 0.0 0.3 6220 1964 ? S 03:14 0:00 ndbd root 5579 0.0 20.4 492072 102828 ? R 03:14 0:04 ndbd root 23532 0.0 0.1 3680 684 pts/1 S 07:59 0:00 grep ndbd В этом случае, игнорируйте команду "grep ndbd" (Последнюю линию), но убейте первые два процесса, выполнив команду kill -9 pid pid: kill -9 5578 5579 Потом попробуйте сделать select на другом сервере. Пока вы здесь, запустите команду SHOW на управляющем узле, чтобы посмотреть, что сервер отключился. Для рестарта просто введите ndbd ЗАМЕТЬТЕ, не --inital! Дополнительные замечания об установке Я настоятельно рекомендую вам прочесть все (и добавить эту страницу в закладки). Это сэкономит вам много времени поиска. Управляющий сервер Я настоятельно рекоммендую, чтобы вы не останавливали управляющий сервер после запуска по следующим причинам: * Сервер почти не расходует любые серверные ресурсы. * Если сервер упадет, вы захотите иметь возможность просто зайти на него по ssh и написать ndbd для его запуска. Вы не захотите возиться с другим сервером. * Если вы захотите сделать резервную копию, то вам будет нужно, чтобы управляющий сервер был запущен. * Лог кластера пересылается на управляющий сервер, так что, поэтому чтобы проверить, что происходит на кластере или или произошло в последнее время, это хороший инструмент. * Все команды с клиента ndb_mgm посылаются на управляющий сервер и таким образом нет команд управления, если нет управляющего сервера. * Управляющий сервер необходим в случае реконфигурации кластера (поломка сети или обрыв сети). В случае, когда он не запущен, произойдет сценарий "split-brain" (). Арбитражная роль управляющего сервера требуется для этого типа установки, чтобы предоставить лучшую сбоеустойчивость (устойчивость к поломкам). Однако, вы все равно можете остановить сервер, если предпочитаете. Автоматический запуск и остановка ndbd при загрузке Чтобы сделать это, выполните следующие команды на обоих узлах mysql1 и mysql2: echo "ndbd" > /etc/rc.d/init.d/ndbd chmod +x /etc/rc.d/init.d/ndbd chkconfig --add ndbd Заметьте, что это действительно быстрый скрипт. Перед тем, как написать его, вам следует проверить, что ndbd уже запущен на машине. Использование hostname Вы заметите, что я использую IP-адреса специально для этой установки. Это для того, что использование hostname просто увеличивает количество вещей, которые могут пойти неправильно. Mikael Ronstr пояснил: "Hostname, конечно, работают с кластером MySQL. Но использование hostname приводит к появлению нескольких источников ошибок, так система DNS lookup должна быть установлена, иногда /etc/hosts должен быть отредактирован и они могут быть заблокированы, гарантируя, что связь между определенными машинами невозможна, кроме как через определенные порты". Я настоятельно рекомендую, чтобы во время тестирования вы использовали IP-адреса, если это возможно, а когда это все заработает изменить их на hostname. RAM Используйте следующую формулу для вычисления объема RAM , который вам потребуется на каждом узле базы: (Size of database * NumberofReplicas * 1.1) / Number of storage nodes [ (Размер БД * КоличествоРепликаций * 1.1)/Количество узлов ] NumberofReplicas по-умолчанию, равен 2. Вы можете изменить его в config.ini , если вы этого хотите. Так, например, чтобы запустить базу данных на 4GB с NoOfReplicas , установленным на 2, вам потребуется всего около 9GB RAM (4 * 2 * 1.1), так что, если у вас есть два узла БД, вам будет нужно 4.5GB RAM на каждом узле. Для узлов SQL и управляющего узла вам не требуется много памяти. Помните, что если у вас поля переменной ширины в MySQL Cluster 4.0 или 5.0, вы можете обнаружить, что вам потребуется НАМНОГО больше RAM, чем вычисляется по указанной формуле. Замечание: Многие люди присылали мне вопросы по вышеприведенной математике! Помните, что кластер является отказоустойчивым, и каждый фрагмент данных сохраняется на, как минимум, двух узлах. (2 по-умолчанию, как установленно в NumberOfReplicas). Так что вам потребуется ДВОЙНОЕ пространство, нужное для одной копии данных, помноженное на 1.1 для запаса. Добавление узлов БД Если вы желаете добавить узлы БД, помните, что 3 - не оптимальное значение. Если вы переходите с 2 (выше) , то переходите на 4. Добавление узлов SQL Если вы хотите добавить другие узлы SQL (например, у вас есть другой сервер, который вы хотите добавить в кластер, но вам не нужно делать его узлом БД), поэтому просто добавьте следующее в /etc/my.cnf на сервере (это должен быть сервер mysql-max): [mysqld] ndbcluster # the IP of the MANAGMENT (THIRD) SERVER (IP управляющего (третьего) сервера) ndb-connectstring=192.168.0.3 [mysql_cluster] # the IP of the MANAGMENT (THIRD) SERVER(IP управляющего (третьего) сервера) ndb-connectstring=192.168.0.3 Далее вы должны убедиться, что есть еще одна линия [MYSQLD] в конце файла config.ini на управляющем сервере. Перезапустите кластер (смотрите важное замечание далее) и перезапустите mysql на новом API. Он должен быть подключен. Важное замечание по изменению config.ini Если вы всего лишь изменили config.ini , вы должны остановить весь кластер и перезапустить его для повторного чтения файла конфигурации. Остановите кластер командой SHUTDOWN к пакету ndb_mgm на управляющем сервере , а затем перезапустите все узлы БД. Несколько полезных опций конфигурации, которые вам потребуются, если у вас большие таблицы: DataMemory: определяет пространство, доступное для хранения актуальных (текущих) записей в БД. Вся DataMemory будет распределена (выделена) в памяти , поэтому важно, чтобы машина содержала достаточное количество памяти для обработки размера DataMemory. Заметьте, что DataMemory также используется для хранения упорядоченных индексов. Упорядоченные индексы используют около 10 байтов на запись. По-умолчанию: 80MB IndexMemory IndexMemory - это параметр, который контролирует пространство, используемое для хэш-индексов кластера MySQL. Хэш-индексы всегда используются для индексов первичного ключа, уникальных индексов, и уникальных constraints (принуждать/ограничивать). По-умолчанию: 18MB MaxNoOfAttributes Этот параметр определяет количество атрибутов, которые могут быть определены в кластере. По- умолчанию: 1000 MaxNoOfTables Очевидно (помните, что каждое поле BLOB создает другую таблицу по различным причинам - это тоже надо учитывать). По-умолчанию: 128 Смотрите эту страницу на mysql.com для полной информации об опциях, которые вы можете включить в секцию [NDBD] файла config.ini Замечание о безопасности Кластер MySQL не является безопасным. По-умолчанию, каждый может подключиться к вашему управляющему серверу и все испортить. Я предлагаю следующие меры предосторожности: * Установите APF и заблокируйте все порты, за исключением используемых вами ( НЕ включая любые порты кластера MySQL). Добавьте IP-адреса узлов вашего кластера в файл /etc/apf/allow_hosts. * Запускайте кластер MySQL через вторую сетевую карту на второй изолированной сети. Другие ресурсы Я нахожу следующие ресурсы очень полезными: * Документация MySQL-кластера. Она постепенно переписывается и сейчас действительно хороша. * On-line Backup of MySQL Cluster. * Defining MySQL Cluster Storage Nodes для информации, которая вам потребуется, чтобы разрешить больший объем памяти для БД или большее количество таблиц, индексов, уникальных индексов. * MySQL Cluster mailing list. * Google. * MySQL Forums. * IRC-канал #mysql на freenode и EFNet. Если вам нужен (open source) IRC-клиент, я рекомендую Bersirc. Благодарности Я должен поблагодарить several others who have contributed to this: Mikael Ronstr из MySQL AB за помощь мне заставить это работать и исправление моих глупых ошибок в самом конце, Lewis Bergman за внимательное чтение этой страницы и указание на возможные улучшения, и Martin Pala за объяснение окончательных причин для сохранения управляющего сервера запущеным, как и несколько маленьких изменений. Спасибо также Terry из Advanced Network Hosts который платил мне за установку кластера и одновременное написание HOWTO. Комментарии/Изменения Я восхищен всеми, кто посылал любые исправления или комментарии; вы можете сделать это на Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script . Если вы также действительно затрудняетесь я могу помочь вам. Пожалуйста, не копируйте этот документ; просто сделайте ссылку на него. Это просто для предотвращения появления еще большего количества устаревшей информации в Интернет. Я буду обновлять его. Если вы хотите что-то изменить, пожалуйста, напишите мне.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, apl (?), 14:08, 12/12/2006 [ответить]  
  • +/
    ты хотьбы перевел нормально, а не доверил машине.
    Оригинал: http://www.howtoforge.com/loadbalanced_mysql_cluster_debian
     
     
  • 2, anonymous (??), 16:41, 12/04/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Normal'nyj perevod. Glavnoe vse ponjatno.
    Nado che nit' pokrasivshe chitaj "MojDoDyr".

    Ne znaesh - ne pishi. Original tut:
    http://www.davz.net/static/howto/mysqlcluster
    a tot link chto ty dal - plagiat, da esche i tormozit nemerjanno.

     

  • 3, Дмитрий (??), 15:53, 17/01/2012 [ответить]  
  • +/
    Неплохая статья!
    У меня есть вопрос такой.
    То что резервирование происходит - это понятно.
    То что на каждой машине можно выполнить запрос из общей БД - это понятно.
    НЕ ПОНЯТНО: при выполнении запроса на одной ноде, будет задействовано вычисление только на этой ноде или на обоих?
    т.е. вычислительные мощности нод объединяются при выполнении mysql запроса на одной из нод?

    Интересует этот вопрос, т.к. мне требуется выполнять объемные и многочисленные запросы на mysql.

     

    лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру