{"id":436,"date":"2010-05-15T12:35:52","date_gmt":"2010-05-15T18:35:52","guid":{"rendered":"http:\/\/www.lastdragon.net\/?p=436"},"modified":"2015-09-18T18:11:26","modified_gmt":"2015-09-19T00:11:26","slug":"cluster-de-mysql","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=436","title":{"rendered":"Cluster de Mysql"},"content":{"rendered":"<p>Se han puesto de moda las \u201cbases de datos\u201d  NoSQL que en realidad son simples tablas sin transacciones seguras, un simple archivo de access o dbase moderno, cuya \u00fanica justificaci\u00f3n de existir es que pueden distribuirse pero sin la garant\u00eda de la integridad de datos como una transacci\u00f3n sql.<\/p>\n<p>Algunos motores como MS SQL, tienen la capacidad de crear bases de datos distribuidas y de alta disponibilidad pero es propietario, asi que mostrare como hacerlo en la base de datos mas usadas, la Mysql<\/p>\n<p>Para que se podr\u00eda usar una SQL distribuida, pues razones, muchas, replicaci\u00f3n por seguridad, balanceo de carga, tener 2 o mas sitios de alta disponibilidad, que si cae uno siga vivo el otro cada uno con su propia base de datos, haciendo consultas a su base de datos local pero que esta replicada con su parte en el otro servidor de forma que siempre est\u00e1n sincronizadas pero sin cargar mas que la maquina local pro sitio, distribuir una DB, Etc.<\/p>\n<p>Requerimientos previos.<\/p>\n<p>Contar con una instalaci\u00f3n de GNU\/Linux y descargar la versi\u00f3n mas reciente mysql-cluster, se usara en todos los nodos y se instalara e inicializaci\u00f3n es de la misma forma en todos los nodos<\/p>\n<p>http:\/\/www.mysql.com\/downloads\/cluster\/<\/p>\n<p>Crear el usuario y grupo mysql en caso de no tenerlos previamente creados<\/p>\n<p>Instalaci\u00f3n:<\/p>\n<p>para este caso descargue la versi\u00f3n Linux gen\u00e9rica<\/p>\n<p>se descomprime y se ponen los archivos en \/usr\/local\/ va a quedar una carpeta con un nombre muy largo para acortarlo se renombrara a simplemente mysql de modo que la ruta quede \/usr\/local\/mysql<\/p>\n<p>cambiar los permisos para que le pertenezcan al usuario mysql<\/p>\n<p>chown mysql.mysql -R \/usr\/local\/mysql<\/p>\n<p>Inicializar mysql<\/p>\n<p>cd \/usr\/local\/mysql\/scripts\/<br \/>\n.\/mysql_install_db &#8211;user=mysql &#8211;basedir=\/usr\/local\/mysql \u2013datadir=\/usr\/local\/mysql\/data<\/p>\n<p>Configurando el \/etc\/my.cnf<\/p>\n<p>Crear o Editar el archivo \/etc\/my.cnf, al igual que la instalaci\u00f3n e inilizacion, este archivo debe ser igual en cada uno de los nodos del cluster incluido el cluster manager<\/p>\n<p>[mysqld]<\/p>\n<p>datadir=\/usr\/local\/mysql\/data<\/p>\n<p>socket=\/tmp\/mysql.sock<\/p>\n<p>user=mysql<\/p>\n<p>ndbcluster<\/p>\n<p>ndb-connectstring=192.168.5.215<\/p>\n<p># Default to using old password format for compatibility with mysql 3.x<\/p>\n<p># clients (those using the mysqlclient10 compatibility package).<\/p>\n<p>old_passwords=1<\/p>\n<p>[mysql_cluster]<\/p>\n<p>ndb-connectstring=192.168.5.215<\/p>\n<p>[mysqld_safe]<\/p>\n<p>log-error=\/var\/log\/mysqld.log<\/p>\n<p>pid-file=\/var\/run\/mysqld\/mysqld.pid<\/p>\n<p>ndb-connectstring contiene la ip del cluster manager<\/p>\n<p>Cluster Manager<\/p>\n<p>Configuraci\u00f3n del Cluster Manager y nodo, sera la computadora que va a llevar el control del cluster, puede haber mas de uno para hacerlo tolerante a fallos aunque en este caso solo tendremos uno<\/p>\n<p>El cluster manager debe tener el siguiente directorio<\/p>\n<p>\/var\/lib\/mysql-cluster<\/p>\n<p>crearlo con mkdir \/var\/lib\/mysql-cluster<\/p>\n<p>y dentro crear un archivo config.ini<\/p>\n<p>vi \/var\/lib\/mysql-cluster\/config.ini<\/p>\n<p>el contenido para este caso sera:<\/p>\n<p>[tcp default]<br \/>\nSendBufferMemory=2M<br \/>\nReceiveBufferMemory=2M<br \/>\n#portnumber=2202        <\/p>\n<p>[ndbd default]<br \/>\nNoOfReplicas=1<br \/>\nDataMemory=512M<br \/>\nIndexMemory=512M<br \/>\nMaxNoOfConcurrentOperations=100000<br \/>\nMaxNoOfTables=10<br \/>\ndatadir=\/var\/lib\/mysql-cluster<br \/>\nMaxNoOfOrderedIndexes=1024<br \/>\nMaxNoOfAttributes=4400        <\/p>\n<p>[ndb_mgmd]<\/p>\n<p>id=1<\/p>\n<p>hostname=192.168.5.215<\/p>\n<p>datadir=\/var\/lib\/mysql-cluster<\/p>\n<p>[ndbd]<\/p>\n<p>id=2<\/p>\n<p>hostname=192.168.5.121<\/p>\n<p>datadir=\/usr\/local\/mysql\/data<\/p>\n<p>[ndbd]<\/p>\n<p>id=3<\/p>\n<p>hostname=192.168.5.1<\/p>\n<p>datadir=\/usr\/local\/mysql\/data<\/p>\n<p>[mysqld]<\/p>\n<p>id=10<\/p>\n<p>hostname=192.168.5.215<\/p>\n<p>[mysqld]<\/p>\n<p>id=11<\/p>\n<p>hostname=192.168.5.121<\/p>\n<p>[mysqld]<\/p>\n<p>id=12<\/p>\n<p>hostname=192.168.5.1<\/p>\n<p>en [ndbd default] dependiendo de las capacidades de las computadoras que participaran en el cluster se administrara la memoria ram, mientras mas tenga, mejor<\/p>\n<p>DataMemory=512M<br \/>\nIndexMemory=512M <\/p>\n<p>En mi caso tenian 1GB de RAM, asi que asigne 512Mb reverlandolos para el cluster de la DB y el resto para que funcione Linux y los dem\u00e1s programas<\/p>\n<p>NoOfReplicas indica la cantidad de nodos que replicaran, sin contar el manager el numero debe ser mayor a la cantidad de nodos<\/p>\n<p>MaxNoOfTables en los cluster no replicamos la base de datos entera, de hecho solo se replican las tablas, toda tabla que se quiera replicar, debe tener el motor de cluster y no sobre pasar el numero indicado en MaxNoOfTables<\/p>\n<p>[ndb_mgmd]<br \/>\n debe haber uno por cada nodo de administraci\u00f3n o manager cluster, puede haber mas de uno y m\u00ednimo uno por cada cluster<\/p>\n<p>[ndbd]<br \/>\n  debe haber uno por cada nodo, no es necesario especificar uno para el manager<\/p>\n<p>[mysqld] debe haber uno por cada nodo incluido uno para el manager<\/p>\n<p>los ID son opcionales, pero para tener un mejor control y saber que nodo funciona exactamente y cual falla es mejor especificar un ID por propia cuenta<\/p>\n<p>Arranque del cluster<\/p>\n<p>Se arranca primero el manager y siempre debe arrancarse primero los programas de administracion de cluster antes que la base de datos y antes de empezar a trabajar en ella como crear una base de datos o las tablas del cluster, de lo contrario se crean locales y no se replicaran.<\/p>\n<p>cd \/usr\/local\/mysql\/bin<br \/>\n.\/ndb_mgmd -f \/var\/lib\/mysql-cluster\/config.ini<\/p>\n<p>Arranque de los nodos<\/p>\n<p>cd \/usr\/local\/mysql\/bin<br \/>\n.\/ndbd<\/p>\n<p>Asegurando que inicio el cluster antes de arrancar mysql, usando ndb_mgm en el manager o en cualquier nodo<\/p>\n<p>cd \/usr\/local\/mysql\/bin<br \/>\n.\/ndb_mgm<\/p>\n<p>Estando dentro del CLI de ndb_mgm escribir show para ver el estado o quit para salir<br \/>\nSi ya arranco el nodo master que es el primer nodo despues del manager, ya se puede arrancar mysql con mysqld_safe<\/p>\n<p>arranque de Mysql<\/p>\n<p>cd \/usr\/local\/mysql\/bin<br \/>\n.\/mysqld_safe &#038;<\/p>\n<p>Creando las base de datos y la primera tabla<\/p>\n<p>.\/mysqldadmin create mibasededatos<\/p>\n<p>la base de datos debe ser creada manualmente en cada nodo del cluster, porque las bases de datos son locales, lo unico que participa en el cluster son las tablas del cluster<\/p>\n<p>Creando una tabla de cluster<\/p>\n<p>las tablas se crean como cualquier otra pero se usa el motor ndbcluster<\/p>\n<p>CREATE TABLE mitabla (micampo char(10)) ENGINE=NDBCLUSTER;<\/p>\n<p>A diferencia de las bases de datos que hay que crearlas manualmente, las tablas se replican desde el momento de su creaci\u00f3n, por lo que se puede crear en cualquiera de los nodos del cluster y desde ya sera replicada a todos los dem\u00e1s, incluida las operaciones como insert, delete y todas las dem\u00e1s que se hagan sobre ella.<\/p>\n<p>Material disponible, v\u00eddeo demostrativo<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/aWUeSTNxX10\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se han puesto de moda las \u201cbases de datos\u201d NoSQL que en realidad son simples tablas sin transacciones seguras, un simple archivo de access o dbase moderno, cuya \u00fanica justificaci\u00f3n de existir es que pueden distribuirse pero sin la garant\u00eda de la integridad de datos como una transacci\u00f3n sql. Algunos motores como MS SQL, tienen&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-436","post","type-post","status-publish","format-standard","hentry","category-consultoria-y-manuales"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/436","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=436"}],"version-history":[{"count":2,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/436\/revisions"}],"predecessor-version":[{"id":1483,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/436\/revisions\/1483"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=436"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=436"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}