Проверка за синхронизация

C++ JAVA
Post Reply
User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3225
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 124

Проверка за синхронизация

Post by dakata__92 » Wed Mar 25, 2020 10:53 am

Здравейте колеги. Налага ми се в една система да направя аларма дали съществува синхронизация между 3 сървъра. По принцип бих използвам командата :

Code: Select all

SELECT * FROM performance_schema.replication_connection_status
за всеки сървър, но на практика в сайта потребителя на базата няма права да чете от таблицата. Не ми се иска да вдигам на потребителя правата и въпроса ми е дали има и алтернативен начин да видя дали между трите сървъра съществува синхронизация?

Code: Select all

public function getMySqlSync()
    {
        $servers = $this->getServersSettings();
        $countServers = count($servers);
        $mysqlSync = [];
        for ($i = 1; $i <= $countServers; $i++) {
            if (isset($servers[$i])) {
                $query = $this->mdb->query("SELECT * FROM performance_schema.replication_connection_status", $servers[$i]['ip']);
                if ($query->num_rows > 0) {
                    while ($item = $query->fetch_object()) {
                        $mysqlSync[$i] = $item;
                    }
                }
            }
        }
        return $mysqlSync;
    }

User avatar
Ticketa
Турист
Турист
Posts: 433
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 23
Location: in /root
Contact:

Re: Проверка за синхронизация

Post by Ticketa » Thu Mar 26, 2020 11:59 am

Офтопик:
С каква идея се правят тези синхронизации ? При бекъп сървъри или? Каква е ползата / предимството ?

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3225
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 124

Re: Проверка за синхронизация

Post by dakata__92 » Thu Mar 26, 2020 12:19 pm

Ticketa wrote:
Thu Mar 26, 2020 11:59 am
Офтопик:
С каква идея се правят тези синхронизации ? При бекъп сървъри или? Каква е ползата / предимството ?
Имам 3 сървъра, които са ми в кръгова топология, които поемат постъпващ трафик. И трите сървъра във всеки един момент са ми и мастър и слейв. Тоест синхронизацията ми е между трите сървъра. Ако единия падне или го спрем другите поемат трафика. Лесно мога и да пренастроя топологията, защото базата ми се уеднаквява навсякъде. Та идеята е не само да са бекъп, но са и съвсем легитимни самостоятелни единици. Просто ми трябва аларма да видя в момента статуса на слейв сървърите. Тоест

Code: Select all

SHOW SLAVE STATUS
също ми изисква юзър права, които не смятам да вдигам, за което търся и друг алтернативен вариант да визуализирам аларма в сайта.

User avatar
djman
Гуру
Гуру
Posts: 2790
Joined: Sat Sep 12, 2009 8:07 am
Answers: 107

Re: Проверка за синхронизация

Post by djman » Thu Mar 26, 2020 12:31 pm

Ти искаш тази аларма да е част от приложението, което ползва тези бази? Не може ли тази аларма отделно да я направиш, съответно с отделен юзер който само това може да проверява?

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3225
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 124

Re: Проверка за синхронизация

Post by dakata__92 » Thu Mar 26, 2020 12:46 pm

djman wrote:
Thu Mar 26, 2020 12:31 pm
Ти искаш тази аларма да е част от приложението, което ползва тези бази? Не може ли тази аларма отделно да я направиш, съответно с отделен юзер който само това може да проверява?
Да, алармата трябва да е част от приложението. Няма вариант да е отделен потребител.

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 846
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 61

Re: Проверка за синхронизация

Post by Revelation » Fri Mar 27, 2020 12:50 am

dakata__92 wrote:
Thu Mar 26, 2020 12:46 pm
djman wrote:
Thu Mar 26, 2020 12:31 pm
Ти искаш тази аларма да е част от приложението, което ползва тези бази? Не може ли тази аларма отделно да я направиш, съответно с отделен юзер който само това може да проверява?
Да, алармата трябва да е част от приложението. Няма вариант да е отделен потребител.
Има вариант. Създай нов потребител с правата, които искаш, добави втори връзка в Ларавел със съответния потребител и прави каквото искаш с него.

Ако създаваш модел, просто задавай името на връзката, която да ползва:

Code: Select all

protected $connection = "second-conn";
или https://laravel.com/docs/7.x/database#u ... onnections

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3225
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 124

