Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: zeridon в Jun 21, 2007, 13:42



Титла: Репликация при mysql
Публикувано от: zeridon в Jun 21, 2007, 13:42
Здравейте,

Имам следната ситуация която трябва да реша:
 * 3 MySQL сървъра с информация която се обновява регулярно (~100 - 500 write query-та на час)
 * и трите сървъра са бекенд на едно и също приложение (намират се на 3 различни места)
 * информацията трябва да се опреснява на определен период от време (изискване от клиента)
 * няма явно изразен master сървър
 * има изрично изискване сървърите да не са перманентно свързани/достъпни.

Въпросът:
Как да организирам репликацията? Мислех си нещо със копиране на binlog-а и после наливането му като всеки за малко го правя slave, но не знам до колко е удачно.


Титла: Репликация при mysql
Публикувано от: NikDaPhreak в Jun 22, 2007, 00:01
moin,

ако пишеш и на трите машини в MySQLите - бая зор ще е. Особено ако не можеш да бръкнеш в приложението. Имам подобна задачка, която мисля от 2 години и не мога да измисля адекватно. Не се досещам за база, която да може да преглътне нещо такова. Напоследък ми се въртят еротични идеи на тема нормални клъстерни решения, ама и там все удрям на нещо, дето не е точно както аз го искам. Май ще мигрирам на MS Windaaz...

Have Phun!


Титла: Репликация при mysql
Публикувано от: zeridon в Jun 22, 2007, 14:23
Прочутата книжка "High Performance MySQL" на O'Reilley дава предложение да се организира пръстен в който едновременно всеки сървър е master и slave.

Сега остава да се реши дали Ще издържи системата ако slave-овете се закачат на да речем 8 часа по веднъж през BTK Adsl към master-ите.


Титла: Репликация при mysql
Публикувано от: romeo_ninov в Jun 22, 2007, 16:22
Цитат (NikDaPhreak @ Юни 22 2007,01:01)
moin,

ако пишеш и на трите машини в MySQLите - бая зор ще е. Особено ако не можеш да бръкнеш в приложението. Имам подобна задачка, която мисля от 2 години и не мога да измисля адекватно. Не се досещам за база, която да може да преглътне нещо такова. Напоследък ми се въртят еротични идеи на тема нормални клъстерни решения, ама и там все удрям на нещо, дето не е точно както аз го искам. Май ще мигрирам на MS Windaaz...

Have Phun!

Ба, не става, а какво ще кажете за Oracle с archive log?


Титла: Репликация при mysql
Публикувано от: gat3way в Jun 23, 2007, 16:10
Мене ми е малко по-интересно дали трите инстанции на базата не могат да ползват някакъв shared storage? Разбира се, това би наложило и съответната клъстерна файлова система вероятно, особено при положение че заявки има към всеки от трите сървъра. Но това според мен е едно решение, което би спестило доста тарапана..

Едит: уфф те били географски оталечени, хммм кофти...не че няма разни iSCSI варианти, ама производителността ще го отнесе..а и да подкарваш клъстерна фс върху интернет...с тези амплитуди на мрежовата латентност...чудя се колко ли често разни GFS/OCFS nodes ще се fence-ват заради таймаути в I/O заявките си, голямо шоу ще бъде на ден по няколко пъти да караш хората на майната си да ти вдигат сървърите хехе :)





Титла: Репликация при mysql
Публикувано от: vixon в Jun 23, 2007, 20:17
За голяма съжаление MySQL не може да изпълни задачата, ако има прекъсване на връзката. Ние се борим с тази задача вече 3 години и няма еднозначно решение. Това, което сме постигнали най-добре е следното:

1. Един Master, който гарантирано работи винаги и връзката е сигурна;
2. Няколко Slave (в нашия случай около 40), които са на не много надеждна връзка;
3. Приложение, което работи на машината на Master-a и което проверява следните параметри:
а) Дали има Ping към Slave, всички Slave кoмпютри трябва да са с реално IP;
б) Същото приложение, след успешен Ping проверява дали работи Slave MySQL сървъра;
в) Същото приложение, след успешна проверка проверява дали работи репликацията работи. Често Slave сами си изключват репликацията и не е ясно защо се получава така. Дори и при безумни параметри Retries и Timeout;
г) Периодично се прави преброяване на редовете на таблиците, защото дори и при работеща српликация - данните се разсинхронизират.

При такава система, срив в Slave се получава средно веднъж на седмица и това е най-доброто, което успяхме да постигнем. При открет проблем по някоя от точките системата ведната изпраща SMS на поддръжката.

Има решение и то е работещо за това да има отделни сървъри и те да нямат пряка връзка през 100% от времето, но не е с MySQL...





Титла: Репликация при mysql
Публикувано от: Йордан в Jun 24, 2007, 11:39
Нещо се мешат термините. Репликиране (или реплициране, който както иска да си го транскрибира) не може да същетвува на 8 часа. Или по-точно не е ама изобщо смислено решение. За 500 записа на час, за 3 машини/сървъра, за един работен ден (8 часа) е мнооого по-размно да се напише един Убав скрипт.

Може да накараш софтуера ти да пише в две таблици едновременно. Основната и тази, която искаш да се копира и на другите сървъри (втората таблица е, за да не мислиш много). Останалото е само хитър начин на експорт и импорт.

А с репликация на 8 часа без мастер (та дори и с главен сървър) може да очакваш засиране на терена.