Databasetheorie / Implementeren ICT en Netwerkbeheer 3e jaar Periode 2

Inleveren opdracht:

Ondanks mijn afwezigheid wil ik toch wel graag van jullie weten hoe ver jullie gekomen zijn met de database opdrachten.
Stel daarom een verslag op en stuur deze aan: bs012 (at) rocleiden (punt) nl

Inhoud van het verslag:
- De namen van de groep
- De gekozen opdracht
   - Beschrijf in het kort het doel, de toepassing en de gebruikte middelen
   - Welke bronnen heb je gebruikt?
- Hoe waren de taken verdeeld
- Wanneer hebben jullie er aan gewerkt. en wat deden jullie dan.
- Hoe ver zijn jullie gekomen?
   - Maak screenshots
- Wat ging goed / fout

Ik probeer op basis van de verslagen tot een oordeel te komen zodat er een resultaat op jullie rapport komt te staan
Het verslag dient uiterlijk vrijdag 14 januari ingeleverd te worden via e-mail.


Over deze periode:

Wil je een mail server proberen te installeren op Linux, Probeer OpenExchange op Ubuntu 10.10:
http://oxpedia.org/wiki/index.php?title=Open-Xchange_Installation_Guide_for_Ubuntu_10.04

Beoordeling gaat op basis van de uitgevoerde opdracht.

Externe links:
Overzicht van besproken onderwerpen in Les 1:
Veelgebruikte algemene voorwaarden: http://dl.dropbox.com/u/10377957/Algemene%20Voorwaarden%20ICT_Office.pdf

Herhaling SQL

Vorige periode hebben we kennis gemaakt met databases. Jullie hebben een ERD model leren lezen en begrijpen iets van referentiële integriteit.
We hebben MySQL geïnstalleerd en jullie kennen de basis commando's. Onder aan deze pagina vinden jullie de opdracht over MySQL uit periode 1.

Opdracht periode 2

Per tweetal bouwen jullie deze periode een cluster. De beoordeling vind plaats op basis van jullie documentatie, het cluster zelf en de manier waarop jullie het kunnen presenteren / uitleggen. Laat ook een toepassing zien die gebruik maakt van je cluster.

Documentatie eisen:
- Beschrijf de functie van je cluster (Wat doet het)
- Beschrijf bedrijven die een cluser inzetten of zouden kunnen inzetten
- Beschrijf je ervaringen tijdens de installatie en configuratie
   zodanig dat iemand anders met goede ICT skills het na zou kunnen doen.
- Beschrijf hoe je toepassing werkt of hoe je gebruik kunt maken van je cluster.

Optie cassandra NoSQL:

Van de website: http://cassandra.apache.org/


The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model.

Cassandra was open sourced by Facebook in 2008, and is now developed by Apache committers and contributors from many companies.



Cassandra heeft een uitgebreide wiki met uitleg voor een startende gebruiker tot geavanceerde toepassingen:
http://wiki.apache.org/cassandra/GettingStarted

Als voorbeeld van een toepassing kun je proberen om twisandra aan de praat te krijgen.
https://github.com/ericflo/twissandra


Optie Mysql-Replicatie te komen:

MySQL replicatie gaat in 3 stappen:
  • Master inrichten

  • Snapshot maken

  • Slave inrichten

Master inrichten

Installeer MySQL.

Om gebruik te kunnen maken van replicatie is het noodzakelijk dat je binairy logging (mysql-doc) aan hebt staan op de master. Binairy logging is de manier waarop MySQL verkort alle wijzigingen aan de database wegschrijft in een apart bestand. Dit bestand wordt vervolgens door het replicatieproces gebruikt om de wijzigingen ook in de slave database te laten plaatsvinden. De binary logging zet je aan door de database op te starten met de log-bin optie aan. Dit kan door op de command-prompt --log-bin mee te geven, of je neemt

log-bin[=bestandnaam]

op in je configuratie bestand (my.cnf of mysql.ini). Daarnaast zal je je machine een server-id moeten geven. Ook die schrijven we in ons configuratie bestand:

server-id=1

Je kan nu MySQL herstarten met de nieuwe configuratie, vanaf dan zal elke wijziging aan de database worden weggeschreven in dit bestand (/var/lib/mysql/machinenaam-bin.NNN). Dan is het zaak om een snapshot te maken. Er bestaan diverse methodes om een snapshot te maken. De methode die hanteer zal de database wel online laten om uit te vragen, maar hij zal op slot staan voor updates. (dat je het maar weet). Vanuit mysql:

sudo mysql -r

flush tables with read lock;


Alle tabellen worden gesloten, en je kan ze niet meer updaten totdat je ze hebt vrijgegeven. Op die manier ben je er zeker van dat de snapshot die je gaat maken geen halve schrijfacties bevat, of verwijzingen naar niet bestaande records. Het snapshot nemen we vanaf de command prompt (linux:)

Snapshot maken

tar -cvzf /tmp/snapshot.tar.gz /var/lib/mysql

Let op, je neemt nu werkelijk alles mee, dus ook de gebruikers en rechten. Als je dit niet wilt, dan kan je beter de gedetailleerde handleiding voor 'enkele databases' volgen. Als dit commando klaar is kunnen we in MySQL de tabellen weer vrijgeven, maar eerst en dat is echt belangrijk moet je de master status uitvragen. De uitkomst daarvan heb je straks nodig om de slave te configureren.

