Amazon AWS RDS und MySQL mit MyISAM Tabellen

Amazon RDS für MySQL läuft gut und performant. Allerdings gibt es hier und da noch Anwendungen (z.B. xtCommerce), die ausschließlich MyISAM Tabellen und nicht InnoDB Tabellen nutzen.

Leider sind die Default Einstellungen von Amazon RDS für MySQL überhaupt nicht für MyISAM optimiert, mit der Folge, dass die Performance der Datenbank schlecht ist. Wenn man dieses Problem erkannt hat, lässt sich sehr schnell Abhilfe schaffen:

Default-DB-Parameter in der entsprechenden DB-ParameterGroup wie folgt ändern:

  • query_cache_size to 167772160 (163 MB)
  • myisam_sort_buffer_size to 167772160 (163 MB)
  • key_buffer_size to 1077721600 ( 1 GB)

Amazon AWS RDS Datenbank im VPC aus dem Internet erreichbar machen …

Eigentlich will man das genau nicht. Eine Amazon RDS Datenbank im VPC soll eigentlich ja nur aus dem VPC heraus erreichbar sein … aber gerade beim Import von Daten möchte man gerne die Tools auf seinem Arbeitsplatz Rechner nutzen und am liebsten temporär direkt gegen die Datenbank konnektieren ….

Nun, das geht über einen kleinen Trick. Eine Amazon RDS Datenbank im VPC bekommt ein eigenes Network-Interface mit einer lokalen IP-Adresse aus einem entsprechenden Subnets. Kann man sich in der AWS Consule unter EC2 / Network Interfaces ansehen:

Nun kann man diesem RDSNetwork-Interface auch eine Public IP Adresse zuweisen. Man mmacht diese wie folgt:

  • EC2 / Elastic IPs –> Allocate New Address –> in der ComboBox VPC auswählen
  • EC2 / Elastic IPs –> neue IP anklicken –> Associate Address  –> in der Dialog Box dann unter Network Interface die ID des Network Interfaces der RDS Instanz auswählen.
  • Danach unter EC2 / Network Interfaces schauen, ob die Public IP korrekt unserem RDS Network Interface zugewiesen wurde.

Jetzt muss nur noch in der entsprechenden RDS-Security Group der Port für einen ZUgriff aus dem Internet geöffnet werden:

  • EC2 / Security Groups –> In der ComboBox “VPC Security Groups” auswählen –> und dann in der entsprechenden RDS-Security Group den Datenbank-Port (z.B. 3306 oder 1433) für 0.0.0.0/0 öffnen.  Am besten das Ganze auf eine öffentliche IP beschränken und das Ganze sowieso nur TEMPORÄR für Admin-Zwecke machen!

 

Amazon RDS – automatische Backups vs. DB-Snapshots

Amazon RDS bietet zwei verschiedene Methoden zum Backup und zur Wiederherstellung von DB Instanzen: automatische Backups und Datenbank-Snapshots (DB Snapshots).

Die Amazon RDS-Funktion für automatisierte Backups gestattet Wiederherstellungen einer DB Instance zu einem beliebigen Zeitpunkt. Wenn automatisierte Backups für Ihre DB Instance aktiviert sind, führt Amazon RDS täglich automatisch einen vollständigen Snapshot Ihrer Daten aus (im Rahmen Ihres festgelegten Backup-Fensters) und generiert Transaktionsprotokolle (zu den Updates Ihrer DB Instance). Wenn Sie eine Wiederherstellung für einen bestimmten Zeitpunkt initiieren, werden die Transaktionsprotokolle für das passendste Backup angewandt, um Ihre DB Instance zu dem gewünschten Zeitpunkt wiederherzustellen.

(mehr …)

neue High-Speed Amazon AWS EBS Volumes

Amazon AWS EBS-Volumes sind seit Jahren die Grundlage für persistente Laufwerke bei EC2 Instanzen. Performance bei EBS-Volumes oder vergleichbaren Storage-Devices misst man in IOPS (Input/Output Operations Per Second).

Amazon EBS-Volumes schaffen im Durchschnitt ungefähr 100 IOPS. Normale PC Festplatten mit 7.200 RPM schaffen ungefähr 75 – 100 IOPS, PC Festplatten mit 15.000 RPM liegen ungefähr bei 175 bis 210 IOS. Somit sind EBS-Volumes gut geeignet für Boot-Volumes und Anwendungen mit einem moderaten I/O Bedarf. Die Performance von EBS-Volumes kann man durch Striping (RAID 0) erhöhen (so wird das übrigens unter der Haube bei Amazon RDS gemacht, den Amazon RDS sind im Prinzip gemanagte EC2 Instanzen mit einer SQL-Datenbank und Verwendung von gestripeten EBS-Volumes …)

Ab sofort stellt Amazon AWS zusätzlich “Provisioned IOPS for EBS Volumes” zur Verfügung. Dies sind spezielle EBS-Volumes, bei denen man die IOPS-Anzahl die man benötigt, entsprechend definiert. Im Augenblick werden bis zu 1.000 IOPS (für 16K Blöcke) angeboten. Wenn diese neuen EBS-Volumes dann noch zusätzlich mit RAID 0 gestriped werden, kann man mehrere tausend IOPS für ein logisches Laufwerk erzielen. Somit sind diese neuen High-Speed EBS-Volumes super geeignet für jegliche Form von Datenbanken … (die Frage, wann denn die Amazon RDS Instanzen selbst diese neuen High-Speed EBS-Volumes nutzen können bleibt noch offen … aber so wie ich inzwischen Amazon AWS kenne, wird das nicht mehr lange dauern …).

