MariaDB Enterprise Cluster Enterprise Cluster Introduction Architecture Installation State Transfer...
Transcript of MariaDB Enterprise Cluster Enterprise Cluster Introduction Architecture Installation State Transfer...
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Introduction
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Introducing MariaDB AbFounders from MySQL the
Company and Community Funded by Founders, Employees,
and Venture Capital About 100 Employees Several former MySQL Employees
and Community Members in over 14 Countries
3
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Personal IntroductionsInstructor
Name and Background
Participants Name and Company MariaDB Experience How You Use MariaDB Needs Related to Course Topics
4
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Class Schedule & Personal ConcernsStarting and Ending Times Planned Breaks On- Site
Location of Rest Rooms Smoking Areas Snacks and Drinks
LVC Classes Chat with Everyone
5
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Course OutlineOverview Architecture Installation State Transfer Caveats Multi-Master Conflicts Schema Changes Back-Ups Recovery
Load Balancing Advanced Topics
6
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Architecture
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Advantages of GaleraParallel Slave Applying Practically No Slave Lag Instant Trivial Failover Automatic Node Provisioning Works Well in WAN
8
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
MariaDB Replication — Server Centric Style
Asynchronous Replication No Conflict Detection Multi-Master Replication
If Node C Crashes, Does Cluster Survive?
If Node B Crashes and Clients Switch to C, How does Node B Rejoin?
Which Node has Data X? How do you Back-Up Cluster?
9
MasterServer
SlaveServer
Node A
Node C
Node B
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Data Doesn’t Belong to a Node Nodes Belong to Data Data is Synchronized among
Two or More Servers
Galera Approach — Data Centric Style
10
Server 1 Server 2 Server 3 Server N
DataSet
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Galera ApproachGalera Nodes are Anonymous — All are Equal Galera Cluster is One Large Distributed Master A DataSet Needs an Identifier DataSet Identier is a Cluster Identifier
00295a79-9c48-11e2-bdf0-9a916cbb9294
11
DataSet Cluster
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Global Transaction Identifier (GTID)DataSet plus Sequence of Atomic
Changes equals GTID
12
DataSet00295a79-9c48-11e2-bdf0-9a916cbb9294:64201
00295a79-9c48-11e2-bdf0-9a916cbb9294:64201
64201
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Global Transaction Identifier (GTID)
13
00295a79-9c48-11e2-bdf0-9a916cbb9294:0
00295a79-9c48-11e2-bdf0-9a916cbb9294:1
00000000-0000-0000-0000-000000000000:-1
Initial DataSet
First Change and Transaction
Undefined GTID
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Global Transaction Identifier (GTID)
14
00295a79-9c48-11e2-bdf0-9a916cbb9294:64201
8182213e-7c1e-11e2-a6e2-080027635ef5:12345
Galera GTID
MySQL 5.6 GTID
0-10-12345
MariaDB 10 GTID(server identifier : transaction processed by server)
(data & cluster Identifier : data change in cluster)
(domain - server identifier - data change in asynchronous cluster)
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Global Transaction Identifier (GTID)
15
8182213e-7c1e-11e2-a6e2-080027635ef5:12345 8182213e-7c1e-11e2-a6e2-080027635ef5:12346 8182213e-7c1e-11e2-a6e2-080027635ef5:12347
Visible in MySQL 5.6
New Master Promoted
f4e3bf7a-a91f-11e2-4e02-3f8dbcffaed8:1 f4e3bf7a-a91f-11e2-4e02-3f8dbcffaed8:2 f4e3bf7a-a91f-11e2-4e02-3f8dbcffaed8:3
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Global Transaction Identifier (GTID)
16
0-10-12345 0-10-12346 0-10-12347
Visible in MariaDB 10
New Master Promoted
0-20-12348 0-20-12349 0-20-12350
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Global Transaction Identifier (GTID)
17
00295a79-9c48-11e2-bdf0-9a916cbb9294:64201 00295a79-9c48-11e2-bdf0-9a916cbb9294:64202 00295a79-9c48-11e2-bdf0-9a916cbb9294:64203
Visible in Galera
New Master Promoted
00295a79-9c48-11e2-bdf0-9a916cbb9294:64204 00295a79-9c48-11e2-bdf0-9a916cbb9294:64205 00295a79-9c48-11e2-bdf0-9a916cbb9294:64206
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Master or SlaveNot a Node Role or Function A Relation Between a Node and a Client
18
master1slave2
slave1slave2
slave1master2
slave1slave2
slave1slave2
Cluster
master for client1 master for client1
client2client1
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster Addresswsrep_cluster_address
19
10.0.0.1
10.0.0.610.0.0.2
10.0.0.3 10.0.0.4
10.0.0.5
Documentation on Galera Cluster Addresses: https://mariadb.com/kb/en/mariadb/galera-cluster-address/
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster Address
20
10.0.0.1
10.0.0.610.0.0.2
10.0.0.3 10.0.0.4
gcomm://10.0.0.6
10.0.0.5handshake
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster Address
21
10.0.0.1
10.0.0.610.0.0.2
10.0.0.3 10.0.0.4
10.0.0.5
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster Address
22
10.0.0.1
10.0.0.610.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster Addresswsrep_cluster_address = gcomm://node1,node2
Try to Connect to Members (node1, node2)
Can only Join a Running Cluster
23
10.0.0.5
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Node Synchronization (State Transfer)
24
10.0.0.1
10.0.0.610.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Node Synchronization (State Transfer)
25
joined
syncedsynced
desync
synced
undefined
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Node Synchronization (State Transfer)
26
catch-up
UNDEFINED
JOINER
JOINED
SYNCHED
catch-up
SYNCHED
DONOR
JOINED
SYNCHED
New Node Cluster Old Node
Verify Node Synched
Donor Found — Wait Be a Donor
Transfer Missing Data (Private Channel)
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Avoiding Split BrainDistinguishing Server Crash from Network Failure in
Shared Nothing Architecture Decision Algorithm Used to Avoid Spilt Brain Absolute Majority Needed in Galera Uneven Number of Nodes Safer
27
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Primary Component
28
Primary
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Primary Component
29
Primary
Non-Primary
Continues Working
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Primary Component
30
Primary
Non-Primary
Tries to ReconnectContinues Working
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Primary Component
31
Primary
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Split Brain
32
Non-Primary Non-Primary
Split Brain Possible with Even Number of Nodes
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Synchronous PenaltiesGalera Copies Data Buffer to All Cluster Members on COMMIT from Client (~1 RTT added latency)
Connection throughput equals 1/RTT trx/sec Total throughput equals 1/RTT trx/sec ✕ #connections A Given Row Can't be Modified More Than 1/RTT
times a second
33
Round Trip Time (RTT) is Length of Time for a Signal to be sent and Receipt of Acknowledgement
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Slave Lag in Galera
34
Client Master Node
START TRANSACTION
COMMIT Replicate Write Set
OK
Slave Node
COMMIT
PROCESS
APPLY
COMMIT
Acknowledge
SELECT (stale data)
Certify
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
NuancesUses Only InnoDB Primary Keys are Necessary Commit Latency Transaction Size Limited to 2GB — Unlimited in Future Versions DEADLOCK on COMMIT AUTO_INCREMENT Handled Differently Cluster Performance Limited to Slowest Node No Cluster-Wide Read Locks No XA Transactions
35
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Installation
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Installing from a RepositoryMariaDB Repository Configuration Tool (https://downloads.mariadb.org/mariadb/repositories)
Available for all Major Distributions
37
Downloading MariaDB & Galera: https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Installing MariaDB Galera Cluster
38
$ yum install epel-release
Install Extra Packages for Enterprise Linux
$ yum install MariaDB-server
Install Galera Enabled MariaDB Server
$ yum install socat
Install Network Copying Tool
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Additional Utilities
39
XtraBackup Useful for SST — Not Supported in MariaDB 10.2
$ yum install xtrabackup
XtraBackup Repo: http://www.percona.com/doc/percona-xtrabackup/installation/yum_repo.html
Percona Toolkit
$ yum install percona-toolkit
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Linux Configuration
40
SELINUX=permissive
[Service] TimeoutStartSec="30 min"
cat /selinux/enforce echo 0 > /selinux/enforce
Start Timeout Settings: https://www.freedesktop.org/software/systemd/man/systemd.service.html#TimeoutStartSec= SELinux Configuration: http://galeracluster.com/documentation-webpages/selinux.html
SELinux — Disable Enforce Set Server to SELinux Mode Set Start Timeout for systemd
(CentOS 7+)Excerpt from /etc/selinux/config
systemctl daemon-reload
Executed from Command-Line
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Linux FirewallPorts Used
Port 3306 — Client Connections to Nodes Port 4567 — Replication Protocol Port 4568 — Incremental State Transfers (IST) Port 4444 — Snapshot State Transfer (SST; socat)
IST & SST Methods may have Additional Connectivity Requirements
mysqldump requires mysql client connections (port 3306) between Nodes
Rsync and XtraBackup use Netcat (nc) between Nodes
41
iptables -L /etc/init.d/iptables stop chkconfig iptables off
Executed from Command-Line
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
MariaDB Configuration
42
[mysqld] max_connections=1024 binlog_format=ROW innodb_buffer_pool_size=200M
innodb_log_file_size=100M innodb_flush_log_at_trx_commit=2 default-storage-engine=innodb innodb_autoinc_lock_mode=2
Only InnoDB Tables will be Replicated --enforce-storage-engine=innodb
Documentation on Enforcing Storage Engine Setting: https://mariadb.com/kb/en/mariadb/server-system-variables/#enforce_storage_engine Documentation on InnoDB Flush Log at Transaction Commit Setting: https://mariadb.com/kb/en/mariadb/xtradbinnodb-server-system-variables/#innodb_flush_log_at_trx_commit
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
MariaDB Configuration — Galera Settings
43
wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name="our_cluster" wsrep_node_name=node1 wsrep_cluster_address="gcomm://192.168.56.91,192.168.56.90,192.168.56.89"
wsrep_node_address=192.168.56.91 wsrep_slave_threads=1 wsrep_sst_method=rsync wsrep_sst_auth=galera:galera
wsrep_on=ON
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Start First Node
44
systemctl start mariadb galera_new_cluster
mysql -u root -p -e /
"SHOW VARIABLES LIKE 'wsrep_provider_options"
Start galera1 as First Node Use SHOW STATUS and SHOW VARIABLES to List Galera Options
SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size'; SHOW GLOBAL VARIABLES LIKE 'wsrep%';
Executed from Command-Line on First Node
Executed from mysql Client on First Node
Executed from Command-Line on First Node
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Configure Galerawsrep_* Variables Configure MariaDB
Replication Behavior wsrep_provider_options is a Collection
of Variables that Control Galera Replication Plugin Behavior
45
Galera System Variables: https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/ Galera Status Variables: https://mariadb.com/kb/en/mariadb/galera-cluster-status-variables/
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Default Enterprise Cluster Related Values
46
base_host = 192.168.56.92
base_port = 4567
cert.log_conflicts = no
evs.causal_keepalive_period = PT1S
evs.debug_log_mask = 0x1
evs.inactive_check_period = PT0.5S
evs.inactive_timeout = PT15S
evs.info_log_mask = 0
evs.install_timeout = PT15S
evs.join_retrans_period = PT1S
evs.keepalive_period = PT1S
evs.max_install_timeouts = 1
evs.send_window = 4
evs.stats_report_period = PT1M
evs.suspect_timeout = PT5S
evs.use_aggregate = true
evs.user_send_window = 2
evs.version = 0
evs.view_forget_timeout = PT5M
gcache.dir = /var/lib/mysql/
gcache.keep_pages_size = 0
gcache.mem_size = 0
gcache.name = /var/lib/mysql//galera.cache
gcache.page_size = 128M
gcache.size = 128M
gcs.fc_debug = 0
gcs.fc_factor = 1
gcs.fc_limit = 16
gcs.fc_master_slave = NO
gcs.max_packet_size = 64500
gcs.max_throttle = 0.25
gcs.recv_q_hard_limit = 9223372036854775807
gcs.recv_q_soft_limit = 0.25
gcs.sync_donor = NO
gmcast.listen_addr = tcp://0.0.0.0:4567
gmcast.mcast_addr =
gmcast.mcast_ttl = 1
gmcast.peer_timeout = PT3S
gmcast.time_wait = PT5S
gmcast.version = 0
gmcast.segment = 0
ist.recv_addr = 192.168.56.92
pc.checksum = true
pc.ignore_quorum = false
pc.ignore_sb = false
pc.linger = PT20S
pc.npvo = false
pc.version = 0
pc.weight = 1
protonet.backend = asio
protonet.version = 0
replicator.causal_read_timeout = PT30S
replicator.commit_order = 3
Galera System Variables: https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/ Galera Status Variables: https://mariadb.com/kb/en/mariadb/galera-cluster-status-variables/
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Start Other NodesSecond and Third Nodes must be Provided an Address
for Connecting to the Cluster Use wsrep_cluster_address with IP Address of Node
and at Least One Other Node
47
wsrep_cluster_address = gcomm://192.168.56.101,192.168.56.102,192.168.56.103
Excerpt from Configuration File of Each Node
systemctl start mariadb
Executed from Command-Line on Second and Third Node
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster Address — wsrep_cluster_address
Write All Nodes Planned for Cluster in Address String
Don't Leave wsrep_cluster_address=gcomm:// in my.cnf
The wsrep_urls Parameter for mysqld_safe is Deprecated
48
wsrep_cluster_address=gcomm://10.0.0.1,10.0.0.2, ...
Galea Cluster Address: https://mariadb.com/kb/en/mariadb/galera-cluster-address/
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
MariaDB Configuration
49
[mysqld] logbin binlog_format=ROW
wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name="our_cluster" wsrep_node_name=node2 wsrep_cluster_address="gcomm://192.168.56.91,192.168.56.92,192.168.56.93" wsrep_node_address=192.168.56.92
wsrep_slave_threads=1 wsrep_sst_method=rsync wsrep_sst_receive_address=192.168.56.92:3306 wsrep_sst_auth=galera:rover123
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Start Other NodesJoin the Second and Third
Nodes to Cluster
50
SHOW GLOBAL STATUS LIKE 'wsrep%';
systemctl start mariadb
systemctl start mariadb
Executed from Command-Line on Second Node
Executed from mysql Client on Second Node
SHOW GLOBAL STATUS LIKE 'wsrep%';
Executed from mysql Client on Third Node
Executed from Command-Line on Third NodeNode 3
Node 2
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Initial Cluster StartupAll Nodes Should Be Running Now and
Consistent Test Replication
51
SELECT * FROM table1;
CREATE TABLE test.table1 (col1 INT UNSIGNED KEY);
INSERT INTO test.table1 VALUES (1),(2),(3);
SELECT * FROM test.table1; INSERT INTO table1
VALUES (4);
Executed from mysql Client on Node 1
Executed from mysql Client on Node 2
Executed from mysql Client on Node 3
1
2
3
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Sysbench Benchmarking ToolInstall RPM Packages
To Build a Database for Testing: sysbench [options] prepare
To Run a Test on Database: sysbench [options] run
Create a Database
52
Set Up SysBench: https://mariadb.com/kb/en/mariadb/sysbench-benchmark-setup/ Project Page: https://launchpad.net/sysbench
$ sysbench --test=sysbench_tests/db/common.lua --mysql-host=node1 \
--mysql-user=test --mysql-db=sbtest --oltp-table-size=250000 prepare
$ sysbench --test=sysbench_tests/db/oltp.lua --mysql-host=node1 \
--mysql- user=test --mysql-db=sbtest --oltp-table-size=250000 \
--report-interval=1 --max-requests=0 --tx-rate=10 run | grep tps
$ wget www.lefred.be/files/sysbench-0.5-3.el6_.x86_64.rpm
$ rpm -ivh www.lefred.be/files/sysbench-0.5-3.el6_.x86_64.rpm
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
State Transfers
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Node Recovery ProcedureA Node Determines it's not in Synch Communicates with Other Nodes to
Recover Determines its Current Cluster State to
Determine Transfer Method Required
54
Documentation on Node Recovery: http://galeracluster.com/documentation-webpages/recovery.html
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Recovery MethodsIncremental State Transfer (IST)
Partial Recovery (Delta's) of Write Sets
Snapshot State Transfer (SST) Full Recovery of Data
Error Log shows Method Used and Outcome Check Error Logs on Joiner and Donor Nodes
55
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Incremental State TransferIncremental State Transfer is very Effective gcache.size Parameter Defines Size of Write Sets kept for
IST Gcache is mmap File
Available Disk Space is Upper Limit for Size Allocation
Used if Joining Node had a Previous State Later than Start of Cluster
Only Possible after Graceful Shutdown Changes are Tracked by gcache — galera.cache on File System and in
Memory
56
Documentation on IST: http://galeracluster.com/documentation-webpages/statetransfer.html#incremental-state-transfer-ist
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Galera Saved Stategrastate.dat is Replication State File
Residing in Database System Data Directory — Included in Snapshot
uuid is Universal Unique Identifier seqno is Sequence Number of Last
Transaction Value Greater than 0 Indicates Proper
Shutdown Value -1 means No Known Sequence
Position (Server Crashed or Running)
57
# GALERA saved state version: 2.1 uuid: 82e240bb-6709-11e2-0800-619463ebd7b6
seqno: -1
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Snapshot State TransferUsed to Send Full Database State Set wsrep_sst_method to Dictate Method to Use
mysqldump rsync (default) xtrabackup xtrabackup-v2 — Recommended
New Joining Nodes use SST
58
Documentation on SST: http://galeracluster.com/documentation-webpages/statetransfer.html#state-snapshot-transfer-sst
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Forced SST — Expediting Full Recovery
Force SST by Deleting all Files in datadir
Stop All Nodes and Synchronize from galera1
59
systemctl stop mariadb
rm -rf /var/lib/mysql/*
systemctl stop mariadb
cd /var/lib/mysql rm -rf * systemctl start mariadb
systemctl start mariadb tail -f mysqld.err
Executed from Command-Line on Node 2
Executed from Command-Line on Node 3
Executed from Command-Line on Node 2
1
2
3
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
XtraBackup SST — Alternate Full Recovery
Full Recovery without Downtime on Donor
Requires Installing and Appropriate Credentials
Add datadir to Configuration File
60
yum install xtrabackup
[server]
datadir = /var/lib/mysql
XtraBackup SST: https://www.percona.com/doc/percona-xtradb-cluster/5.5/manual/xtrabackup_sst.html
GRANT PROCESS, RELOAD,
LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtrabackup'@localhost IDENTIFIED BY 'galera123';
Executed from Command-Line on First Node
Executed from mysql Client on Node 1
Excerpt from my.cnf on Node 1
1
2
3
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Configuring XtraBackup SSTStop Second Node and Edit its
MariaDB Configuration File Configure XtraBackup SST and
Rejoin Node to Cluster
61
systemctl stop mariadb
[server] wsrep_sst_method = xtrabackup-v2 wsrep_sst_auth = galera:galera
rm -rf /var/lib/mysql/* systemctl start mariadb
Executed from Command-Line on Second Node
Excerpt from my.cnf on Node 2
Executed from Command-Line on Second Node
1
2
3
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Verify IST WorksStop Second Node and Rejoin it to
Cluster Check Error Log for IST Messages Regularly Verify SST Works
62
systemctl stop mariadb
journalctl -xe
Executed from Command-Line on Second Node
CREATE TABLE test.testeroo
(col1 INT);
systemctl start mariadb
Executed from mysql Client on Node 1
Executed from Command-Line on Second Node
Executed from Command-Line on Second Node
1
2
3
4
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Caveats
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
CaveatsConsistent Reads Primary Key is Required Dealing with AUTO_INCREMENT
Detecting Slow Nodes Parallel Replication MyISAM Replication XA Transactions
64
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Slave Lag in Galera
65
Client Master Node
START TRANSACTION
COMMIT Replicate changeset
OK
Slave Node
COMMIT
PROCESS
APPLY
COMMIT
Acknowledgement
SELECT (waiting due to wsrep_sync_wait)
Certification
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Consistent Reads SettingsSet wsrep_sync_wait to 1
Every Read (e.g., SELECT) Waits for Slave Queue to be Applied Fully
Set Timeout for Maximum Causal Read Wait replicator.causal_read_keepalive
Read Locks only on Local Node
66
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Spotting Causality FailureTry Work Load to Spot Causality Failure Configure Read Causality and Test Again
67
for i in {1..1000}; do echo -n -e "\nRound $i "; mysql -ugalera -pgalera -h0 -P11001 test -e"INSERT INTO t VALUES($i)"; ret=$(mysql --batch -ugalera -pgalera -h0 -P11002 test -e"SELECT * FROM t WHERE i=$i");
if [ "$ret" = "" ]; then echo -n "FAILED" fi done
galera2-mariadb> SET SESSION wsrep_sync_wait = 1;
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Dealing with AUTO_INCREMENTGalera Provides Automatic Control of AUTO_INCREMENT
Galera will adjust auto_increment_increment and auto_increment_offset variables so Inserts in Separate Nodes will Interleave
Increments AUTO_INCREMENT by Number of Nodes
68
wsrep_auto_increment_control = ON
Galera & AUTO_INCREMENT: https://mariadb.org/auto-increments-in-galera/
Excerpt from my.cnf File
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Controlling AUTO_INCREMENTStart First and Second Node Create AUTO_INCREMENT Table and Insert Rows through All Nodes Start Third Node and Insert More Rows
69
SHOW VARIABLES LIKE 'auto_increment%';
INSERT INTO a (n) VALUES ('n2'),('n2'),('n2');
SHOW VARIABLES LIKE 'auto_increment%';
SELECT * FROM a;
CREATE TABLE a
(i INT PRIMARY KEY AUTO_INCREMENT,
n VARCHAR(10));
INSERT INTO a (n)
VALUES ('n1'),('n1'),('n1');
SHOW VARIABLES LIKE 'auto_increment%';
SHOW VARIABLES LIKE 'auto_increment%';
INSERT INTO a (n) VALUES ('n3'),('n3'),('n3');
SELECT * FROM a;Executed from mysql Client on Node 1
Executed from mysql Client on Node 1
Executed from mysql Client on Node 2
Executed from mysql Client on Node 3
1
2
3
4
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Controlling AUTO_INCREMENTDisable AUTO_INCREMENT Control in
galera2 Stop and Start galera3
70
SET GLOBAL wsrep_auto_increment_control=0;
systemctl stop mariadb
SHOW VARIABLES LIKE 'auto_increment%';
systemctl start mariadb
SHOW VARIABLES LIKE 'auto_increment%';
Executed from mysql Client on Node 2
Executed from Command-Line on Node 3Executed from Command-Line on Node 3
1
2
3
4
5
Execute on Both Node 1 and 2
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Detecting a Slow NodeNodes should have Equal Capacity — Use Equivalent Hardware
Galera Implements Flow Control to Protect Cluster from Slave Queue Growth
71
wsrep_flow_control_sent Number of Times Node Asked for Flow Control
wsrep_flow_control_recvd Number of Times Node Received Flow Control Stop Signal
wsrep_flow_control_paused Fraction of Time Node had to Pause for Flow Control
wsrep_local_recv_queue Length of Slave Queue
Slow Nodes in Galera: http://galeracluster.com/documentation-webpages/detectingaslownode.html
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Slave Queue TuningNodes should have Equal Capacity — Use Equivalent Hardware Galera Implements Flow Control to Protect Cluster
from Slave Queue Growth A Value Greater than 0.02 for wsrep_flow_control_paused indicates a Performance Problem in Cluster
72
Managing Galera Flow: http://galeracluster.com/documentation-webpages/managingfc.html
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Slave Queue Tuningwsrep_slave_threads
Number of Parallel Threads Applying to Slave Queue Slave Thread Count = 1 to 3 x Logical CPU Cores
gcs.fc_limit High Limit for Flow Control (default 16) Flow Control Stops when Reached 5 x wsrep_slave_threads
gcs.fc_factor Factor times Limit is Lower Limit (default 1; recommended 0.8) Flow Control Resumes when Slave Queue Reduced to this
Level
73
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Flow ControlConfigure Flow Control Limit Low
on Second Node Push Heavy Load against the First
Node and Check Status on Second
74
sysbench --test=/usr/share/doc/sysbench/tests/db/oltp.lua \ --mysql-user=root --mysql-password=fido123 \ --mysql-db=sbtest --oltp-table-size=25000 \ --report-interval=5 --max-requests=0 --num-threads=10 run
SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=2';
Executed from mysql Client on Node 2
Executed from Command-Line on First Node
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Parallel ReplicationAny Number of Slave Applier
Threads can be Started Slave Control Assigns Write
Sets for Slave Appliers Slave Control is on ROW
Level Applying Only is Parallel Commit Order is Dictated
75
MariaDB
Slave Thread Slave Thread
Slave Control
Slave Queue
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
True Parallel ApplyingEvery Application Benefits Works on Row Level — Not on
Database or Table
76
SET GLOBAL wsrep_slave_threads = n;
Set to Number of Slaves that makes Sense
Monitor wsrep_cert_deps_distance Maximum about 4 times Number of
CPU Cores
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
True Parallel ApplyingStart Heavy Load on First
Node Monitor CPU on Second
Node with top Configure More Slave
Threads
77
sysbench --test=/usr/share/doc/sysbench/tests/db/oltp.lua \
--mysql- user=root --mysql-password=fido123 \
--mysql-db=sbtest --oltp-table-size=25000 \
--report-interval=5 --max-requests=0 --num-threads=10 run
SET GLOBAL wsrep_slave_threads = 2; SHOW PROCESSLIST;
SET GLOBAL wsrep_slave_threads = 4; SHOW PROCESSLIST;
Executed from Command-Line on First Node
Executed from mysql Client on Node 2
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Multi-Master Conflicts
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Multi-Master ConflictsGalera Uses Optimistic Concurrency Control When Two Transactions Modify same Row on
Different Nodes at Same Time, One Transaction must Abort
Victim Transaction will get Deadlock Error (1213) upon COMMIT
Application should Retry Deadlocked Transactions Not All Applications have Retrying Logic Built-In
79
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Retry TransactionsGalera can Retry autocommit Transaction for Client
Application within MariaDB Server MariaB will Not Return Deadlock Error — will Retry
Silently Transaction Set wsrep_retry_autocommit to Number of Retries
before Returning Deadlock Error Retrying Applies Only to autocommit Transactions
since Not Safe for Multi-Statement Transactions
80
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
DiagnosticsSet wsrep_log_conflicts to send Information on each Cluster
Conflict to MariaDB Error Log Use Cert.log_conflicts to Log Conflicting Transaction
Database Hot-Spots Rows to which Many Transactions want to Write Simultaneously Patterns like Queue or ID Allocation can be Hot-Spots
Monitor Status Variables wsrep_local_bf_aborts wsrep_local_cert_failures
Set wsrep_debug so All Conflicts will be Logged
81
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Diagnose ConflictsCheck if Application Logic can be
Changed to get Deadlock Exception and Apply Retrying Logic in Application
Try Setting wsrep_retry_autocommit Limit Number of Master Nodes or
Change to Master-Slave Model Treat Writes Only to Hot-Spot Table as
Master-Slave, if can Limit Access to Table
82
tail -f /var/lib/mysql/node1.err
SET GLOBAL wsrep_log_conflicts=1; SET GLOBAL wsrep_provider_options =
'cert.log_conflicts=1';
SHOW LOCAL STATUS LIKE 'wsrep_local%';
Executed from mysql Client on Node 1
Executed from mysql Client on Node 1
Executed from Command-Line on First Node
1
2
3
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Create Ad-Hoc ConflictAny Command after Conflict will
Result in Deadlock Error
83
CREATE TABLE c (i INT PRIMARY KEY, j INT); INSERT INTO c VALUES (1,0),(2,0); BEGIN; UPDATE c SET j=1 WHERE i=1;
UPDATE c SET j=2 WHERE i=1;
COMMIT; BEGIN; UPDATE c SET j=1 WHERE i=1;
UPDATE c SET j=2 WHERE i=1;
SELECT * FROM c;
Executed from mysql Client on Node 1
Executed from mysql Client on Node 2
Executed from mysql Client on Node 1
Executed from mysql Client on Node 2
Executed from mysql Client on Node 1
1
2
3
4
5
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Schema Changes
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Schema UpgradesDDL is Non-Transactional
Bad for Replication
Galera has Two Methods for DDL Total Order Isolation (TOI) Rolling Schema Upgrade (RSU)
Use wsrep_osu_method to choose Option pt-online-schema-change provides Lockless Schema
Upgrade Use TOI Mode Careful of Foreign Keys
85
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Total Order IsolationDDL is Replicated Up-Front Each Node gets the DDL Statement and
Must Process DDL at Same Slot in Transaction Stream
Galera Isolates and Locks Entire Cluster for Duration of DDL Processing
86
Documentation on Isolation Levels: http://galeracluster.com/documentation-webpages/isolationlevels.html
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Rolling Schema UpgradeDDL is Not Replicated Galera will Remove Node from Replication for
Duration of DDL Processing When done with DDL, Node will get Missed
Transactions (e.g., IST) DBA should Roll RSU Operation over All Nodes Requires Backward Compatible Schema Changes Use Only under Certain Conditions
Planned SQL is Not Conflicting SQL will Not Generate Inconsistency
87
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Schema Upgrade StrategyBest Practices
Plan Upgrades Try to make Backwards Compatible Rehearse Upgrades Determine DDL Execution Time Use RSU if Possible
ALTER TABLE to Create New AUTO_INCREMENT
Column will Cause Problems Every Node has Different AUTO_INCREMENT and Offset
Settings
88
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Load Testing a Schema UpgradeStart Moderate sysbench Load
89
sysbench --test=/usr/share/doc/sysbench/tests/db/oltp.lua \
--mysql-user=root --mysql-password=fido1123 \ --mysql-db=sbtest --oltp-table-size=25000 \ --report-interval=5 --max-requests=0 --tx-rate=10 run
Issue Some DDL under TOI
ALTER TABLE sbtest
ADD COLUMN (m int UNSIGNED KEY);
Executed from mysql Client on Node 1
ALTER TABLE sbtest ADD COLUMN (n int UNSIGNED);
CREATE TABLE m (i int);
Executed from mysql Client on Node 2
CREATE TABLE n (i int);
Executed from mysql Client on Node 1
Executed from mysql Client on Node 2
1
2
3
4
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Test Schema UpgradeIssue some DDL under RSU
90
SET GLOBAL wsrep_OSU_method=RSU; ALTER TABLE sbtest DROP COLUMN m;
SHOW CREATE TABLE sbtest; SET GLOBAL wsrep_OSU_method=RSU; ALTER TABLE sbtest DROP COLUMN n;
DROP TABLE m;
DROP TABLE n;
1
2
3
4
Executed from mysql Client on Node 1
Executed from mysql Client on Node 2
Executed from mysql Client on Node 1
Executed from mysql Client on Node 2
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Back-Ups with Galera
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Galera for Back-UpsAll Galera Nodes are Continuously Up-to-Date Best Practices
Dedicate a Reference Node for Back-ups Assign Global Transaction Identifier with Back-up
Possible Methods Desychronize a Node for Back-up XtraBackup
92
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Back-Ups with Global Transaction IdentifierGlobal Transaction Identifier (GTID) marks Position
in Cluster Transaction Stream Backup with Known GTID makes Utilizing IST
Possible when Joining New Nodes Recovering a Node Provisioning New Nodes
Use XtraBackup's wrapper innobackupex with --galera-info
93
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Back-Up by Desynchronizing a Node
Galera Replication
94
Server 1 Server 2 Server 3
Load Balancing Isolate Back-Up Node
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Back-Up by Desynchronizing a NodeDesynchronize a Node
from Group (Enable wsrep_desync)
95
Desynchronize
Galera Replication
Server 1 Server 2 Server 3
Load Balancing
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Back-Up by Desynchronizing a Node
96
Galera Replication
Server 1 Server 2 Server 3
Load Balancing
FLUSH TABLES WITH READ LOCK;
Block Changes
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Back-Up by Desynchronizing a NodeRead GTID from Status
and Assign to Back-Up (wsrep_cluster_uuid,
wsrep_last_committed)
97
Back-Up
Galera Replication
Server 1 Server 2 Server 3
Load Balancing
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Performing Back-Up — After Desynchronizing Node
Make Logical Backup mysqldump mydumper
Physical Back-Up Copy with cp LVM Snapshot
98
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Back-Up by Desynchronizing a Node
99
Galera Replication
Server 1 Server 2 Server 3
Load Balancing
UNLOCK TABLES; Replicate Changes
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Back-Up by Desynchronizing a NodeDisable wsrep_desync
100
Galera Replication
Server 1 Server 2 Server 3
Load Balancing
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
XtraBackupHot Back-Up Method — Can be Used Any Time Simple and Efficient Use --galera-info Option to get Global Transaction
Identifier Logged into Separate Galera Information File
101
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Recovery
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Recovering from DowntimeScheduled Maintenance — Clean Shut-Downs
Unexpected Cluster Failures Power Outage Network Outage Out of Synch Nodes
103
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Recovering from Clean ShutdownCluster Start Order is Important — Always in
Reverse Order Start First the Node with Latest Writes or
Changes If Start Instead another Bootstrap Node, Force
SST for Subsequent Nodes
SST Initiated Unless All Nodes are in Same State (GTID)
Shutdown Cleanly All Nodes Cluster can Shrink to One Node if Node
Shutdowns are Graceful
104
symtemctl stop mariadb
Execute on All Three Nodes
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
RecoveryGalera GTID (seqno) is Written in Persistent InnoDB
Storage after each Commit Galera will use InnoDB GTID if seqno in grastate is
Undefined (-1)
seqno is Undefined in Case of Crash
Persistent GTID can be Queried with galera_recovery_information
Old Non systemd Installations Use --wsrep_recover Use InnoDB GTID if Unsure which Node was Last Updated
105
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Split BrainShutdown Third Node and Kill Second Node Make One Node the Primary Component (PC)
Never have More than One Primary Component
106
systemdtl stop mariadb
Node 1 changes to Non-Primary State to Avoid Split Brain
SET GLOBAL wsrep_provider_options = 'pc.bootstrap=1';
systemdtl start mariadb
Executed from Command-Line on Node 3
killall -9 mysqld
Executed from Command-Line on Node 2
Executed from mysql Client on Node 1
Executed from Command-Line on Node 2
systemdtl start mariadb
Executed from Command-Line on Node 3
1
2
3
4
5
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Split Brain ScenariosEven Number of Nodes
Two Data Center Configurations Two-Node Configuration
Weighted Nodes with One-Node Majority (3 + 1 + 1)
107
Cautionpc.ignore_sb is Dangerous
SET GLOBAL wsrep_provider_options =
'pc.ignore_sb=1';
SET GLOBAL wsrep_provider_options = 'pc.weight=3';
Executed from mysql Client on Node 1
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Two-Node Cluster and Split Brainwsrep_provider_options="pc.ignore_sb"
108
VIP
Clients
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Load Balancing
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Load Balancing ToolsUse glbd Daemon for Load Balancing through a
Daemon process Use libglb to Load Balance in Application Process
Need to Set Two Environment Variables to use libglb LD_PRELOAD=<path-to-libglb> GLB_OPTIONS='options string'
MaxScale is an Intelligent Proxy that
110
Documentation on Galera Load Balancer: https://mariadb.com/kb/en/mariadb/galera-load-balancer/ Project Page: http://www.codership.com/downloads/glb/
$ LD_PRELOAD=src/.libs/libglb.so \ GLB_OPTIONS="--random 3306 192.168.0.1 192.168.0.2 192.168.0.3" \
mysql -u root —p fido123 -h 127.0.0.1 -P 3306
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Advanced Galera Topics
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Weighted QuorumBetter Control on Primary & Non-
Primary State in Case of Failure For Link Failure, MAIN remains
Primary Manual Intervention to make DR
Primary
112
Documentation on Weighted Quorum: http://galeracluster.com/documentation-webpages/weightedquorum.html
server MAIN1: pc.weight=1 server MAIN2: pc.weight=1
server DR1: pc.weight=0 server DR2: pc.weight=0
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
MulticastingValue of Multi-Casting — WAN vs. LAN
Recommended to set Multicast before Bootstrapping Cluster
Problems may occur if Migrating from Unicast to Multicast
113
$> ip route add 224.0.0.0/4 dev eth0
[server] wsrep_provider_options="gmcast.mcast_addr=239.192.0.11" wsrep_cluster_address="gcomm://239.192.0.11"
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Multiple Galera Cluster (Asynchronous)Multi-Site Replication is Possible
with Galera Additional Caution Required
All Tables must have Primary Keys Manual Management of
AUTO_INCREMENT
Use Same server_id for All
114
[server]
wsrep_auto_increment_control=0 auto_increment_increment = 16 auto_increment_offset = 1,2,3,4,5,6,7,8,9(…) server_id = 1234
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
WAN ReplicationLink Failures happens More Frequently No Need to Arbitrate Always — Increase the
Timeouts
Writes Stall for Longer Time while Link is Down — Monitor the Network
115
wsrep_provider_options =
"evs.keepalive_period = PT3S; evs.suspect_timeout = PT30S; evs.inactive_timeout = PT1M; evs.install_timeout = PT1M"
Defaults: evs.keepalive_period = PT1S evs.suspect_timeout = PT5S evs.inactive_timeout = PT15S evs.install_timeout = PT15S
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster NotificationsCluster can Trigger Notifications Notification can be Sent to MaxScale Script API for Notification Syntax wsrep_notify_cmd Defines the Script to Handle
Notifications Load Balancer Configuration Monitoring
116
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster NotificationsNotification Script (/usr/bin/
wsrep_notify.sh)
117
# Command to Call when Node Status or Cluster Membership Changes.
# Will be Passed All or Some of Following Options:
# --status - New Status of Node
# --uuid - UUID of Cluster
# --primary - Whether Component is Primary ("yes" or "no")
# --members - Comma-Separated List of Members
# --index - Index of Node in List
echo "$@" >> /tmp/wsrep_notifications.log
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Cluster NotificationsConfigure the Second Node to Call
the Notification Handler Cause Cluster State Changes
118
[server] wsrep_notify_cmd = /usr/bin/wsrep_notify.sh
tail -f /tmp/wsrep_notifications.log
Executed from Command-Line on Node 2
systemctl stop mariadb
Executed from Command-Line on Node 1
Excerpt from Configuration File on Node 2
1
2
3
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Master & Slave SettingsUse if Writing only to One
Master Set wsrep_sync_wait to 1
Can Release Flow Control before Pausing Replication
119
SET GLOBAL VARIABLE
wsrep_provider_options = "gcs.fc_limit = 256; gcs.fc_factor = 0.99; gcs.fc_master_slave = yes";
Defaultsgcs.fc_limit = 16gcs.fc_factor = 0.5fc_master_slave = NO
MariaDB Enterprise Cluster
Introduction
ArchitectureInstallation
State Transfer
CaveatsMulti-Master Conflicts
Schema Changes
Back-UpsRecovery
Load Balancing
Advanced TopicsConclusion
Conclusions
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
On-Line ResourcesDocumentation Knowledge Base Open-Source Community
Post Questions on Forums Ask Questions on IRC — FreeNode
121
MariaDB Documentation and Knowledge Base: http://mariadb.com/kb
Version 3.2, Slide Copyright MariaDB Ab. Commercial in ConfidenceMariaDB Enterprise Cluster Administration
Other Training CoursesPublic In-Person Courses Private In-Person Courses Live Virtual Training Courses Self-Paced On-Line Courses
122
Training Courses: https://mariadb.learnupon.com/store Upcoming Courses: https://mariadb.learnupon.com/store/sessions