Re: Проверка за синхронизация

Post by dakata__92 » Fri Mar 27, 2020 8:04 am

Revelation wrote:
Fri Mar 27, 2020 12:50 am
dakata__92 wrote:
Thu Mar 26, 2020 12:46 pm
djman wrote:
Thu Mar 26, 2020 12:31 pm
Ти искаш тази аларма да е част от приложението, което ползва тези бази? Не може ли тази аларма отделно да я направиш, съответно с отделен юзер който само това може да проверява?
Да, алармата трябва да е част от приложението. Няма вариант да е отделен потребител.
Има вариант. Създай нов потребител с правата, които искаш, добави втори връзка в Ларавел със съответния потребител и прави каквото искаш с него.

Ако създаваш модел, просто задавай името на връзката, която да ползва:

Code: Select all

protected $connection = "second-conn";
или https://laravel.com/docs/7.x/database#u ... onnections
Знам, но приемете на доверие, че ми е необходимо алтернативно решение. Мислех си да правя преброяване на всеки от сървърите на една и съща синхронна таблица. Тоест ако синхронизацията на всеки 2 минути се опитва да навакса разликите в сървърите, то по принцип би трябвало да има огромна разлика между таблицата на сървър 1, 2 и 3. Проблема да правя преброяване, е че във всеки един момент мога да имам разлика и от 100 000 записа постъпващ трафик, та ще активира фалшиво - позитивна реакция на алармата, ако направя да е по процент разлика.

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3225
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 124

Re: Проверка за синхронизация

Post by dakata__92 » Mon Mar 30, 2020 9:39 am

Никой ли няма идея как да проверя дали има синхронизация между сървърите?!

User avatar
muti
Турист
Турист
Posts: 218
Joined: Thu Nov 14, 2019 7:03 am

Re: Проверка за синхронизация

Post by muti » Mon Mar 30, 2020 10:28 am

Тоест искаш да направиш load balancing между 3 машини ?
Нямам на идея каква точно е архитекрурата но мога да предположа че:
1. имаш рутер Dell с повечко тунели (В-ланс) понеже е по-евтиното решение.
2. имаш 3 машини за load balancing на заявките.
3. следват процеррни станции
4. бази данни които се се синхронизират/репликират, които са с ъплинк между тях(мегабитови/гигабитови/SFP).

Или си само с 3 машини ? Ако е така какво стои пред тях и казва на заявките коя къде да отива ? С пинг ли се управляват или нещо следи кога мрежата падне и отчита че машината я няма ? ....
Или просто искаш да си синкваш 3 машини в реално време ? Ако е така най-доброто и скъпо е r1 soft. Тествал съм го и работи перфектно. Има и bare-metal restore.

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3225
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 124

Re: Проверка за синхронизация

Post by dakata__92 » Mon Mar 30, 2020 10:37 am

muti wrote:
Mon Mar 30, 2020 10:28 am
Тоест искаш да направиш load balancing между 3 машини ?
Нямам на идея каква точно е архитекрурата но мога да предположа че:
1. имаш рутер Dell с повечко тунели (В-ланс) понеже е по-евтиното решение.
2. имаш 3 машини за load balancing на заявките.
3. следват процеррни станции
4. бази данни които се се синхронизират/репликират, които са с ъплинк между тях(мегабитови/гигабитови/SFP).

Или си само с 3 машини ? Ако е така какво стои пред тях и казва на заявките коя къде да отива ? С пинг ли се управляват или нещо следи кога мрежата падне и отчита че машината я няма ? ....
Или просто искаш да си синкваш 3 машини в реално време ? Ако е така най-доброто и скъпо е r1 soft. Тествал съм го и работи перфектно. Има и bare-metal restore.
Аз проблеми със синхронизацията нямам. Имаме си собствен дата център и страхотни системни администратори. Синхронизацията е в реално време. Има много условия, при които можем да "счупим" вече създадена синхронизация и на практика внимаваме къде какво правим по код, файлове и база данни. Та искам да създам PHP аларма, която да ми казва, че някоя от машините не е синхронна с останалите. Споделих заявките в базата, но няма да вдигам правата на потребителите или да добавям нова конекция с друг потребител и да я разпръсна по сървърите за да достъпя една аларма.

Post Reply