(mehr …)

Amazon RDS VPC Support für SQLServer und Oracle … via Workaround

Amazon RDS bietet seit neuestem ja auch Microsoft SQLServer 2008 an. Oracle hatte ich mir bisher bei Amazon RDS noch nicht richtig angeschaut. Von MySQL und vor allem aus den Menüpunkten der AWS Console wusste ich, dass man Amazon RDS auch prinzipiell an ein VPC Subnet konnektieren kann.

Leider ist zur Zeit ausschliesslich für Amazon RDS  MySQL Instanzen eine Anbindung an ein VPC Subnet möglich. Somit können all die Enterprise Kunden, die alle eigentlich VPCs mit private und public  Subnets nutzen, eine Anbindung von z.B. einem Application-Server innerhalb des private Subnets an Amazon RDS SQLServer oder Oracle Instanzen nicht möglich. Alle Optionen für die Zuweisung von DBSecurityGroups, die einem VPC  zugeordnet sind, zu einer DB-Instanz fehlen in der AWS Console und sind nur bei MySQL-Instanzen verfügbar.

Nach etwas längerem Nachdenken und Ausprobieren habe ich einen Workaround gefunden, da unser Kunde unbedingt Amazon RDS SQLServer in Verbindung mit seinem VPC nutzen möchte …

Man gibt einfach der entsprechenden EC2-Instanz im Private-Subnet eine 2 Netzwerkkarte. Diese 2. Netzwerkkarte ist dann dem Public-Subnet zugeordnet und erhält eine Elastic-IP und eine entsprechende Security-Group, die Outbound 1433 zuläßt. Dann erlaubt man nur noch in der entsprechenden DBSecurity-Group in Amazon RDS den Zugriff von der entsprechenden Elastic-IP Adresse der 2. Netzwerkkarte. War doch ganz einfach.

Und das Gute ist vor allem, dann wenn dann der VPC-Support für Amazon RDS bei Oracle und SQLServer Instanzen kommt, dann kann man ganz einfach umstellen, da man nur die 2. Netzwerkkarte wieder entfernen muss und einiges in den DBSecurity-Groups umstellen muss …

Datenimport nach Amazon RDS MS SQLServer 2008

und wie bekomme ich nun meine SQLServer Datenbank nach Amazon RDS importiert …

Leider kann man nicht so einfach das SQLServer Management Studio nehmen und mal schnell eine Backup-Datei einer Datenbank nehmen und über eine als Dummy angelegte Datenbank einspielen … denn man hat ja keinen Zugriff auf die Laufwerke des zugrunde liegenden Servers …

Also verbleibt nur der Weg über SQL-Skripte.

(mehr …)

Amazon RDS unterstützt ab sofort auch MS SQLServer 2008 R2

Endlich … neben MySQL und Oracle wird seit dem 8. Mai 2012 nun endlich auch der Microsoft SQLServer als gemanagte Datenbank Instanz angeboten. Viele unserer Kunden nutzen doch den SQLServer und somit freuen wir uns, endlich dies auch als Amazon RDS Dienst anbieten zu können, da eine gemanagte SQLServer Datenbank im Rahmen von Amazon RDS sehr einfach betrieben werden kann und man sich um viele lästige Administrations-Aufgaben (z.B. automatische Datensicherung) nicht mehr kümmern muss.

Hier ein paar Facts:

  • Amazon RDS bietet den SQLServer in allen Regionen an.
  • Zur Zeit wird ausschliesslich SQLServer 2008 R2 angeboten, SQLServer 2012 kommt im Laufe des Jahres.
  • Zur Auswahl stehen folgende SQLServer 2008 R2 Editionen: Express, Web Edition, Standard Edition und Enterprise Edition.
  • Die Option Multi-AZ (automatisch Replikation der Datenbank in andere Availability Zonen innerhalb der Region) steht leider noch nicht zur Verfügung, soll aber später kommen.
  • Bei der SQLServer Standard und Enterprise Edition können die SQLServer Instanzen auch mit eigenen SQLServer Lizenzen betrieben werden (dann wählt man “bring your own license”) und spart ein wenig bei den Instanz Preisen.
Wichtig: Wenn man eine RDS-Instanz erstellt, dann muss man auch die Größe des “allocated Storage” angeben, also wieviel Speicherplatz meiner SQLServer-Instanz später zur Verfügung steht. Innerhalb dieser SQLServer-Instanz kann man übrigens mehrere SQLServer-Datenbanken anlegen … der allocated Storage wird auf mehreren über RAID 0 (gestripten) verbundenen EBS Volumes gespeichert. Dieses hat Amazon AWS aus Performancegründen gemacht. Allerdings ist Windows nicht in der Lage, nachträglich die Größe eines RAID 0 Volumes zu verändern … ;-(( … aus diesem Grunde sollte man die Definition des “allocated Storages” groß genug wählen. Ist der nämlich voll, dann kann man nur die Datenbank als SQL-Skript exportieren und eine neue RDS-Instanz anlegen und die Daten wieder importieren.