Avatar billede kgp43 Nybegynder
04. maj 2006 - 14:47 Der er 17 kommentarer og
1 løsning

Server rotation (mysql_connect)

Hejsa,

Kan dette gøres smartere?


$db_server = rand(1,2);
if($db_server == 1) {

    $server_ip = "000.00.00.00";
    $server_username = "root":
    $server_password = "password":
}

if($db_server == 2) {

    $server_ip = "000.00.00.00";
    $server_username = "root":
    $server_password = "password":
}

mysql_connect ($server_ip,$server_username,$server_password) or die(mysql_error());
Avatar billede expnet Seniormester
04. maj 2006 - 14:49 #1
hvad er du vil gøre ud over at connect to db
Avatar billede kgp43 Nybegynder
04. maj 2006 - 14:51 #2
den skal connecte til en random db server.
Avatar billede expnet Seniormester
04. maj 2006 - 14:54 #3
måske med switch() function
Avatar billede expnet Seniormester
04. maj 2006 - 15:02 #4
jamen bliver der ikke sat en værdi inden siden loads ind udover rand()
Avatar billede kgp43 Nybegynder
04. maj 2006 - 15:10 #5
hvad mener du med værdi?

overstående ser ud til at virke, men troede der var en smartere måde at gøre det på :)
Avatar billede fangel Nybegynder
04. maj 2006 - 15:10 #6
man kan slf. lave

$servers[0] = array('host'=>'host1', 'user'=>'foo', 'pass'=>'foo');
$servers[1] = array('host'=>'host2', 'user'=>'bar', 'pass'=>'bar');

$_server = $servers[round(rand(1,2))];

mysql_connect($_server['host'], $_server['user'], $_server['pass']);

---

Men, udover det - hvis det er til en form for "load-balancing" så er det en ganske dum ide at gøre det sådan. Det bør istedet laves via en live-replikerende mysql-cluster lagt på de to server. Således kan man sikre sig at inserts, updates, deletes osv bliver gjort på begge server.
Og det kan nemt udvides ved at tilføje en ny node til clusteren.

Morten
Avatar billede fangel Nybegynder
04. maj 2006 - 15:11 #7
hov.. skal slf. være

$_server = $servers[round(rand(0,(count($servers) - 1)))];

My bad..
Avatar billede expnet Seniormester
04. maj 2006 - 15:14 #8
$server_nummer = rand(1,2);

    switch($server_nummer){

# valgt af server 1 her

        case(1):
            $server_ip = "000.00.00.00";
            $server_username = "root":
            $server_password = "password":
        break;
   
# valgt af server 2 her

        case(2):
            $server_ip = "000.00.00.00";
            $server_username = "root":
            $server_password = "password":
        break;

# Vælger denne server hvis der ikke bliver valgt en af de overnævnet server så der altid er en server tildelt

        default:
            $server_ip = "000.00.00.00";
            $server_username = "root":
            $server_password = "password":
}

mysql_connect ($server_ip,$server_username,$server_password) or die(mysql_error());
Avatar billede kgp43 Nybegynder
04. maj 2006 - 15:51 #9
fangel: mener du mysql5 cluster?
Avatar billede fangel Nybegynder
04. maj 2006 - 15:55 #10
kgp43: det kan også godt klares m. mysql 4.. Lav en master og slave node der ligge og replikkere hinanden live. Så kan du iirc sætte noget load-balancing op mellem de to nodes. Ellers skal man stadig ud i noget random-connect til en af node'sne.

Men ja - en cluster løsning er en god ide for at sikre sig at databaserne er ens..

Morten
Avatar billede kgp43 Nybegynder
04. maj 2006 - 16:13 #11
sådan er det allerede.
har 2 db servers, den ene er master og den anden slave.
må kun "write" til master og skal fordele "read" på begge servers.

derfor denne forespørgsel.
Avatar billede kgp43 Nybegynder
04. maj 2006 - 16:14 #12
slave henter data fra master, sådan som jeg forstår det.
Avatar billede fangel Nybegynder
04. maj 2006 - 17:34 #13
Okay - jammen det havde du jo styr på. Så gemmer jeg mig lige bag en sten igen...

Hvis jeg husker rigtigt (hvilket langt fra er sikkert) kan man godt lave det således at slaves også kan lave write-operations.

Min arbejdsplads har 2 databaservere, hvor den ene kører master og den anden slave. Vi bruger så altid kun master (direkte connect til den) til normal drift. Den eneste grund til at vi har clusteret er så at hvis master går ned, så kan vi skifte slave til at være master, og derefter connecte til den.
Det giver ikke ekstra performance, men det giver driftsikkerhed...

Men _så_ meget er jeg ikke inde i mysql-cluster så jeg præcist ved om, og hvordan, man kan sørge for at kunne lave write til begge nodes i et cluster.. Ville bare lige sikre mig at du havde et cluster, fordi ellers er det... dumt... at lave en random server connect..

Morten
Avatar billede kgp43 Nybegynder
04. maj 2006 - 17:38 #14
Yep

Er heller ikke så meget inde i dette her, men blev ligesom kastet ud i det :P
Smid et svar, så er der point :)
Avatar billede fangel Nybegynder
04. maj 2006 - 17:41 #15
Pyt skidt - jeg har nok point i forvejen, behold ud bare dem.. ;)

(Desuden kigger jeg kun forbi en gang i mellem, og stille i hvert fald ingen spm..)

Morten
Avatar billede kgp43 Nybegynder
04. maj 2006 - 17:48 #16
hehe, ok.

lader spørgsmålet stå åben lidt endnu så, ved aldrig om der kommer en forbi med nogle nyttige inputs :)

Takker for hjælpen.
Avatar billede kgp43 Nybegynder
09. november 2008 - 18:32 #17
lukker
Avatar billede fangel Nybegynder
09. november 2008 - 22:07 #18
(nej - ingen kloge kommentare på +2 år..)

Jeg ved lidt mere nu - så hvis det stadigt har interesse, så skal du være mere end velkommen til at kontakte mig (lidt googling burde finde min email relativt hurtigt)

-M
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester