Merge lp:~hrvojem/percona-xtradb-cluster/bug1133638 into lp:percona-xtradb-cluster/percona-xtradb-cluster-5.5

Proposed by Hrvoje Matijakovic
Status: Merged
Approved by: Raghavendra D Prabhu
Approved revision: no longer in the source branch.
Merged at revision: 388
Proposed branch: lp:~hrvojem/percona-xtradb-cluster/bug1133638
Merge into: lp:percona-xtradb-cluster/percona-xtradb-cluster-5.5
Diff against target: 446 lines (+321/-13)
7 files modified
doc-pxc/source/faq.rst (+3/-2)
doc-pxc/source/howtos/cenots_howto.rst (+6/-0)
doc-pxc/source/howtos/ubuntu_howto.rst (+302/-0)
doc-pxc/source/index.rst (+1/-0)
doc-pxc/source/installation.rst (+2/-0)
doc-pxc/source/limitation.rst (+3/-6)
doc-pxc/source/wsrep-system-index.rst (+4/-5)
To merge this branch: bzr merge lp:~hrvojem/percona-xtradb-cluster/bug1133638
Reviewer Review Type Date Requested Status
Raghavendra D Prabhu (community) Approve
Review via email: mp+160283@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Raghavendra D Prabhu (raghavendra-prabhu) wrote :

Regarding wsrep_retry_autocommit, can you add this part

"if it is 0 it won't be retried and if it is 1 it will be retried once." to disambiguate?

Revision history for this message
Raghavendra D Prabhu (raghavendra-prabhu) wrote :

Bug #1155897: Cluster does not follow MDL semantics -- this one is good.

Revision history for this message
Raghavendra D Prabhu (raghavendra-prabhu) wrote :

> Bug #1155897: Cluster does not follow MDL semantics -- this one is good.

I meant " Limitations page in the doc is out of date " here

Revision history for this message
Raghavendra D Prabhu (raghavendra-prabhu) wrote :

Regarding

"Bug #1155897: Cluster does not follow MDL semantics"

has
"With regards to DDL under RSU method, is MDL honoured or is it not?"

been tested?

Revision history for this message
Raghavendra D Prabhu (raghavendra-prabhu) wrote :

Regarding

"+This variable controls how many replication events will be grouped together. Replication events are grouped in SQL slave thread by skipping events which may cause commit. This way the wsrep node acting in |MySQL| slave role and all other wsrep nodes in provider replication group, will see same (huge) transactions. This implementation is still experimental. This may help with the bottleneck of having only one |MySQL| slave facing commit time delay of synchronous provider."

for Bug #1170066

Has this been sourced from any codership docs?

Revision history for this message
Raghavendra D Prabhu (raghavendra-prabhu) wrote :

Everything looks good here except Bug #1155897.

Revision history for this message
Raghavendra D Prabhu (raghavendra-prabhu) wrote :

