{"id":397,"date":"2015-02-17T07:14:00","date_gmt":"2015-02-17T07:14:00","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/2015\/02\/17\/getting-started-with-percona-xtradb-cluster\/"},"modified":"2019-09-18T14:23:25","modified_gmt":"2019-09-18T08:53:25","slug":"getting-started-with-percona-xtradb-cluster","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2015\/02\/17\/getting-started-with-percona-xtradb-cluster\/","title":{"rendered":"Getting Started with Percona XtraDB Cluster"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align:left;\">\n<div dir=\"ltr\" style=\"text-align:left;\">\n<div dir=\"ltr\" style=\"text-align:left;\">\n<div dir=\"ltr\" style=\"text-align:left;\">\n<div dir=\"ltr\" style=\"text-align:left;\">\n<h2 style=\"text-align:left;\"><span style=\"font-family:inherit;font-size:x-large;\">Percona XtraDB Cluster<\/span><\/h2>\n<div>As a DevOps activist I am exploring Percona XtraDB. In a series of blogs I will share my learnings. This blog intends to capture step by step details of installation of Percona XtraDB in Cluster mode.\u00a0<\/div>\n<div>\u00a0<\/div>\n<p><span style=\"font-size:large;\">Why Cluster Mode Introduction:<\/span><\/p>\n<p>Percona XtraDB cluster is High Availability and Scalability solution for MySQL users which provides <br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Synchronous replication : Transaction either committed on all nodes \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 or none.<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Multi-master replication : You can write to any node.<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Parallel applying events on slave : parallel event application on all slave \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 nodes<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Automatic node provisioning <br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Data consistency<br \/><span style=\"font-size:large;font-weight:normal;\">Straight into the Act:<\/span><span style=\"font-size:large;font-weight:normal;\">Installing Percona XtraDB Cluster <\/span><\/p>\n<div>Pre-requisites\/Assumptions<\/div>\n<div>\n<ol style=\"text-align:left;\">\n<li>OS &#8211; Ububtu<\/li>\n<li>3 Ubuntu nodes are available<\/li>\n<\/ol>\n<div>For the sake of this discussion lets name the nodes as<\/div>\n<\/div>\n<pre class=\"prettyprint\"><code class=\"language-config hljs avrasm\"><span class=\"hljs-label\">node <span class=\"hljs-number\">1<\/span><br \/>hostname:<\/span> percona_xtradb_cluster1<br \/><span class=\"hljs-label\">IP:<\/span> <span class=\"hljs-number\">192.168<\/span><span class=\"hljs-number\">.1<\/span><span class=\"hljs-number\">.2<\/span><br \/><br \/>node <span class=\"hljs-number\">2<\/span><br \/><span class=\"hljs-label\">hostname:<\/span> percona_xtradb_cluster2<br \/><span class=\"hljs-label\">IP:<\/span> <span class=\"hljs-number\">192.168<\/span><span class=\"hljs-number\">.1<\/span><span class=\"hljs-number\">.3<\/span><br \/><br \/>node <span class=\"hljs-number\">3<\/span><br \/><span class=\"hljs-label\">hostname:<\/span> percona_xtradb_cluster3<br \/><span class=\"hljs-label\">IP:<\/span> <span class=\"hljs-number\">192.168<\/span><span class=\"hljs-number\">.1<\/span><span class=\"hljs-number\">.4<\/span><\/code><\/pre>\n<p>Repeat the below steps on all nodes<\/p>\n<p><b>STEP 1 :<\/b> Add the Percona repository<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\">$ echo \"deb http:\/\/repo.percona.com\/apt precise main\" &gt;&gt; \/etc\/apt\/sources.list.d\/percona.list<br \/>$ echo \"deb-src http:\/\/repo.percona.com\/apt precise main\" &gt;&gt; \/etc\/apt\/sources.list.d\/percona.list<br \/>$ apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A<br \/><\/code><\/pre>\n<\/div>\n<pre class=\"prettyprint\"><b>STEP 2 :<\/b> After adding percona repository, Update apt cache so that new packages can be included in our apt-cache.<\/pre>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\">$ apt-get update<br \/><\/code><\/pre>\n<p><b>STEP 3 :<\/b> Install Percona XtraDB Cluster :<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\"><code class=\"language-bash hljs \">$ apt-get install -y percona-xtradb-cluster-56 qpress xtrabackup<\/code><\/code><\/pre>\n<p><b>STEP 4 :<\/b> Install\u00a0additional package for editing files, downloading etc\u00a0:<code class=\"language-bash hljs \"><\/code><\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\"><\/code><code class=\"language-bash hljs \">$ apt-get install -y python-software-properties vim wget curl netcat<\/code><\/pre>\n<p><span style=\"font-family:inherit;font-size:small;font-weight:normal;\">With the above steps we have, installed Percona XtraDB Cluster on every node. Now we&#8217;ll configure each node, so that a cluster of three nodes can be formed.<\/span><\/p>\n<p><span style=\"font-weight:normal;\"><span style=\"font-size:large;\">Node Configuration:<\/span><\/span><\/p>\n<p><b>Add\/Modify file \/etc\/mysql\/my.cnf on first node : <\/b><\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\">[MYSQLD] #This section is for mysql configuration<br \/>user = mysql                                                   <br \/>default_storage_engine = InnoDB                  <br \/>basedir = \/usr<br \/>datadir = \/var\/lib\/mysql<br \/>socket = \/var\/run\/mysqld\/mysqld.sock<br \/>port = 3306<br \/>innodb_autoinc_lock_mode = 2<br \/>log_queries_not_using_indexes = 1<br \/>max_allowed_packet = 128M<br \/>binlog_format = ROW<br \/>wsrep_provider = \/usr\/lib\/libgalera_smm.so<br \/>wsrep_node_address = 192.168.1.2<br \/>wsrep_cluster_name=\"newcluster\"<br \/>wsrep_cluster_address = gcomm:\/\/192.168.1.2,192.168.1.3,192.168.1.4<br \/>wsrep_node_name = cluster1<br \/>wsrep_slave_threads = 4<br \/>wsrep_sst_method = xtrabackup-v2<br \/>wsrep_sst_auth = sst:secret<br \/><br \/>[sst] #This section is for sst(state snapshot transfer) configuration <br \/>streamfmt = xbstream<br \/><br \/>[xtrabackup] #This section is defines tuning configuration for xtrabackup<br \/>compress<br \/>compact<br \/>parallel = 2<br \/>compress_threads = 2<br \/>rebuild_threads = 2<br \/><\/code><\/pre>\n<p><b>Note :<\/b><br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0wsrep_node_address = {IP of current node}<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0wsrep_cluster_name= {Name of cluster}<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0wsrep_cluster_address = gcomm:\/\/{Comma separated IP address\u2019s which are in cluster}<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0wsrep_node_name = {This is name of current node which is used to identify it in cluster}<\/p>\n<p>Now as we have done node configuration. Now start first node services:<br \/>Start the node :<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\"><\/code><code class=\"language-bash hljs \">$ service mysql bootstrap-pxc<\/code><code style=\"color:black;word-wrap:normal;\"><br \/><\/code><\/pre>\n<p>Make <code>sst user<\/code> for authentication of cluster nodes :<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code class=\"language-bash hljs \">$ mysql <span class=\"hljs-operator\">-e<\/span> \"GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO <span class=\"hljs-string\">'sst'<\/span>@<span class=\"hljs-string\">'localhost'<\/span> IDENTIFIED BY <span class=\"hljs-string\">'secret'<\/span>;\"<\/code><code class=\"language-bash hljs \"><br \/><\/code><code style=\"color:black;word-wrap:normal;\"><\/code><code style=\"color:black;word-wrap:normal;\"><\/code><\/pre>\n<p>Check cluster status :<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\">$ mysql -e \"show global status like 'wsrep%';\"<br \/><\/code><\/pre>\n<p><b>Configuration file for second node:<\/b><\/p>\n<\/div>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\">[MYSQLD]<br \/>user = mysql<br \/>default_storage_engine = InnoDB<br \/>basedir = \/usr<br \/>datadir = \/var\/lib\/mysql<br \/>socket = \/var\/run\/mysqld\/mysqld.sock<br \/>port = 3306<br \/>innodb_autoinc_lock_mode = 2<br \/>log_queries_not_using_indexes = 1<br \/>max_allowed_packet = 128M<br \/>binlog_format = ROW<br \/>wsrep_provider = \/usr\/lib\/libgalera_smm.so<br \/>wsrep_node_address = 192.168.1.3<br \/>wsrep_cluster_name=\"newcluster\"<br \/>wsrep_cluster_address = gcomm:\/\/192.168.1.2,192.168.1.3,192.168.1.4<br \/>wsrep_node_name = cluster2<br \/>wsrep_slave_threads = 4<br \/>wsrep_sst_method = xtrabackup-v2<br \/>wsrep_sst_auth = sst:secret<br \/><br \/>[sst]<br \/>streamfmt = xbstream<br \/><br \/>[xtrabackup]<br \/>compress<br \/>compact<br \/>parallel = 2<br \/><\/code><\/pre>\n<p>After doing configuration, start services of node 2.<br \/>Start node 2 :<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\">$ service mysql start<br \/><\/code><\/pre>\n<p>Check cluster status :<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\">$ mysql -e \"show global status like 'wsrep%';\"<br \/><\/code><\/pre>\n<p>Now similarly you have to <b>configure node 3<\/b>. Changes are listed below.<\/p>\n<\/div>\n<pre class=\"prettyprint\"><code class=\"language-config hljs ini\"><span class=\"hljs-setting\">Changes in configuration for node 3 :<br \/>      wsrep_node_address = <span class=\"hljs-value\"><span class=\"hljs-number\">192.168<\/span>.<span class=\"hljs-number\">1.4<\/span><\/span><\/span><br \/><span class=\"hljs-setting\">      wsrep_node_name = <span class=\"hljs-value\">cluster3<\/span><\/span><\/code><\/pre>\n<p>Start node 3 :<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\"><code class=\"language-bash hljs \">$ service mysql start<\/code><\/code><\/pre>\n<h1 id=\"goal\"><span style=\"font-size:large;font-weight:normal;\">Test percona XtraDb cluster:<\/span><\/h1>\n<p>Log-in by mysql client in any node:<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\">&lt;code prettyprint=\"\" style=\"color: black; word-wrap: no<\/pre>\n<pre><code class=\"language-mysql hljs sql\"><span class=\"hljs-operator\"><span class=\"hljs-keyword\">mysql&gt;create<\/span> <span class=\"hljs-keyword\">database<\/span> opstree;<\/span><br \/>mysql&gt;use opstree;<br \/><span class=\"hljs-operator\"><span class=\"hljs-keyword\">mysql&gt;create<\/span> <span class=\"hljs-keyword\">table<\/span> nu113r(name <span class=\"hljs-keyword\">varchar<\/span>(<span class=\"hljs-number\">50<\/span>));<\/span><br \/><span class=\"hljs-operator\"><span class=\"hljs-keyword\">mysql&gt;insert<\/span> <span class=\"hljs-keyword\">into<\/span> nu113r <span class=\"hljs-keyword\">values<\/span>(<span class=\"hljs-string\">\"<\/span>zukin\");<\/span><br \/><span class=\"hljs-operator\"><span class=\"hljs-keyword\">mysql&gt;select<\/span> * <span class=\"hljs-keyword\">from<\/span> nu113r;<\/span><\/code><\/pre>\n<\/div>\n<p>Check the database on other node by mysql client:<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\">mysql&gt;show databases;<br \/><\/code><\/pre>\n<p><b>Note :<\/b> There should be a database named \u201copstree\u201d.<\/p>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code style=\"color:black;word-wrap:normal;\"><\/code><code class=\"language-mysql hljs sql\">mysql&gt;use opstree;<\/code><\/pre>\n<pre style=\"background-image:url('http:\/\/2.bp.blogspot.com\/_z5ltvMQPaa8\/SjJXr_U2YBI\/AAAAAAAAAAM\/46OqEP32CJ8\/s320\/codebg.gif');background:#f0f0f0;border:1px dashed #CCCCCC;color:black;font-family:arial;font-size:12px;height:auto;line-height:20px;overflow:auto;padding:0;text-align:left;width:99%;\"><code class=\"language-mysql hljs sql\"><span class=\"hljs-operator\"><span class=\"hljs-keyword\">mysql&gt;select<\/span> * <span class=\"hljs-keyword\">from<\/span> nu113r;<\/span><\/code><code style=\"color:black;word-wrap:normal;\">\u00a0<\/code><\/pre>\n<p><b>Note :<\/b> Data will be same as in the previous node.<\/p>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Percona XtraDB Cluster As a DevOps activist I am exploring Percona XtraDB. In a series of blogs I will share my learnings. This blog intends to capture step by step details of installation of Percona XtraDB in Cluster mode.\u00a0 \u00a0 Why Cluster Mode Introduction: Percona XtraDB cluster is High Availability and Scalability solution for MySQL &hellip; <a href=\"https:\/\/opstree.com\/blog\/2015\/02\/17\/getting-started-with-percona-xtradb-cluster\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Getting Started with Percona XtraDB Cluster&#8221;<\/span><\/a><\/p>\n","protected":false},"author":171775670,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474,11987323],"tags":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-6p","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/397"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/171775670"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=397"}],"version-history":[{"count":2,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/397\/revisions"}],"predecessor-version":[{"id":1339,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/397\/revisions\/1339"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}