Website replication.

Τεχνικές και μόνο Συζητήσεις για WEB hosting servers, Mail servers, DNS servers. Όχι αναζήτηση υπηρεσιών εδώ!

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Website replication.

Δημοσίευση από Apostolis_38 » 02 Οκτ 2013 13:15

Καλησπέρα σε όλους.

Επειδή δεν γνωρίζω πολλά επί του θέματος.
Σε περίπτωση που θέλουμε να έχουμε το site μας always up and running, ποιός είναι ο καλύτερος τρόπος;
Το site θα είναι δυναμικό και θα συνδέεται με MySQL.

Πιο συγκεκριμένα, αν υποθέσουμε οτι για κάποιο λόγο ο web server που φιλοξενεί την σελίδα μας πέσει, να ανακατευθύνονται οι επισκέπτες σε άλλο site το οποίο θα είναι πανομοιότυπο με το "πρώτο".
Αυτό σημαίνει οτι θα πρέπει και οι βάσεις να είναι up to date.

Εχω διαβάσει για web server replication και Global Server Load Balancing αλλά μου φαίνεται λίγο μπέρδεμα.
Οι cloud λύσεις, απ' ότι έχω βρει ως τώρα, είτε δεν λύνουν επαρκώς το πρόβλημα (για παράδειγμα δίνουν μόνο cached σελίδες την στιγμή που το 90% του site θα είναι δυναμικό), είτε δεν μπορούν να θεωρηθούν ασφαλείς, είτε είναι πανάκριβες.

Μια ιδέα που μου έχει πρoταθεί είναι να γίνει κάποιος "συνδυασμός" web hosters.
Δηλαδή η σελίδα να στηθεί σε 2-3 providers (για παράδεγμα ένας στην Ελλάδα, άλλος στην Γερμανία, άλλος στην Αμερική) και αναλόγος να γίνεται το redirection αν προκύψει πρόβλημα.
Μου φαίνεται όμως ψιλοδύσκολο και πιθανολογώ οτι θα υπάρξουν προβλήματα.
Κατ' αρχάς δεν ξέρω αν γίνεται αυτό, δεν ξέρω αν και πως μπορούν να στηθούν τα dns records ώστε να πρόκειται ουσιαστικά για το ίδιο site και θα πρέπει να γίνεται συνέχεια replication της MySQL για να μην χαθούν data.

Επίσης δεν γνωρίζω αν είναι κάτι που μπορεί να το αναλάβει η εταιρεία που θα κάνει το web hosting.
Προσφέρουν οι εταιρείες τέτοιες λύσεις;

Εχει κάποιος να προτείνει κάτι;

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10248
Εγγραφή: 28 Ιούλ 2001 03:00

Website replication.

Δημοσίευση από Cha0s » 08 Οκτ 2013 18:01

Πιάνεις πολύ περίπλοκο θέμα και δεν υπάρχει καμία λύση που να παίζει out of the box γιαυτό που θες να κάνεις ούτε παίζει κάποιο tutorial που θα σε καλύψει 100%.

Δεν υπάρχει δηλαδή καλύτερος τρόπος. Υπάρχει ο σωστός τρόπος για κάθε περίπτωση μεμονωμένα.

Καταρχήν, ξεχνάς το «web hosting».
Γιαυτό που θες πας αποκλειστικά σε dedicated servers ή virtual machines.

Δεν είναι κάτι που το παρέχουν οι web hosting providers σε επίπεδο web hosting. (εκτός αν υπάρχει κάποια εταιρία που να το παρέχει ως έτοιμη λύση - δεν ξέρω)

Επίσης ξεχνάς control panels τύπου cPanel, Plesk κλπ

Είναι custom λύση και θέλει custom υλοποίηση η οποία θα κριθεί από τις απαιτήσεις σας.

Πρώτα πρέπει να καταλήξετε στο τι *ακριβώς* θέλετε.
Κάθε απαίτηση έχει τις δυσκολίες και περιορισμούς στην υλοποίηση της.
Αν δεν έχετε συγκεκριμένες απαιτήσεις θα χαθείτε στην πληθώρα τρόπων υλοποίησης και δεν θα καταλήξετε κάπου εύκολα.

Τι ακριβώς θέλετε να κάνετε;
Το να είναι γενικά up πάντα το site είναι πολύ αόριστο και αν είναι αυτή η μοναδική απαίτηση τότε θα χρειαστείτε μεγάλο budget για να υλοποιηθεί και να είναι πράγματι πάντα up :P

Οπότε ξεκινάτε από το να καταλήξετε σε πολύ συγκεκριμένες απαιτήσεις σε διάφορα disaster senarios.

Αφού καταλήξετε στο τι ακριβώς θέλετε, το πρώτο πράγμα που πρέπει να μελετήσετε είναι το ίδιο το site σας. Από αυτό θα κριθεί αν μπορεί να γίνει replication σε 2ο μηχάνημα.

Πρέπει να ξέρετε ακριβώς τι γράφει στο filesystem κάτω από ποιες προϋποθέσεις και από ποιους (user generated content?)
Μετά πρέπει να δείτε τι γράφεται στην MySQL και με ποιον τρόπο.
Τα queries πρέπει να είναι τέτοια που να μπορούν να επιτρέψουν MySQL Replication χωρίς να σκάει κάτι.

Επίσης σημαντικό είναι το πως/αν δουλεύετε sessions. Σε τέτοια φάση θα χρειαστεί replication και των sessions (πχ μέσω Couchbase/Memcache)

Αφού βρείτε τι ακριβώς κάνει το site με το filesystem την βάση και τα sessions πρέπει να αποφασίσετε αν η υποδομή θα είναι στο ίδιο datacenter ή σε διαφορετικό.
Αλλάζει σημαντικά η υλοποίηση βάση αυτής της απόφασης.