Approved.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'doc-pxc/source/faq.rst'
2--- doc-pxc/source/faq.rst 2013-01-25 07:37:41 +0000
3+++ doc-pxc/source/faq.rst 2013-06-13 13:58:35 +0000
4@@ -47,7 +47,7 @@
5
6 Q: How would it handle split brain?
7 ====================================
8-A: It would not handle it. The |split brain| is hard stop, |XtraDB Cluster| can't resolve it.
9+A: It would not handle it. The |split brain| is hard stop, XtraDB Cluster can't resolve it.
10 That's why the minimal recommendation is to have 3 nodes.
11 However there is possibility to allow a node to handle the traffic, option is: ::
12
13@@ -58,11 +58,12 @@
14 A: It is possible in two ways:
15
16 1. By default Galera reads starting position from a text file <datadir>/grastate.dat. Just make this file identical on all nodes, and there will be no state transfer upon start.
17+
18 2. With :variable:`wsrep_start_position` variable - start the nodes with the same *UUID:seqno* value and there you are.
19
20 Q: I have a two nodes setup. When node1 fails, node2 does not accept commands, why?
21 ====================================================================================
22-A: This is expected behaviour, to prevent |split brain|. See previous question.
23+A: This is expected behavior, to prevent |split brain|. See previous question.
24
25 Q: What tcp ports are used by Percona XtraDB Cluster?
26 ======================================================
27
28=== modified file 'doc-pxc/source/howtos/cenots_howto.rst'
29--- doc-pxc/source/howtos/cenots_howto.rst 2013-03-12 09:32:01 +0000
30+++ doc-pxc/source/howtos/cenots_howto.rst 2013-06-13 13:58:35 +0000
31@@ -161,6 +161,9 @@
32 # Node #2 address
33 wsrep_node_address=192.168.70.72
34
35+ # Cluster name
36+ wsrep_cluster_name=my_centos_cluster
37+
38 # SST method
39 wsrep_sst_method=xtrabackup
40
41@@ -222,6 +225,9 @@
42 # Node #3 address
43 wsrep_node_address=192.168.70.73
44
45+ # Cluster name
46+ wsrep_cluster_name=my_centos_cluster
47+
48 # SST method
49 wsrep_sst_method=xtrabackup
50
51
52=== added file 'doc-pxc/source/howtos/ubuntu_howto.rst'
53--- doc-pxc/source/howtos/ubuntu_howto.rst 1970-01-01 00:00:00 +0000
54+++ doc-pxc/source/howtos/ubuntu_howto.rst 2013-06-13 13:58:35 +0000
55@@ -0,0 +1,302 @@
56+.. _ubuntu_howto:
57+
58+Installing Percona XtraDB Cluster on *Ubuntu*
59+=============================================
60+
61+This tutorial will show how to install the |Percona XtraDB Cluster| on three *Ubuntu* 12.04.2 LTS servers, using the packages from Percona repositories.
62+
63+This cluster will be assembled of three servers/nodes: ::
64+
65+ node #1
66+ hostname: pxc1
67+ IP: 192.168.70.61
68+
69+ node #2
70+ hostname: pxc2
71+ IP: 192.168.70.62
72+
73+ node #3
74+ hostname: pxc3
75+ IP: 192.168.70.63
76+
77+Prerequisites
78+-------------
79+
80+ * All three nodes have a *Ubuntu* 12.04.2 LTS installation.
81+
82+ * Firewall has been set up to allow connecting to ports 3306, 4444, 4567 and 4568
83+
84+ * AppArmor profile for |MySQL| is `disabled <http://www.mysqlperformanceblog.com/2012/12/20/percona-xtradb-cluster-selinux-is-not-always-the-culprit/>`_
85+
86+Installation
87+------------
88+
89+Percona repository should be set up as described in the :ref:`apt-repo` guide. Following command will install |Percona XtraDB Cluster| packages: ::
90+
91+ $ apt-get install percona-xtradb-cluster-server-5.5 percona-xtradb-cluster-client-5.5
92+
93+When these two commands have been executed successfully on all three nodes |Percona XtraDB Cluster| is installed.
94+
95+.. note::
96+
97+ Debian/Ubuntu installation prompts for root password, this was set to: ``Passw0rd``. After the packages have been installed, ``mysqld`` will be started automatically. In this example mysqld is stopped on all three nodes after successful installation with: ``/etc/init.d/mysql stop``.
98+
99+Configuring the nodes
100+---------------------
101+
102+Individual nodes should be configured to be able to bootstrap the cluster. More details about bootstrapping the cluster can be found in the :ref:`bootstrap` guide.
103+
104+Configuration file :file:`/etc/mysql/my.cnf` for the first node should look like: ::
105+
106+ [mysqld]
107+
108+ datadir=/var/lib/mysql
109+ user=mysql
110+
111+ # Path to Galera library
112+ wsrep_provider=/usr/lib/libgalera_smm.so
113+
114+ # Empty gcomm address is being used when cluster is getting bootstrapped
115+ wsrep_cluster_address=gcomm://
116+
117+ # Cluster connection URL contains the IPs of node#1, node#2 and node#3
118+ #wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
119+
120+ # In order for Galera to work correctly binlog format should be ROW
121+ binlog_format=ROW
122+
123+ # MyISAM storage engine has only experimental support
124+ default_storage_engine=InnoDB
125+
126+ # This is a recommended tuning variable for performance
127+ innodb_locks_unsafe_for_binlog=1
128+
129+ # This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
130+ innodb_autoinc_lock_mode=2
131+
132+ # Node #1 address
133+ wsrep_node_address=192.168.70.61
134+
135+ # SST method
136+ wsrep_sst_method=xtrabackup
137+
138+ # Cluster name
139+ wsrep_cluster_name=my_ubuntu_cluster
140+
141+ # Authentication for SST method
142+ wsrep_sst_auth="sstuser:s3cretPass"
143+
144+.. note:: For the first member of the cluster variable :variable:`wsrep_cluster_address` should contain empty ``gcomm://`` when the cluster is being bootstrapped. But as soon as we have bootstrapped the cluster and have at least one more node joined that line can be removed from the :file:`my.cnf` configuration file and the one where :variable:`wsrep_cluster_address` contains all three node addresses. In case the node gets restarted and without making this change it will make bootstrap new cluster instead of joining the existing one.
145+
146+After this, first node can be started with the following command: ::
147+
148+ [root@pxc1 ~]# /etc/init.d/mysql start
149+
150+This command will start the first node and bootstrap the cluster (more information about bootstrapping cluster can be found in :ref:`bootstrap` manual).
151+
152+After the first node has been started, cluster status can be checked by:
153+
154+.. code-block:: mysql
155+
156+ mysql> show status like 'wsrep%';
157+ +----------------------------+--------------------------------------+
158+ | Variable_name | Value |
159+ +----------------------------+--------------------------------------+
160+ | wsrep_local_state_uuid | b598af3e-ace3-11e2-0800-3e90eb9cd5d3 |
161+ ...
162+ | wsrep_local_state | 4 |
163+ | wsrep_local_state_comment | Synced |
164+ ...
165+ | wsrep_cluster_size | 1 |
166+ | wsrep_cluster_status | Primary |
167+ | wsrep_connected | ON |
168+ ...
169+ | wsrep_ready | ON |
170+ +----------------------------+--------------------------------------+
171+ 40 rows in set (0.01 sec)
172+
173+This output shows that the cluster has been successfully bootstrapped.
174+
175+In order to perform successful :ref:`state_snapshot_transfer` using |XtraBackup| new user needs to be set up with proper `privileges <http://www.percona.com/doc/percona-xtrabackup/innobackupex/privileges.html#permissions-and-privileges-needed>`_:
176+
177+.. code-block:: mysql
178+
179+ mysql@pxc1> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cretPass';
180+ mysql@pxc1> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
181+ mysql@pxc1> FLUSH PRIVILEGES;
182+
183+
184+.. note::
185+
186+ MySQL root account can also be used for setting up the :ref:`state_snapshot_transfer` with Percona XtraBackup, but it's recommended to use a different (non-root) user for this.
187+
188+Configuration file :file:`/etc/mysql/my.cnf` on the second node (``pxc2``) should look like this: ::
189+
190+ [mysqld]
191+
192+ datadir=/var/lib/mysql
193+ user=mysql
194+
195+ # Path to Galera library
196+ wsrep_provider=/usr/lib/libgalera_smm.so
197+
198+ # Cluster connection URL contains IPs of node#1, node#2 and node#3
199+ wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
200+
201+ # In order for Galera to work correctly binlog format should be ROW
202+ binlog_format=ROW
203+
204+ # MyISAM storage engine has only experimental support
205+ default_storage_engine=InnoDB
206+
207+ # This is a recommended tuning variable for performance
208+ innodb_locks_unsafe_for_binlog=1
209+
210+ # This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
211+ innodb_autoinc_lock_mode=2
212+
213+ # Node #2 address
214+ wsrep_node_address=192.168.70.62
215+
216+ # Cluster name
217+ wsrep_cluster_name=my_ubuntu_cluster
218+
219+ # SST method
220+ wsrep_sst_method=xtrabackup
221+
222+ #Authentication for SST method
223+ wsrep_sst_auth="sstuser:s3cretPass"
224+
225+Second node can be started with the following command: ::
226+
227+ [root@pxc2 ~]# /etc/init.d/mysql start
228+
229+After the server has been started it should receive the state snapshot transfer automatically. Cluster status can now be checked on both nodes. This is the example from the second node (``pxc2``):
230+
231+.. code-block:: mysql
232+
233+ mysql> show status like 'wsrep%';
234+ +----------------------------+--------------------------------------+
235+ | Variable_name | Value |
236+ +----------------------------+--------------------------------------+
237+ | wsrep_local_state_uuid | b598af3e-ace3-11e2-0800-3e90eb9cd5d3 |
238+ ...
239+ | wsrep_local_state | 4 |
240+ | wsrep_local_state_comment | Synced |
241+ ...
242+ | wsrep_cluster_size | 2 |
243+ | wsrep_cluster_status | Primary |
244+ | wsrep_connected | ON |
245+ ...
246+ | wsrep_ready | ON |
247+ +----------------------------+--------------------------------------+
248+ 40 rows in set (0.01 sec)
249+
250+This output shows that the new node has been successfully added to the cluster.
251+
252+MySQL configuration file :file:`/etc/mysql/my.cnf` on the third node (``pxc3``) should look like this: ::
253+
254+ [mysqld]
255+
256+ datadir=/var/lib/mysql
257+ user=mysql
258+
259+ # Path to Galera library
260+ wsrep_provider=/usr/lib/libgalera_smm.so
261+
262+ # Cluster connection URL contains IPs of node#1, node#2 and node#3
263+ wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
264+
265+ # In order for Galera to work correctly binlog format should be ROW
266+ binlog_format=ROW
267+
268+ # MyISAM storage engine has only experimental support
269+ default_storage_engine=InnoDB
270+
271+ # This is a recommended tuning variable for performance
272+ innodb_locks_unsafe_for_binlog=1
273+
274+ # This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
275+ innodb_autoinc_lock_mode=2
276+
277+ # Node #3 address
278+ wsrep_node_address=192.168.70.63
279+
280+ # Cluster name
281+ wsrep_cluster_name=my_ubuntu_cluster
282+
283+ # SST method
284+ wsrep_sst_method=xtrabackup
285+
286+ #Authentication for SST method
287+ wsrep_sst_auth="sstuser:s3cretPass"
288+
289+Third node can now be started with the following command: ::
290+
291+ [root@pxc3 ~]# /etc/init.d/mysql start
292+
293+After the server has been started it should receive the SST same as the second node. Cluster status can now be checked on both nodes. This is the example from the third node (``pxc3``):
294+
295+.. code-block:: mysql
296+
297+ mysql> show status like 'wsrep%';
298+ +----------------------------+--------------------------------------+
299+ | Variable_name | Value |
300+ +----------------------------+--------------------------------------+
301+ | wsrep_local_state_uuid | b598af3e-ace3-11e2-0800-3e90eb9cd5d3 |
302+ ...
303+ | wsrep_local_state | 4 |
304+ | wsrep_local_state_comment | Synced |
305+ ...
306+ | wsrep_cluster_size | 3 |
307+ | wsrep_cluster_status | Primary |
308+ | wsrep_connected | ON |
309+ ...
310+ | wsrep_ready | ON |
311+ +----------------------------+--------------------------------------+
312+ 40 rows in set (0.01 sec)
313+
314+This output confirms that the third node has joined the cluster.
315+
316+Testing the replication
317+-----------------------
318+
319+Although the password change from the first node has replicated successfully, this example will show that writing on any node will replicate to the whole cluster. In order to check this, new database will be created on second node and table for that database will be created on the third node.
320+
321+Creating the new database on the second node:
322+
323+.. code-block:: mysql
324+
325+ mysql@pxc2> CREATE DATABASE percona;
326+ Query OK, 1 row affected (0.01 sec)
327+
328+Creating the ``example`` table on the third node:
329+
330+.. code-block:: mysql
331+
332+ mysql@pxc3> USE percona;
333+ Database changed
334+
335+ mysql@pxc3> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
336+ Query OK, 0 rows affected (0.05 sec)
337+
338+Inserting records on the first node:
339+
340+.. code-block:: mysql
341+
342+ mysql@pxc1> INSERT INTO percona.example VALUES (1, 'percona1');
343+ Query OK, 1 row affected (0.02 sec)
344+
345+Retrieving all the rows from that table on the second node:
346+
347+.. code-block:: mysql
348+
349+ mysql@pxc2> SELECT * FROM percona.example;
350+ +---------+-----------+
351+ | node_id | node_name |
352+ +---------+-----------+
353+ | 1 | percona1 |
354+ +---------+-----------+
355+ 1 row in set (0.00 sec)
356+
357+This small example shows that all nodes in the cluster are synchronized and working as intended.
358
359=== modified file 'doc-pxc/source/index.rst'
360--- doc-pxc/source/index.rst 2013-03-12 09:32:01 +0000
361+++ doc-pxc/source/index.rst 2013-06-13 13:58:35 +0000
362@@ -79,6 +79,7 @@
363 :glob:
364
365 howtos/cenots_howto
366+ howtos/ubuntu_howto
367 howtos/singlebox
368 howtos/3nodesec2
369 howtos/haproxy
370
371=== modified file 'doc-pxc/source/installation.rst'
372--- doc-pxc/source/installation.rst 2013-03-12 09:32:01 +0000
373+++ doc-pxc/source/installation.rst 2013-06-13 13:58:35 +0000
374@@ -44,6 +44,8 @@
375
376 $ sudo apt-get install percona-xtradb-cluster-server-5.5 percona-xtradb-cluster-client-5.5
377
378+More detailed example of the |Percona XtraDB Cluster| installation and configuration can be seen in :ref:`ubuntu_howto` tutorial.
379+
380 Prerequisites
381 =============
382
383
384=== modified file 'doc-pxc/source/limitation.rst'
385--- doc-pxc/source/limitation.rst 2012-06-01 04:28:35 +0000
386+++ doc-pxc/source/limitation.rst 2013-06-13 13:58:35 +0000
387@@ -1,3 +1,5 @@
388+.. _limitations:
389+
390 ====================================
391 Percona XtraDB Cluster Limitations
392 ====================================
393@@ -6,8 +8,6 @@
394
395 - Currently replication works only with |InnoDB| storage engine. Any writes to tables of other types, including system (mysql.*) tables, are not replicated. However, DDL statements are replicated in statement level, and changes to mysql.* tables will get replicated that way. So, you can safely issue: CREATE USER..., but issuing: INSERT INTO mysql.user..., will not be replicated.
396
397- - DELETE operation is unsupported on tables without primary key. Also rows in tables without primary key may appear in different order on different nodes. As a result SELECT...LIMIT... may return slightly different sets.
398-
399 - Unsupported queries:
400 * LOCK/UNLOCK TABLES cannot be supported in multi-master setups.
401 * lock functions (GET_LOCK(), RELEASE_LOCK()... )
402@@ -21,10 +21,7 @@
403
404 - XA transactions can not be supported due to possible rollback on commit.
405
406- - The write throughput of the whole cluster is limited by weakest node. If one node becomes slow, whole cluster is slow. If you have requirements for stable high performance, then it should be supported by corresponding hardware (10Gb network, SSD).
407+ - The write throughput of the whole cluster is limited by weakest node. If one node becomes slow, whole cluster is slow. If you have requirements for stable high performance, then it should be supported by corresponding hardware.
408
409 - The minimal recommended size of cluster is 3 nodes.
410
411- - DDL statements are problematic and may stall cluster. Later, the support of DDL will be improved, but will always require special treatment.
412-
413-
414
415=== modified file 'doc-pxc/source/wsrep-system-index.rst'
416--- doc-pxc/source/wsrep-system-index.rst 2013-03-12 09:32:01 +0000
417+++ doc-pxc/source/wsrep-system-index.rst 2013-06-13 13:58:35 +0000
418@@ -13,8 +13,8 @@
419 :default: TOI
420
421 This variable can be used to select schema upgrade method. Available values are:
422- * TOI - Total Order Isolation - When this method is selected ``DDL`` is processed in the same order with regards to other transactions in each cluster node. This guarantees data consistency. In case of ``DDL`` statements cluster will have parts of database locked and it will behave like a single server. In some cases (like big ``ALTER TABLE``) this could have impact on cluster's performance and high availability, but it could be fine for quick changes that happen almost instantly (like fast index changes).
423- * RSU - Rolling Schema Upgrade - When this method is selected ``DDL`` statements won't be replicated across the cluster, instead it's up to the user to run them on each node separately. The node applying the changes will desynchronize from the cluster briefly, while normal work happens on all the other nodes. When the ``DDL`` statement is processed node will apply delayed replication events. The schema changes **must** be backwards compatible for this method to work, otherwise the node that receives the change will likely break Galera replication. If the replication breaks the SST will be triggered when the node tries to join again but the change will be undone.
424+ * TOI - Total Order Isolation - When this method is selected ``DDL`` is processed in the same order with regards to other transactions in each cluster node. This guarantees data consistency. In case of ``DDL`` statements cluster will have parts of database locked and it will behave like a single server. In some cases (like big ``ALTER TABLE``) this could have impact on cluster's performance and high availability, but it could be fine for quick changes that happen almost instantly (like fast index changes). When ``DDL`` is processed under total order isolation (TOI) the ``DDL`` statement will be replicated up front to the cluster. i.e. cluster will assign global transaction ID for the ``DDL`` statement before the ``DDL`` processing begins. Then every node in the cluster has the responsibility to execute the ``DDL`` in the given slot in the sequence of incoming transactions, and this ``DDL`` execution has to happen with high priority.
425+ * RSU - Rolling Schema Upgrade - When this method is selected ``DDL`` statements won't be replicated across the cluster, instead it's up to the user to run them on each node separately. The node applying the changes will desynchronize from the cluster briefly, while normal work happens on all the other nodes. When the ``DDL`` statement is processed node will apply delayed replication events. The schema changes **must** be backwards compatible for this method to work, otherwise the node that receives the change will likely break Galera replication. If the replication breaks the SST will be triggered when the node tries to join again but the change will be undone.
426
427 .. variable:: wsrep_auto_increment_control
428
429@@ -172,7 +172,7 @@
430 :default: 0 (no grouping)
431 :range: 0-1000
432
433-This variable controls how many replication events will be grouped together. This implementation is still experimental.
434+This variable controls how many replication events will be grouped together. Replication events are grouped in SQL slave thread by skipping events which may cause commit. This way the wsrep node acting in |MySQL| slave role and all other wsrep nodes in provider replication group, will see same (huge) transactions. This implementation is still experimental. This may help with the bottleneck of having only one |MySQL| slave facing commit time delay of synchronous provider.
435
436 .. variable:: wsrep_node_address
437
438@@ -271,8 +271,7 @@
439 :dyn: No
440 :default: 1
441
442-This variable sets the number of times autocommitted transactions will be tried in the cluster if it encounters certification errors. In case there is a conflict, it should be safe for the cluster node to simply retry the statement without the client's knowledge with the hopes that it will pass the next time. This can be useful to help an application using autocommit to avoid the deadlock errors that can be triggered by replication conflicts. Note that the default 1 is not a retry, but the first try. Retries start when this variable is set to 2 or higher.  
443-
444+This variable sets the number of times autocommitted transactions will be tried in the cluster if it encounters certification errors. In case there is a conflict, it should be safe for the cluster node to simply retry the statement without the client's knowledge with the hopes that it will pass the next time. This can be useful to help an application using autocommit to avoid the deadlock errors that can be triggered by replication conflicts. If this variable is set to ``0`` transaction won't be retried and if it is set to ``1`` it will be retried once.
445
446 .. variable:: wsrep_slave_threads
447

Subscribers

People subscribed via source and target branches