mysql> show master status;

+----------------+----------+---------------------------+------------------| File | Position | Binlog_do_db | Binlog_ignore_db +----------------+----------+---------------------------+------------------| nazgul-bin.002 | 14599324 | | +----------------+----------+---------------------------+------------------1 row in set (0.05 sec)

Zowel de naam van het binaire logbestand als de positie zijn van cruciaal belang straks. Als je dit hebt opgeschreven, of gekopieerd, dan doe je in mysql:

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

Als laatste gaan we een speciaal replicatie account aanmaken op de master database. Deze gebruiker krijgt enkel 'replicatie' rechten en we kunnen netjes zijn proces volgen. Binnen MySQL kan dat in een statement door

mysql> grant replication slave on *.* to shadow@'slave-machine-naam' identified by 'password';

Slave inrichten

Mocht je dat nog niet gedaan hebben, dan is het nu zaak om mysql op de slave stop te zetten. We gaan de zojuist gemaakte database neerzetten en daarna het configuratie bestand klaar maken. Allereerst gaan de snapshot uitpakken:

tar -xzvf /tmp/snapshot.tar.gz

Dan is het zaak om de bestanden die niet op de slave machine horen weg te halen. Dit zijn master.pid en master-bin.*. En dan de configuratie file

aanpassen, de minimale toevoegiing is in dit geval een server-id:

server-id=2

. Je kan nu MySQL aanzetten. En dan vanuit MySQl de slave verder configureren:

mysql> CHANGE MASTER TO

-> MASTER_HOST='[master hostname]',

-> MASTER_USER='[replication username]',

-> MASTER_PASSWORD='[replication password]',

-> MASTER_LOG_FILE='[recorded log file name]',

-> MASTER_LOG_POS=[recorded log offset];

Waarbij je dus wel alle waardes moet vervangen door de waardes die bij jou van toepassing zijn. In de situatie zoals die in de voorbeelden is gebruikt is dat dus:

mysql> CHANGE MASTER TO

-> MASTER_HOST='nazgul',

-> MASTER_USER='shadow',

-> MASTER_PASSWORD='password',

-> MASTER_LOG_FILE='nazgul-bin.002',

-> MASTER_LOG_POS=14599324;

En als dat allemaal is gelukt, dan kan je de slave activeren:

mysql> start slave;

Vanaf dat moment zal de slave gaan beginnen om alle veranderingen die op de master hebben plaatsgevonden ook in zijn eigen database toe te passen. Als er een geruime tijd ligt tussen het nemen van de snapshot en en opzetten van de slave, geen probleem. Alleen zal het wat meer tijd in beslag nemen eerdat de slave volledig bij is. Je hebt nu een volledig replicerende MySQL configuratie gemaakt.

Testen

Verander gegevens in de master database om te zien of deze over worden genomen door de slave.





- Open een sessie naar je ubuntu server met putty.
- Om in te loggen in mysql geef je het commando:
mysql -u root -p
- Geef het wachtwoord op dat je tijdens de installatie van mysql hebt opgegeven.
- Voor een overzicht van alle databases die nu bestaan type je in 
SHOW DATABASES
- Maak een nieuwe database, en gebruik hem: 
CREATE DATABASE bestelling;
USE bestelling;
- We maken een tabel klant met de velden nr, naam, straat, huisnummer, toevoeging, postcode en woonplaats.
CREATE TABLE klant (
nummer INT NOT NULL AUTO_INCREMENT,
naam CHAR(30) NOT NULL,
     straat CHAR(30),
     huisnummer int,
     toevoeging CHAR(30),
     postcode CHAR(7),
     woonplaats CHAR(30),
PRIMARY KEY (nummer)
ENGINE=INNODB;

een klant toevoegen gaat met het volgende commando:

INSERT INTO klant (naam, straat, huisnummer, woonplaats) VALUES ('ICTaL','Lammenschanspark',2,'Leiden');

- Voeg op deze manier nog 4 klanten toe.
- Met het volgende commando vragen we alle gegevens van alle klanten op:
SELECT * FROM klant;

- Alleen het nummer en de naam gaat zo:
SELECT nummer, naam FROM klant;

- Alle velden van alle klanten uit leiden gaat zo:
SELECT * FROM klant WHERE woonplaats = 'Leiden';

We maken nu de tabel bestelling:

CREATE TABLE bestelling (nummer INT NOT NULL
                         klant   INT,
     product CHAR(30),
                         aantal  INT,
                         prijs   DOUBLE, 
                         INDEX klant_ind (klant),
                         
                         FOREIGN KEY (klant) REFERENCES klant(nummer)
   ON DELETE CASCADE
) ENGINE=INNODB;

- voeg een bestelling toe:

INSERT INTO bestelling (nummer, klant,product, aantal, prijs) VALUES (1,1,'Boek',2,3.5);


Vragen:
- Kun je een klant aanmaken zonder naam? Leg ook uit waarom
- Kun je twee klanten aanmaken met het zelfde nummer? Leg ook uit waarom
- Hoe vraag je de naam en de woonplaats van alle klanten op?
- Hoe vraag je de naam en het huisnummer van alle klanten die op nummer 2 wonen op?



Comments