{"id":1480,"date":"2015-09-18T18:08:58","date_gmt":"2015-09-19T00:08:58","guid":{"rendered":"https:\/\/www.lastdragon.net\/?p=1480"},"modified":"2015-09-18T18:08:58","modified_gmt":"2015-09-19T00:08:58","slug":"mariadb-cluster","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=1480","title":{"rendered":"MariaDB Cluster"},"content":{"rendered":"<p>Este articulo se basa en MariaDB Cluster, sin Galera.<\/p>\n<p>Hacer esto con MariaDB sera mas sencillo de cuando escrib\u00ed el articulo de <a href=\"https:\/\/www.lastdragon.net\/?p=436\">Mysql Cluster<\/a>  , En las versiones actuales tanto Mysql como MariaDB pueden replicarse de una forma muy f\u00e1cil<\/p>\n<p>Con este tipo de cluster las consultas se pueden realizar en los servicios esclavos de MariaDB, pero los insert, creaci\u00f3n de tablas, en general cualquier modificaci\u00f3n de la base de datos debe hacerse en el servicio Maestro de MariaDB<\/p>\n<p>Para este ejemplo tendr\u00e9 un nodo Maestro y 2 Esclavos<\/p>\n<p>El maestro tiene la ip 192.168.5.200<br \/>\nlos esclavos 192.168.5.201 y 192.168.5.202<\/p>\n<p>Estoy usando el MariaDB que viene incluido en CentOS 7 <\/p>\n<p>La configuraci\u00f3n de cada MariaDB en cada nodo.<\/p>\n<p>Se agrega en \/etc\/my.cnf :<\/p>\n<blockquote><p>server-id=1<br \/>\nlog-bin=&#8221;mysql_log.bin&#8221;<br \/>\nbinlog-do-db=cluster<br \/>\nreplicate-do-db=cluster<\/p><\/blockquote>\n<p>server-id es la identificaci\u00f3n de cada nodo en el cluster, el maestro sera el 1 y los esclavos 2 y 3.<br \/>\nlog-bin es un registro binario de transacciones<br \/>\nbinlog-do-db y replicate-do-db se igualan a la base de datos que sera repartida por el cluster. En este jemplo la base de datos de cluster se llama \u201c cluster \u201c<\/p>\n<p>La configuraci\u00f3n es igual en cada nodo, excepto que en los otros nodos el server-id debe ser diferente, para un eslclavo 2 , para el otro 3 y si hubieran mas esclavos, 4, 5, 7 &#8230;..<\/p>\n<p>Preferentemente se debe crear la DB antes de iniciar la configuracion.<\/p>\n<blockquote><p>mysqladmin create cluster<\/p><\/blockquote>\n<p><strong>Configuraci\u00f3n en el MariaDB Maestro.<\/strong><\/p>\n<p>Crear el usuario que tendr\u00e1 privilegios para replicar en los escalvos, para este articulo use clusterReplica y que puede recibir conexiones desde cualquier IP , su clave sera cluster<\/p>\n<p>grant replication slave on *.* to &#8216;clusterReplica&#8217;@&#8217;%&#8217; identified by &#8216;cluster&#8217;;<\/p>\n<p>flush privileges;<\/p>\n<p><strong>Configuraci\u00f3n en los esclavos :<\/strong><\/p>\n<p>change master to master_host=&#8217;192.168.5.200&#8242;,master_user=&#8217;clusterReplica&#8217;, master_password=&#8217;cluster&#8217;,master_log_file=&#8217;XX&#8217;, master_log_pos=YY;<\/p>\n<p>Los valores de master_log_file=&#8217;XX&#8217;  master_log_pos=YY no son YY ni XX, estos valores se obtienen de una consulta en el nodo maestro con show master status;<\/p>\n<p>si se obtiene algo como:<\/p>\n<blockquote><p>MariaDB [(none)]> show master status;<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n| mysql_log.000002 |      245 | cluster      |                  |<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n1 row in set (0.00 sec)<\/p><\/blockquote>\n<p>entonces la sentencia change es la siguiente.<\/p>\n<p><code>change master to master_host='192.168.5.200',master_user='clusterReplica', master_password='cluster',master_log_file='mysql_log.000002', master_log_pos=245;<br \/>\n<\/code><\/p>\n<p>antes de insertar el change master en cada uno de los esclavos debe realizar la consulta show master status; en el nodo maestro debido a que el valor de la posici\u00f3n puede cambiar <\/p>\n<p>finalmente se activa el nodo como esclavo con:<\/p>\n<p><code>start slave;<\/code><\/p>\n<p><strong>Conclusiones:<\/strong><\/p>\n<p>Esta configuraci\u00f3n es muy f\u00e1cil de realizar, es f\u00e1cil de usar si el desatollo es propio pues los insert a la db se tienen que hacer en el nodo maestro y las consultas en los escalvos, en el c\u00f3digo del programa se debe tener una cuenta para los insert, delete y update y otra de solo lectura para los select. Debido a que hacer insert en los nodos esclavos no har\u00eda que el datos insertado se replique en los nodos del cluster.<\/p>\n<p>Cuando el desarrollo no es propio y se usan apps como WordPress, Joomla o cualquier otra que no esta pensanda en este tipo de solucion ocurre que intentan hacer los insert en sus nodos esclavos haciendo que no se sincronicen los nodos del cluster.<\/p>\n<p>Hay 2 soluciones a esto, si eres programador puedes modificar estas aplicaciones para que los insert los haga en el maestro y todas las lecturas en los esclavos. \u00bf No eres un programador ?  aun as\u00ed puedes clusterizar correctamente pero solo escalaria a un maximo de 2 nodos de cluster.<\/p>\n<p><strong>Cada nodo puede ser esclavo y maestro al mismo tiempo<\/strong><\/p>\n<p>Si tienes 2 servidores puedes tener una replica de maestro-esclavo a maestro-esclavo, la configuraci\u00f3n. Significa que el nodo maestro server-id = 1 sera esclavo del server-id = 2 , el server-id = 2 sera el esclavo del server-id=1<\/p>\n<p>Es tan simple como agregar la configuraci\u00f3n de servidor y esclavo en el mismo nodo solo que uno apuntando al otro en el change master, de esta forma lo que escribe el nodo 2 se replica al nodo 1 como si fuera un esclavo, y lo que escribe el nodo 1 se replica al nodo 2 como si fuera un esclavo.<\/p>\n<p><strong>Por que solo puede hacerse entre 2 servidores.<\/strong><\/p>\n<p>En la versi\u00f3n que viene con CentOS  y las que actualmente se consideran estables y probadas, los nodos esclavos solo pueden tener un maestro lo que los encasilla en solo 2 servidores por cluster  cuando ambos son maestros.<\/p>\n<p>Existe otra soluci\u00f3n l\u00f3gica pero no la he logrado hacer funcionar. Una soluci\u00f3n en anillo.<\/p>\n<p>Si hay 3 nodos.<\/p>\n<p>El nodo maestro 1 tiene por esclavo al nodo 2<br \/>\nEl nodo maestro 2 tiene por esclavo al nodo 3<br \/>\nEl nodo maestro 3 tiene por esclavo al nodo 1<\/p>\n<p>El teor\u00eda debe funcionar, sin embargo  si el nodo 1 hace un insert el nodo 2 lo recibe, pero no lo replica al nodo 3, si el nodo 3 hace un insert el nodo 1 lo recibe pero no se replica a el nodo 2 . Supongo que solo los eventos de insert, update o delete son transmitidos a los esclavos y los que llegan por replicaci\u00f3n no disparan los eventos necesarios para lanzar la replicaci\u00f3n al siguiente esclavo.<\/p>\n<p>Las versiones de la serie 10 de MariaDB incluyen un nuevo concepto llamado multi-sourcing o multi fuente, esto permite que cada esclavo tenga mas de un maestro, con esto se puede lograr una l\u00f3gica de cluster en estrella.<\/p>\n<p>Finalmente pudiera usarse Galera como opci\u00f3n a clusterizar de maestro a multi maestro.<\/p>\n<p>A continuaci\u00f3n un v\u00eddeo que muestra la configuraci\u00f3n descrita en el articulo.<\/p>\n<p><iframe loading=\"lazy\" width=\"420\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/kknnJrmPgK0\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este articulo se basa en MariaDB Cluster, sin Galera. Hacer esto con MariaDB sera mas sencillo de cuando escrib\u00ed el articulo de Mysql Cluster , En las versiones actuales tanto Mysql como MariaDB pueden replicarse de una forma muy f\u00e1cil Con este tipo de cluster las consultas se pueden realizar en los servicios esclavos de&#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-1480","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\/1480","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=1480"}],"version-history":[{"count":1,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1480\/revisions"}],"predecessor-version":[{"id":1481,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1480\/revisions\/1481"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}