Αν είναι στο ίδιο datacenter τότε θα γλιτώσετε πολλούς πονοκεφάλους στο θέμα του replication (το οποίο είναι μανίκι over WAN - ειδικά στην περίπτωση του split brain όπου τα 2 Datacenters έχουν χάσει την επικοινωνία μεταξύ τους και το filesystem νομίζει ότι έμεινε μόνο του και στους 2 servers και κάνει αλλαγές καθώς συνεχίζει να τρέχει το site)

Ωστόσο θα υπάρχει η πινανότητα πάντα να πέσει το datacenter οπότε να μείνετε και πάλι εκτός.

Αν δεν είναι στο ίδιο datacenter τότε μιλάμε για αρκετά περίπλοκη υποδομή με πολλές πιθανότητες να σκάσει κάτι.
Επίσης σημαντικό ρόλο παίζει το latency μεταξύ των 2 datacenters για να αποδίδει το replication μεταξύ των 2.


Το GSLB αν πρόκειται για το ίδιο datacenter δεν έχει νόημα.
Αν επίσης το target group σου είναι επί το πλείστον Έλληνες τότε και πάλι δεν έχει νόημα το γεογραφικό Load Balancing αφού οι περισσότεροι θα μπαίνουν από Ελλάδα οπότε θα διαλέγουν συνέχεια τον ίδιο server.
Αυτή η τεχνολογία είναι για κολοσσούς τύπου Google, Facebook κλπ. Αυτοί έχουν τέτοια υλοποίηση που έχουν επισκέπτες απόλο τον πλανήτη!


Τώρα, ο τρόπος που έχω υλοποιήσει στο παρελθόν αντίστοιχα projects ήταν με την χρήση των εξής τεχνολογιών με 2 nodes:

VMware ESXi Virtualization
Filesystem replication: GlusterFS
MySQL Replication (Master-Master setup)
Couchbase (Memcache & PHP Sessions replication)
Varnish Cache (frontend web cache)
HAproxy Loadbalancer
Apache (backend)
DNS: Poweradmin with MySQL Backend (replicated)
MikroTik Router/Firewall

Οπότε έχω 2 όμοια μηχανήματα με όμοια services να τρέχουν ακριβώς το ίδιο site και εξυπηρετούν ταυτόχρονα και τα 2. Οπότε μιλάμε για Cluster διαθεσιμότητας και απόδοσης σε 1.

Στα DNS βάζω απλά 2 ίδια A records (DNS Round robin) για το εκάστοτε sub/domain.

Έτσι οι browsers των επισκεπτών επιλέγουν τυχαία έναν εκ των 2 servers.
Αν πέσει οποιοδήποτε service ή ολόκληρος server αυτόματα γίνεται failover και ο χρήστης που πάει να μπει στην IP που είναι down, αυτόματα ο browser του μετά από 2 seconds πάει στην επόμενη διαθέσιμη IP και συνεχίζει κανονικά το browsing του.

Ωστόσο το παραπάνω setup είναι με custom site φτιαγμένο ώστε να μπορεί να κάτσει πάνω σε μία τέτοια υποδομή.

Προσπάθησα 2-3 φορές να κάνω το ίδιο setup σε Joomla sites και απλά δεν γινόταν. Είναι τόσο κακογραμμένο το Joomla που δεν βοηθάει με τίποτα να γίνει scale με τέτοιο τρόπο.

Αν τώρα θέλετε για παραπάνω από 2 servers τότε το setup γίνεται εκθετικά πιο περίπλοκο και οι έτοιμες λύσεις που παίζουν κοστίζουν μερικές δεκάδες χιλιάδες ευρώ για εξοπλισμό και software licenses.
Ξεφεύγει πολύ το πράγμα δηλαδή :P

Εναλλακτικά υπάρχει και η λύση του Fault Tolerance της VMware όπου σου τρέχει το ίδιο VM ταυτόχρονα σε 2 ESXi Hypervisors.
Αν τυχόν πέσει ο master hypervisor τότε το VM συνεχίζει ακριβώς από εκεί που κόλλησε στον slave hypervisor χωρίς κανένα downtime (κατά την τράμπα χάνει 1-2 pings μέχρι να πάρει χαμπάρι το switch την αλλαγή)
Αυτή η υλοποίηση είναι εντελώς transparent στο τελικό VM και παίζει οτιδήποτε και να τρέχει το site μιας και δεν υπάρχει replication σε επίπεδο services του VM.
Ωστόσο έχει την απαίτηση shared storage για να δουλέψει αυτό όπου ξεφεύγει αρκετά το budget, εκτός αν πάτε σε datacenter που νοικιάζει shared storage capacity.


Γενικά είναι τεράστιο θέμα αυτό και σηκώνει ώρες συζητήσεων γιατί ανάλογα τις απαιτήσεις υπάρχουν πολλοί τρόποι υλοποίησης.
Έλα με λίγο πιο συγκεκριμένες πληροφορίες να προτείνω κάτι ποιο συγκεκριμένο/χειροπιαστό γιατί τώρα υπάρχουν δεκάδες τρόποι να υλοποιηθεί αυτό που ζητάς.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Website replication.

Δημοσίευση από Apostolis_38 » 09 Οκτ 2013 10:30

Πω πω.
Χαράς το κουράγιο σου παληκάρι που έγραψες τέτοιο σεντόνι. :D

Αυτό φοβήθηκα κι εγώ από το λίγο που το έψαξα.
Μπέρδεμα.

Απάντηση

Επιστροφή στο “Apache, IIS, DNS Servers”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες