Modi per i server MySQL a scala automatica?

Ho un sito che ha un forte traffico e perché le soluzioni di scala automatica sono molto redditizie per questo caso. Attualmente il web server è in grado di scalare orizzontalmente l'auto, ma il collo di bottiglia è sul server MySQL.

  • Ho provato con Amazon RDS Multi-AZ ma ci vogliono 15 minuti per il database da 12 GB per aggiornare con alcuni minuti di inattività. Mi ha aiutato molto quando sapevo già che un aumento del traffico avrebbe potuto succedere in un momento specifico.
  • Ho anche considerato Xeround. Questa è probabilmente la soluzione migliore, anche se è abbastanza costoso per i database di questa dimensione. Comunque non è un'opzione perché ho legalmente bisogno del database di essere nell'Unione europea.
  • Ho letto di Scalr ma non so se questo potrebbe essere utile e come.
  • Ho visto che molti fornitori di cloud hosting offrono soluzioni verticali di scalatura che credo che abbia 0 tempi di inattività (non so se questo sia realmente ansible, per quanto so che utilizzano l'ipervisore Xen). Questa potrebbe essere una soluzione, ma mi chiedo se non abbia tempi di inattività e come la configuration di MySQL (e molte altre cose sul sistema operativo) siano in grado di aggiornare anche senza tempi di inattività.
  • Ho provato con i server slave MySQL ma non era affatto utile.
  • Sto usando memcache che aiuta molto ma non basta. Devo aggiornare a causa delle scritture, non solo per le letture.

Eventuali suggerimenti? Grazie in anticipo

  • Come posso avere 2 server di database per il mio sito web?
  • Se l'utilizzo della CPU fosse così basso, mentre l'utilizzo della memory è elevato sul server mysql pesante?
  • In cerca di monitoraggio server app ... niente di speciale .. per Windows
  • L'aggiornamento di MySQL Replication 'Catchup' conserva record più recenti
  • MySQL Slow Writes
  • Come posso visualizzare i privilegi dell'utente in MySQL?
  • AWS EC2 timeout connessione tramite SSH
  • Come spostare il database RDS in diversi VPC
  • Avviare l'istanza di Windows AWS da istantanee?
  • Remote rsyslog scrive solo i dati di logging per / var / log / syslog e non i file di registro personalizzati
  • PsExec per il command remoto su istanza EC2 di Windows
  • non riesce a trovare l'indirizzo IP privato per l'istanza Amazon-RDS
  • 4 Solutions collect form web for “Modi per i server MySQL a scala automatica?”

    In realtà, una soluzione più semplice sarebbe quella di provare ad aggiungere Memcached al tuo stack per salvare sul carico DB. Ciò può risparmiare drasticamente il carico e è molto più semplice di cercare di risolvere velocemente il problema dei server in piedi (bassa difficoltà) e quindi di individuare una rapida sincronizzazione di MySQL (difficoltà molto più elevata).

    http://toblender.com/?s=memcached

    Per risolvere il problema di troppe scritture, la soluzione più comune è l'aggiunta di memory al server (che può essere mantenuto in RAM), mettendo il DB su dischi più veloci (gli SSD sono una buona soluzione, ma costosa) (che è costoso in server aggiuntivi e complessità).

    Un altro modo per ridurre il carico di scrittura DB sarebbe l'incorporazione di un archivio di dati in memory (ad esempio Redis) per gestire i dati che cambiano frequentemente e, se necessario, periodicamente le modifiche restituiranno al DB principale.

    Si consiglia di utilizzare una Topologia Stella

    Ecco quello che propongo

    • Un master di scrittura (aka WM)
    • Un master di distribuzione (aka DM)
    • Cinque (5) Read Slave Server (aka RSS)

    Preparare la Topologia come questa

    Passo 01: Impostazione 5 RSS con queste opzioni comuni

    [mysqld] skip-innodb key_buffer_size=1G 

    Ciò causerà la creazione di tutte le tabelle caricate come MyISAM Storage Engine

    Passo 02: Setup DM e tutti i server RS

    • mysqldump lo schema di tutte le tabelle da WM a un file schemadump
    • caricare il file schemadump in DM e tutti i 5 RSS
    • eseguire ALTER TABLE tblname ROW_FORMAT=Fixed; su tutti i tavoli in RSS
    • eseguire ALTER TABLE tblname ENGINE=BLACKHOLE; su tutti i tavoli in DM
    • solo dati mysqldump (utilizzando –no-create-info) ad una datadump
    • caricare datadump in tutti 5 RSS

    Passo 03: replica di installazione da DM a tutti 5 RSS

    Passo 04: Replica di installazione da WM a DM

    FINE DI IMPOSTAZIONE

    Ecco come funziona il tuo meccanismo di lettura / scrittura

    • Tutte le tue scritture (INSERT, UPDATE, DELETE) si verificano al WM
    • SQL viene registrato nei registri binari del DM (nessun dato effettivo risiede in DM)
    • Ogni RSS è un Slave di lettura per il DM
    • Tutte le tue letture si verificano in RSS

    Ora ecco la cattura …

    • Si utilizza RSS 1-4 per le letture inizialmente
    • Utilizza il 5 ° RSS per far nascere altri RSS
      • Si esegue il service mysql stop al 5 RSS
      • Spin Up un altro RSS
      • Copia / var / lib / mysql e /etc/my.cnf del 5 ° RSS al nuovo RSS spun-up
      • Si esegue il service mysql stop al 5 RSS
      • service mysql stop al nuovo RSS

    Puoi utilizzare RSS # 5 per spinare nuovi server più e più volte

    In un sidenote, non utilizzare XEROUND per il WM o DM perché non supportno il motore di archiviazione InnoDB o BLACKHOLE.

    Spero che queste idee aiutino.

    Se si utilizza Innodb, si consiglia di considerare Mysql multi-master gestito da Galera . Fa rendere più facile il setup di mysql multi-master e dovrebbe rendere più facile per "semi" scala automatica.

    Se si tratta di un'applicazione che tu o la tua azienda sta scrivendo, puoi considerare di passare a un disegno scartato (partizionato) per l'applicazione. Ma lo sharding può diventare complicato. Ecco un link per iniziare.

    Suppongo che tu abbia "sintonizzato" i file di configuration mysql, come nella memory allocata appropriata ecc.

    È questo in un rack che controlli, o è nella nuvola? 12GB è un database molto piccolo rispetto alla dimensione dei dischi disponibili. Metterlo su un arrays RAID1 o RAID10 di piccole SSD SLC e la tua latenza di scrittura scomparirà.

    La serie Intel 311 20GB SLC SSD (120 dollari ciascuno) avrebbe fatto il lavoro brillantemente.

    Se il database fosse più grande, è ansible get risultati simili allo stesso modo spostando il database in un target iSCSI su un server ZFS SAN (basato su hardware del commodity server utilizzando Nexenta, OpenIndiana, FreeNAS o qualsiasi altra cosa) e impostando uno specchio di SSD simili per la tua cache di scrittura ZIL. In tutte le circostanze più straordinarie, Gigabit Ethernet è più che sufficiente a spostare il traffico iSCSI di database.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.