Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHP et MariaDB dans le Cloud

143 views

Published on

Présentation effectuée au Rencontres Mondiales du Logiciel Libre (RMLL) 2017 par Christophe Villeneuve sur "PHP ete MAriaDB dans le Cloud"
Vous allez voir comment utilisé PHP et MariaDB en NoSQL, SQL, BigData

Published in: Internet
  • Be the first to comment

  • Be the first to like this

PHP et MariaDB dans le Cloud

  1. 1. PHP & MariaDB dans le Cloud Christophe Villeneuve @hellosct1 @hellosct1@mamot.fr
  2. 2. Qui ??? Christophe Villeneuve mozilla reps - firefox os - B2GOS - ausy - afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – phptour – forumphp – solutionlinux – Libre@toi – eyrolles – editions eni – programmez – linux pratique – webriver – phptv – elephpant - owasp -security
  3. 3. RMLL 2017 – 5 Juillet 2017 Aujourd'hui ● Environnement ● Côté développeur ● Côté DBA ● Autres ● Maintenance
  4. 4. Environnement de développement
  5. 5. RMLL 2017 – 5 Juillet 2017 Environnement ● Serveur Mutualisé ● Serveur Dédié ● Auto-Hébergement ● Amazon Web Service (AWS) ● Azure ● Google Cloud Platform ● OVH ● Gandi ● ... Classique Cloud Installation par - Interface - Ligne de commande Installation par - Interface - Ligne de commande OS ?OS ?
  6. 6. RMLL 2017 – 5 Juillet 2017 Installation Serveur $ apt-get -y install apache2 $ a2enmod ssl $ a2ensite default-ssl $ apt-get install nginx $ mkdir /etc/nginx/ssl $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
  7. 7. RMLL 2017 – 5 Juillet 2017 Installation Langage : PHP $ apt-get -y install php7.0 libapache2-mod-php7.0 $ apt-get -y install php7.0-mysql ...
  8. 8. RMLL 2017 – 5 Juillet 2017 Installation Base de données
  9. 9. RMLL 2017 – 5 Juillet 2017 ✔ Fondé par ✔ Monty Widenius ✔ David Axmark ✔ 1983 – 1ère idée ✔ Fondé en 1995 ✔ 2007 Préparation pour Nasdaq ✔ 2008 Rachat par Sun ✔ 2009 Sun racheté par Oracle ✔ Promesse de Oracle sur 5 ans (fin 2014) L'origine Dates importantes Rappels
  10. 10. RMLL 2017 – 5 Juillet 2017 ✔ Communauté d'amis ✔ 100 % Open source et  compatible MySQL ✔ Plateforme d'innovation ✔ Des commiteurs ✔ Fondation (2013) ✔ Dec 2008 Création de  Monty Program   → Monty Widenius ­­­­­­­­­­­­ MariaDB ­­­­­­­­­­­­­ ✔ 5.1 (Fev 2010) ✔ 5.5.56 (Aujourd'hui) ✔ 10.0 (Mars 2013) ✔ 10.2 (Mai 2017)  Galera people Compression Multimaster Replication MariaDB : Le projet...
  11. 11. RMLL 2017 – 5 Juillet 2017 ✔ PHP (driver natif) → BSD licence ✔ Python ✔ Perl ✔ Ruby ✔ .NET avec MyODBC ✔ JDBC (basé sur drizzle driver) ✔ C ✔ Oracle connector (licence GPL) Tous sont LGPL → Aucune licence commerciale Différents connecteurs avec MariaDB
  12. 12. RMLL 2017 – 5 Juillet 2017 MariaDB Repositories : installation > sudo apt-get install software-properties-common > sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 > sudo add-apt-repository 'deb [arch=amd64,i386] http://fr.mirror.babylon.network/mariadb/repo/10.2/ubuntu yakkety main' https://downloads.mariadb.org/mariadb/repositories/#mirror=babylon-fr&distro=Ubuntu&distro_release=yakkety--ubuntu_yakkety&version=10.2
  13. 13. RMLL 2017 – 5 Juillet 2017 ✔ sudo apt-get install mariadb-server mariadb-client ✔ Vous retrouvez : ✔ /etc/mysql/my.cnf ✔ > mysql ✔ Au final Linux
  14. 14. RMLL 2017 – 5 Juillet 2017 PHP & MariaDB (1/3) ● Connexion <?php try { $cnx = new PDO('mysql:host='.$serveur.';port='.$port.';dbname='.$bdd, $login,$pass); $cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Ici votre code } catch (PDOException $e) { die ('Erreur : '.$e->getMessage()); } ?> $serveur = "localhost"; $login= "votreLogin"; $pass = "VotrePassword"; $bdd = "votreDatabase" ; $port='3306';
  15. 15. RMLL 2017 – 5 Juillet 2017 PHP & MariaDB (2/3) ● Select <?php $sql="SELECT * from users "; $qid=$cnx->prepare($sql); $qid->execute(); $row=$qid->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($row); echo '</pre>'; $qid->closeCursor(); $cnx = null; ?> Requête SQL classique
  16. 16. RMLL 2017 – 5 Juillet 2017 PHP & MariaDB (3/3) ● Insert ● Update <?php $cnx->beginTransaction(); $sql="INSERT INTO users (‘last_name’, ‘first_name’) VALUES ('Villeneuve', 'Christophe')"; $qid=$cnx->prepare($sql); $qid->execute(); $cnx->commit(); ?> <?php $cnx->beginTransaction(); $sql="UPDATE exemple SET nom='ENI' WHERE id=3"; $qid=$cnx->prepare($sql); $qid→execute(); $cnx->commit(); ?>
  17. 17. RMLL 2017 – 5 Juillet 2017 NewSQL → Développement → Moteur de stockages +
  18. 18. RMLL 2017 – 5 Juillet 2017 Développement
  19. 19. RMLL 2017 – 5 Juillet 2017 ✔ Pont entre les BDD relationnelles et non relationnelles ✔ Toutes les colonnes stockées dans un « blob » ✔ Possibilité de le manipuler ✔ Possibilité de créer des index Virtuels Colonnes Dynamiques
  20. 20. RMLL 2017 – 5 Juillet 2017 create table newsql(  id int      auto_increment         primary key, nom varchar(40), type enum       ('animal',      'ordinateur'), prix int, nosql blob); COLUMN_CREATE( column_nr,  value [as type], [ column_nr,  value [as type] ],  ...) Exemple (colonne dynamique) 1/3 ID nom type Prix blob Multi produits
  21. 21. RMLL 2017 – 5 Juillet 2017 Exemple (colonne dynamique) 2/3 >INSERT into newsql values (NULL, 'Atari' ,'ordinateur',500,  COLUMN_CREATE('couleur', 'Noir', 'type' , 'STe')); >INSERT into newsql values (NULL, 'elePHPant','animal',20,  COLUMN_CREATE('taille', 'normal', 'description' , 'peluche')); >UPDATE newsql SET nosql = COLUMN_ADD(nosql, 'couleur' , 'blue')  WHERE id=2; ID Nom type prix couleur type taille description 1Atari Ordinateur 500Noir Ste 2elePHPant animal 20bleu normal peluche >SELECT nom, column_list (nosql) FROM newsql; Multi produits
  22. 22. RMLL 2017 – 5 Juillet 2017 Exemple (colonne dynamique) 3/3 >SELECT nom, COLUMN_JSON(nosql) FROM newsql; >SELECT id,type,nom, COLUMN_GET(nosql, 'couleur' as char) AS couleur,prix FROM newsql; Multi produits
  23. 23. RMLL 2017 – 5 Juillet 2017 Moteur de stockage storage engine
  24. 24. RMLL 2017 – 5 Juillet 2017 Ouverture vers le NewSQL ● Moteur de stockage : CassandraSE ● Dispo MariaDB 10.0+ ● Brique de Apache Cassandra ● Données non relationnelles (NoSQL) ● Assurer l'intégration des données SQL / NoSQL ● Mapping possible ● Manipulations : static columns, dynamic columns, rowkey ● Installation dans My.cnf [mysqld] plugin-load=ha_cassandra.so
  25. 25. RMLL 2017 – 5 Juillet 2017 CassandraSE : Utilisation (1/2) > create table t2 (rowkey varchar(36) primary key, data1 varchar(60), data2 varchar(60) ) engine=cassandra keyspace='mariadbtest' thrift_host='localhost' column_family='cf1'; Clé primaire obligatoire Colonnes statiques Sous ensemble des colonnes CF
  26. 26. RMLL 2017 – 5 Juillet 2017 CassandraSE : Utilisation (2/2) > insert into t1 values ('rowkey10', 'data1-value', 123456), ('rowkey11', 'data1-value2', 34543); > select * from t1 where rowkey='rowkey11';
  27. 27. RMLL 2017 – 5 Juillet 2017 Manipuler les données : Connect ● Dispo MariaDB 10.0+ ● ETL : Extract, transform et Load ● Lecture / Ecriture / MAJ – TXT, DBF, INI, XML – MS Access, MS Excel, TBL (similaire à MERGE) – ODBC, MySQL,SQLite, Oracle, DB2, WMI… – NoSQL : MongoDB ● Locale ou distant ● Custom possible ● Accès en parallèle sur multitables ● Installation dans My.cnf [mysqld] plugin-load=ha_connect.so
  28. 28. RMLL 2017 – 5 Juillet 2017 Connect : exemple CSV ● Fichier – first,last,birthday – "Christophe","Villeneuve","Jan 1" – "PHP","ODBC","Nov 22" > CREATE TABLE users_csv ( first varchar(32) NOT NULL, last varchar(32) NOT NULL, birthday varchar(50) NOT NULL ) ENGINE=CONNECT TABLE_TYPE =CSV FILE_NAME ='/var/lib/mysql/users.csv' HEADER=1 SEP_CHAR=',' QUOTED=1; > SELECT * FROM users_csv; | first | last | birthday | +---------------+---------------+-------------+ | Christophe | Villeneuve | Jan 1 | | PHP | ODBC | Nov 22 | +---------------+---------------+-------------+
  29. 29. RMLL 2017 – 5 Juillet 2017 Connect : exemple MongoDB (1/3) ● Driver : ha_connect.so ● Méthode ODBC – > mongoexport –db test –collection restaurants –out /var/lib/mysql/test/restaurants.json –jsonArray https://github.com/NYUITP/sp13_10g
  30. 30. RMLL 2017 – 5 Juillet 2017 Connect : exemple MongoDB (2/3) { '_id' : ObjectId('580cda5aaf1de8b908ccfe40'), 'coord' : {'numero' : '522', 'adresse' : 'Rue des champs elysees', 'codepostal' : '75000' }, 'Notes' : [ {'date' : ISODate('2016-09-02T00:00:00Z'), 'note' : 'A', 'but' : 12 }, {'date' : ISODate('2013-12-19T00:00:00Z'), 'note' : 'B', 'but' : 16 }, {'date' : ISODate('2013-05-28T00:00:00Z'), 'note' : 'A', 'but' : 9 }, {'date' : ISODate('2012-12-07T00:00:00Z'), 'note' : 'A', 'but' : 13 }, {'date' : ISODate('2012-03-29T00:00:00Z'), 'note' : 'A', 'but' : 11 } ], 'name' : 'Restaurant XXX', 'restaurant_id' : '40361521' } ● Avec MongoDB
  31. 31. RMLL 2017 – 5 Juillet 2017 Connect : exemple MongoDB (3/3) ● Avec MariaDB | proprietaire | Nom restaurant | notes | +---------------------+------------------------------------------------+--------------+ | Treva Tullis | Bagels N Buns | A | | Maud Morningstar | La Fusta Restaurant | A | | Vanessa Vowell | The Greek Corner | A | | Teressa Truex | Mcdonald’S | A | | Eli Enright | Neron’S Pizza | A > SELECT proprietaire, nom_restaurant, note FROM proprietors, restaurants WHERE proprietors.restaurant_id=restaurants.restaurant_id AND grades_date>‘2017-01-08’ AND grades_grade IN(‘A’,‘B’);
  32. 32. RMLL 2017 – 5 Juillet 2017 Storage Engine : ColumnStore BigData
  33. 33. RMLL 2017 – 5 Juillet 2017 MariaDB ColumnStore (1/2) ● Portage de la Base de données : InfiniDB 4.6.7 ● Disponible à partir de MariaDB 10.1 – Update MariaDB 10.2 ● Moteur de stockage orienté en colonnes ● Architecture (en parallèle) – Exécution de requêtes distribuée – Chargement de données ● Licence GPL https://mariadb.com/kb/en/mariadb/mariadb-columnstore/
  34. 34. RMLL 2017 – 5 Juillet 2017 MariaDB ColumnStore (2/2) ● OS – CentOS 6 et 7 – Debian 8 – Ubuntu 16.04 ● Utilisation dans cloud : – AWS AMI ● Utilisation pour les développeurs : – Docker – Vagrant
  35. 35. RMLL 2017 – 5 Juillet 2017 Axée sur la rangée VS Orienté Column ● Axée sur la rangée – Les Lignes stockées séquentiellement dans un fichier ● Orienté colonne – Chaque colonne est stockée dans un fichier séparé
  36. 36. RMLL 2017 – 5 Juillet 2017 Pourquoi ? ● Traitement des 'petabytes' de données ● Utilisation – Temps de réponse en temps réel ● aux requêtes analytiques – Traitement par lots → Batch – Algorithmique ● Sécurité – Bénéficie des mêmes fonctionnalités de sécurité existante – Cryptage sur les données en mouvement
  37. 37. RMLL 2017 – 5 Juillet 2017 Réplication (en temps réel) ● MariaDB MaxScale – Maitre(s) / Eclave(s) ● Réplications les transactions – MariaDB → Hadoop ● Pas d'impact – Sur les performances – Sur les métadonnées
  38. 38. RMLL 2017 – 5 Juillet 2017 Architecture ● Moteur utilisateur : précompte les requêtes SQL ● Module de performance : moteur de traitement distribué (C) MariaDB
  39. 39. RMLL 2017 – 5 Juillet 2017 Sécuriser
  40. 40. RMLL 2017 – 5 Juillet 2017 Lors de l'installation > mysql_secure_installation Enter current password for root (enter for none): ← Entrée Set root password? [Y/n] ← y New password: ← saisir nouveau Mot de passe Re-enter new password: ← resaisir Mot de passe Remove anonymous users? [Y/n] ← y Disallow root login remotely? [Y/n] ← y Reload privilege tables now? [Y/n] ← y
  41. 41. RMLL 2017 – 5 Juillet 2017 Les connexions 'SSL / TLS' sécurisés disponibles ● Connexions client / serveur → protocole TLS – Les données peuvent être cryptées pendant le transfert à l'aide du protocole TLS ● Variable système SSL / TLS ● Variable d'état SSL / TLS ● Réplication avec connexions sécurisées – Maître(s) / Esclave(s) avec des données cryptées
  42. 42. RMLL 2017 – 5 Juillet 2017 Connexion 'SSL / TLS' ● Par défaut – Connexion non chiffré ● Si le serveur prend en charge les connexions sécurisées → OUI ● Pour activer TLS – Démarrer le serveur avec l'option --ssl > SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+ https://mariadb.com/kb/en/mariadb/secure-connections-overview/
  43. 43. RMLL 2017 – 5 Juillet 2017 ● Cryptage de données ● Transfert TLS ● Exemple – have_openssl – have_ssl ● Interchangeable SSL ● SSL n'est plus considéré comme sécurisé ● Exemple – ssl_ca – ssl_capath – ... Options 'SSL / TLS' Système/Status de variables Attention https://mariadb.com/kb/en/mariadb/ssltls-system-variables/ https://mariadb.com/kb/en/mariadb/ssltls-status-variables/
  44. 44. RMLL 2017 – 5 Juillet 2017 Réplication https://mariadb.com/kb/en/mariadb/replication-with-secure-connections/ ● Maître(s) / Esclave(s) ● Répliqués des données cryptées ● Activation des connexions sécurisées (obligatoire) ● Cluster Attention Si un des serveurs n'est pas configuré pour les connexions sécurisés → les connexions ne seront pas cryptées
  45. 45. RMLL 2017 – 5 Juillet 2017 Réplication : exemple (1/3) ● Création SSL dans chaque serveur sudo mkdir -p /etc/mariadb/ssl ● Gestion des certificats $ sudo openssl genrsa 4096 > ca-key.pem $ sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem ● Créer un certificat de serveur sur serveur1 $ sudo openssl req -newkey rsa:4096 -days 3600 -nodes -keyout server-key.pem -out server-req.pem $ sudo openssl rsa -in server-key.pem -out server-key.pem $ sudo openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca- key.pem -set_serial 01 -out server-cert.pem
  46. 46. RMLL 2017 – 5 Juillet 2017 Réplication : exemple (2/3) ● Vérification des certificats (serveur1) sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem ● Résultat server-cert.pem: OK client-cert.pem: OK ● Copier le certificat vers les autres serveurs sudo scp /etc/mariadb/ssl/*.pem root@10.0.0.2:/etc/mariadb/ssl/ ● Installation MariaDB sudo apt-get install mariadb mariadb-server -y
  47. 47. RMLL 2017 – 5 Juillet 2017 Réplication : exemple (3/3) ● Configuration de my.cnf – pour chaque serveur # SSL ssl-ca=/etc/mariadb/ssl/ca-cert.pem ADD under [mysqld]: # SSL ssl-ca=/etc/mariadb/ssl/ca-cert.pem ssl-cert=/etc/mariadb/ssl/server-cert.pem ssl-key=/etc/mariadb/ssl/server-key.pem CHANGE under [mysqld]: server-id = 1 log-bin=mysql-bin binlog_format=mixed Pas de modifications (processus identique) pour : La réplication / MariaDB Galera Cluster
  48. 48. RMLL 2017 – 5 Juillet 2017 En résumé
  49. 49. RMLL 2017 – 5 Juillet 2017 Merci Christophe Villeneuve @hellosct1

×