Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MySQL InnoDB Cluster / ReplicaSet - Tutorial

255 views

Published on

Tutorial on MySQL InnoDB Cluster and ReplicaSet, a fully integrated product built on MySQL technology, by MySQL.

MySQL InnoDB Cluster and ReplicaSet provide failover/high availability and scaling features baked in; providing an integrated end-to-end solution that is easy to use.

Published in: Software
  • Be the first to comment

MySQL InnoDB Cluster / ReplicaSet - Tutorial

  1. 1. 1 / 49
  2. 2. 2 / 492 / 49
  3. 3.   Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purpose only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied up in making purchasing decisions. The development, release and timing of any features or functionality described for Oracle´s product remains at the sole discretion of Oracle. 3 / 49
  4. 4. Past, Present & Future 4 / 49
  5. 5. Past, Present & Future In The Past - MANUAL Setting up Replication topology was done manually, taking many steps including user management, restoring backups, configuring replication... MySQL offered the technical pieces, leaving it up to the user to setup an (always customized) architecture This requires technical components ... bringing lot's of work for DBA's and experts, who spent their time automating 4 / 49
  6. 6. Past, Present & Future In The Past - MANUAL Setting up Replication topology was done manually, taking many steps including user management, restoring backups, configuring replication... MySQL offered the technical pieces, leaving it up to the user to setup an (always customized) architecture This requires technical components ... bringing lot's of work for DBA's and experts, who spent their time automating 2016 - MySQL InnoDB Cluster Group Replication: Automatic membership changes, network partition handling, consistency... Shell to provide a powerful interface that helps in automating an integrating all components InnoDB CLONE to automatically provision members, fully integrated in InnoDB 4 / 49
  7. 7. Past, Present & Future In The Past - MANUAL Setting up Replication topology was done manually, taking many steps including user management, restoring backups, configuring replication... MySQL offered the technical pieces, leaving it up to the user to setup an (always customized) architecture This requires technical components ... bringing lot's of work for DBA's and experts, who spent their time automating 2016 - MySQL InnoDB Cluster Group Replication: Automatic membership changes, network partition handling, consistency... Shell to provide a powerful interface that helps in automating an integrating all components InnoDB CLONE to automatically provision members, fully integrated in InnoDB 2020 - MySQL InnoDB ReplicaSet 'classic', 'asynchronous' Replication based Solution, fully integrated 4 / 49
  8. 8. MySQL InnoDB Cluster "A single product — MySQL — with high availability and scaling features baked in; providing an integrated end-to-end solution that is easy to use." 5 / 49
  9. 9. MySQL InnoDB Cluster "A single product — MySQL — with high availability and scaling features baked in; providing an integrated end-to-end solution that is easy to use." 5 / 49
  10. 10. Components: MySQL Server MySQL Group Replication MySQL Shell MySQL Router MySQL InnoDB Cluster "A single product — MySQL — with high availability and scaling features baked in; providing an integrated end-to-end solution that is easy to use." 5 / 49
  11. 11. One Product: MySQL All components developed together Integration of all components Full stack testing MySQL InnoDB Cluster - Goals 6 / 49
  12. 12. One Product: MySQL All components developed together Integration of all components Full stack testing Easy to Use One client: MySQL Shell Integrated orchestration Homogenous servers MySQL InnoDB Cluster - Goals 6 / 49
  13. 13. Introducing MySQL InnoDB ReplicaSet! 8.0.19 Feature! Fully integrated MySQL Router Automatic Routing Ease of use with MySQL Shell Configuring, Adding, Removing members Automatic Member Provisioning (CLONE) Replication Architecture: (manual) Switchover & Failover (asynchronous) Read Scaleout 'Simple' Replication architecture: no network/hardware requirements Providing Availability on PRIMARY when issues with secondaries or network MySQL InnoDB ReplicaSet 7 / 49
  14. 14. Past MySQL InnoDB ReplicaSet Restore a backup to provision a member Automatically provisioning new members: InnoDB CLONE MySQL InnoDB ReplicaSet - Features 8 / 49
  15. 15. Past MySQL InnoDB ReplicaSet Restore a backup to provision a member Automatically provisioning new members: InnoDB CLONE Configure Replication Users Configure Replication MySQL Shell Automatically configures users & replication MySQL InnoDB ReplicaSet - Features 8 / 49
  16. 16. Past MySQL InnoDB ReplicaSet Restore a backup to provision a member Automatically provisioning new members: InnoDB CLONE Configure Replication Users Configure Replication MySQL Shell Automatically configures users & replication Manually configuring, adding removing servers in Application, MySQL Router (or other proxy) Integrated MySQL Router load balancing Only need to bootstrap Router Router is stateless, adapts to topology changes MySQL InnoDB ReplicaSet - Features 8 / 49
  17. 17. Past MySQL InnoDB ReplicaSet Restore a backup to provision a member Automatically provisioning new members: InnoDB CLONE Configure Replication Users Configure Replication MySQL Shell Automatically configures users & replication Manually configuring, adding removing servers in Application, MySQL Router (or other proxy) Integrated MySQL Router load balancing Only need to bootstrap Router Router is stateless, adapts to topology changes Manually or relying on external tools to make topology changes Easy to use manual switchover/failover MySQL InnoDB ReplicaSet - Features 8 / 49
  18. 18. Past MySQL InnoDB ReplicaSet Restore a backup to provision a member Automatically provisioning new members: InnoDB CLONE Configure Replication Users Configure Replication MySQL Shell Automatically configures users & replication Manually configuring, adding removing servers in Application, MySQL Router (or other proxy) Integrated MySQL Router load balancing Only need to bootstrap Router Router is stateless, adapts to topology changes Manually or relying on external tools to make topology changes Easy to use manual switchover/failover Use additional monitoring tool log in on all machines to check topology status See status of the topology through MySQL Shell status() MySQL InnoDB ReplicaSet - Features 8 / 49
  19. 19. Past MySQL InnoDB ReplicaSet MySQL InnoDB ReplicaSet - Features 9 / 49
  20. 20. Past MySQL InnoDB ReplicaSet complexity: user is responsible for the full configuration of every component and it's settings Shell configures Server, Router, Replication in a standardized best practice setup, prevents mistakes MySQL InnoDB ReplicaSet - Features 9 / 49
  21. 21. Past MySQL InnoDB ReplicaSet complexity: user is responsible for the full configuration of every component and it's settings Shell configures Server, Router, Replication in a standardized best practice setup, prevents mistakes every setup is a customized setup Standard Solution -- Supported & QA'ed by Oracle MySQL InnoDB ReplicaSet - Features 9 / 49
  22. 22. Past MySQL InnoDB ReplicaSet complexity: user is responsible for the full configuration of every component and it's settings Shell configures Server, Router, Replication in a standardized best practice setup, prevents mistakes every setup is a customized setup Standard Solution -- Supported & QA'ed by Oracle A lot of manual steps and additional software required, always customized and often overengineered by MySQL DBA's Easy to use, even for MySQL beginner MySQL InnoDB ReplicaSet - Features 9 / 49
  23. 23. MySQL InnoDB ReplicaSet - Requirements & Limitations Requirements: MySQL 8 (SET PERSIST!) GTID Limitations: Manual failover -- which is a good thing No coordination between servers mandates external arbitration No multi-primary as such topology cannot guarantee data consistency No data reconciliation No conflict handling All secondary members replicate from primary Single tiered replication support. 10 / 49
  24. 24. Transparent Access to Database Arch. "provide transparent routing between your application and back-end MySQL Servers" Transparent client connection routing Load balancing Application connection failover Little to no configuration needed Stateless design offers easy HA client routing Router as part of the application stack Integration into InnoDB Cluster & InnoDB ReplicaSet Understands Group Replication & Replication topology Currently TCP Port each for PRIMARY and NON-PRIMARY traffic MySQL Router 11 / 49
  25. 25. Database Administration Interface "MySQL Shell provides the developer and DBA with a single intuitive, flexible, and powerful interface for all MySQL related tasks!" Multi-Language: JavaScript, Python, and SQL Naturally scriptable Supports Document and Relational models Exposes full Development and Administration APIs Classic MySQL protocol and X protocol MySQL Shell 12 / 49
  26. 26. Preparing Your Environment 13 / 49
  27. 27. 1. Install VirtualBox, Start Image ssh mysqltutorial@localhost -p 2222 Password password: mysql 3. Start MySQL Shell $ docker-compose run mysqlsh 2. Check consul http://localhost:8500 Preparing Your Environment 14 / 49
  28. 28. MySQL Shell 15 / 49
  29. 29. 0. Connect to an instance mysql-js> c root@server_1:3306 MySQL Shell 16 / 49
  30. 30. 0. Connect to an instance mysql-js> c root@server_1:3306 1. Check the helper mysql-js> help MySQL Shell 16 / 49
  31. 31. 0. Connect to an instance mysql-js> c root@server_1:3306 1. Check the helper mysql-js> help 2. Check the dba object help mysql-js> help dba MySQL Shell 16 / 49
  32. 32. 0. Connect to an instance mysql-js> c root@server_1:3306 1. Check the helper mysql-js> help 2. Check the dba object help mysql-js> help dba 3. Switch operating modes mysql-js> py mysql-py> sql mysql-sql> js mysql-js> sql SELECT 1; MySQL Shell 16 / 49
  33. 33. 0. Connect to an instance mysql-js> c root@server_1:3306 1. Check the helper mysql-js> help 2. Check the dba object help mysql-js> help dba 3. Switch operating modes mysql-js> py mysql-py> sql mysql-sql> js mysql-js> sql SELECT 1; 4. Try auto-completion mysql-js> dba.<tab> mysql-js> shell.<tab> mysql-js> util.<tab> MySQL Shell 16 / 49
  34. 34. 0. Connect to an instance mysql-js> c root@server_1:3306 1. Check the helper mysql-js> help 2. Check the dba object help mysql-js> help dba 3. Switch operating modes mysql-js> py mysql-py> sql mysql-sql> js mysql-js> sql SELECT 1; 4. Try auto-completion mysql-js> dba.<tab> mysql-js> shell.<tab> mysql-js> util.<tab> 5. Check Shell options mysql-js> shell.options MySQL Shell 16 / 49
  35. 35. 0. Connect to an instance mysql-js> c root@server_1:3306 1. Check the helper mysql-js> help 2. Check the dba object help mysql-js> help dba 3. Switch operating modes mysql-js> py mysql-py> sql mysql-sql> js mysql-js> sql SELECT 1; 4. Try auto-completion mysql-js> dba.<tab> mysql-js> shell.<tab> mysql-js> util.<tab> 5. Check Shell options mysql-js> shell.options 6. Check history mysql-js> history MySQL Shell 16 / 49
  36. 36. MySQL InnoDB ReplicaSet - Hands-on Tutorial! 17 / 49
  37. 37. MySQL InnoDB ReplicaSet - Hands-on Tutorial! 1. Configure MySQL instances for ReplicaSet usage mysql-js> dba.con gureReplicaSetInstance("root@server_1:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_2:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_3:3306") 18 / 49
  38. 38. 2. Create the ReplicaSet mysql-js> c root@server_1:3306 mysql-js> rs = dba.createReplicaSet("replicaset") MySQL InnoDB ReplicaSet - Hands-on Tutorial! 1. Configure MySQL instances for ReplicaSet usage mysql-js> dba.con gureReplicaSetInstance("root@server_1:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_2:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_3:3306") 18 / 49
  39. 39. 2. Create the ReplicaSet mysql-js> c root@server_1:3306 mysql-js> rs = dba.createReplicaSet("replicaset") 3. Check ReplicaSet status mysql-js> rs.status() ... MySQL InnoDB ReplicaSet - Hands-on Tutorial! 1. Configure MySQL instances for ReplicaSet usage mysql-js> dba.con gureReplicaSetInstance("root@server_1:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_2:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_3:3306") 18 / 49
  40. 40. 2. Create the ReplicaSet mysql-js> c root@server_1:3306 mysql-js> rs = dba.createReplicaSet("replicaset") 3. Check ReplicaSet status mysql-js> rs.status() ... 4. Add instances to the ReplicaSet mysql-js> rs.addInstance("root@server_2:3306") mysql-js> rs.addInstance("root@server_3:3306") MySQL InnoDB ReplicaSet - Hands-on Tutorial! 1. Configure MySQL instances for ReplicaSet usage mysql-js> dba.con gureReplicaSetInstance("root@server_1:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_2:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_3:3306") 18 / 49
  41. 41. 2. Create the ReplicaSet mysql-js> c root@server_1:3306 mysql-js> rs = dba.createReplicaSet("replicaset") 3. Check ReplicaSet status mysql-js> rs.status() ... 4. Add instances to the ReplicaSet mysql-js> rs.addInstance("root@server_2:3306") mysql-js> rs.addInstance("root@server_3:3306") 5. Check ReplicaSet status again mysql-js> rs.status() ... MySQL InnoDB ReplicaSet - Hands-on Tutorial! 1. Configure MySQL instances for ReplicaSet usage mysql-js> dba.con gureReplicaSetInstance("root@server_1:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_2:3306") mysql-js> dba.con gureReplicaSetInstance("root@server_3:3306") 18 / 49
  42. 42. MySQL InnoDB ReplicaSet - Hands-on Tutorial! 19 / 49
  43. 43. 6. Bootstrap Routers $ docker-compose up -d --scale router-rs=2 router-rs Note: SSH to the VM in a new tab MySQL InnoDB ReplicaSet - Hands-on Tutorial! 20 / 49
  44. 44. 6. Bootstrap Routers $ docker-compose up -d --scale router-rs=2 router-rs Note: SSH to the VM in a new tab 7. Check registered Routers mysql-js> rs.listRouters() MySQL InnoDB ReplicaSet - Hands-on Tutorial! 20 / 49
  45. 45. 6. Bootstrap Routers $ docker-compose up -d --scale router-rs=2 router-rs Note: SSH to the VM in a new tab 7. Check registered Routers mysql-js> rs.listRouters() 8. Run Application - Primary Traffic $ docker-compose run app Note: run this app in separate terminal so you can watch this at all times MySQL InnoDB ReplicaSet - Hands-on Tutorial! 20 / 49
  46. 46. 9. Ensure Routers are OK http://localhost:8500 MySQL InnoDB ReplicaSet - Hands-on Tutorial! 21 / 49
  47. 47. 10. Change ReplicaSet primary instance mysql-js> rs.setPrimaryInstance("server_3:3306") Note: App will automatically get redirected to the new primary. As it's a manual switchover, no split brain MySQL InnoDB ReplicaSet - Hands-on Tutorial! 22 / 49
  48. 48. 10. Change ReplicaSet primary instance mysql-js> rs.setPrimaryInstance("server_3:3306") Note: App will automatically get redirected to the new primary. As it's a manual switchover, no split brain 11. Check ReplicaSet status mysql-js> rs.status() ... MySQL InnoDB ReplicaSet - Hands-on Tutorial! 22 / 49
  49. 49. MySQL InnoDB ReplicaSet - MySQL Router Integration --bootstrap to automatically configure Metadata schema contains Replication Topology Health checks are performed to all members Switchover to new primary (setPrimaryInstance()): Shell performs topology change, configures super_read_only and updates view_id in metadata Router automatically sees higher view_id and will redirect primary traffic to new primary When the Primary is lost: forcePrimaryInstance() Shell performs topology change, updates view_id in metadata and invalidates lost primary Router will notice topology change by higher view_id in metadata (if network allows) and automatically connect to new Primary 23 / 49
  50. 50. 12. Take down primary instance $ docker-tc post mysqltutorial_server_3_1 loss=100% Note: App will have errors MySQL InnoDB ReplicaSet - Hands-on Tutorial! 24 / 49
  51. 51. 12. Take down primary instance $ docker-tc post mysqltutorial_server_3_1 loss=100% Note: App will have errors 13. Get ReplicaSet object, check status mysql-js> reconnect mysql-js> rs = dba.getReplicaSet() mysql-js> rs.status() MySQL InnoDB ReplicaSet - Hands-on Tutorial! 24 / 49
  52. 52. 14. Force Failover mysql-js> rs.forcePrimaryInstance("server_1:3306") Note: App will reconnect to new Primary MySQL InnoDB ReplicaSet - Hands-on Tutorial! 25 / 49
  53. 53. 14. Force Failover mysql-js> rs.forcePrimaryInstance("server_1:3306") Note: App will reconnect to new Primary 15. Check Status mysql-js> rs.status() MySQL InnoDB ReplicaSet - Hands-on Tutorial! 25 / 49
  54. 54. 14. Force Failover mysql-js> rs.forcePrimaryInstance("server_1:3306") Note: App will reconnect to new Primary 15. Check Status mysql-js> rs.status() 16. Bring back Server 3 $ docker-tc delete mysqltutorial_server_3_1 mysql-js> rs.status() Note: App will not connect to invalidated old Primary MySQL InnoDB ReplicaSet - Hands-on Tutorial! 25 / 49
  55. 55. By design chosen to be Manual failover Having external monitoring processes decide failover can cause a lot of false positives. External tool decides, if the tool has issues: even bigger issues. Split brain issues Majority of production deployments are configured with Manual Failover, which increases Uptime! When automatic failover is needed: use MySQL InnoDB Cluster instead of Semi-Sync MySQL InnoDB ReplicaSet - Manual Failover 26 / 49
  56. 56. Example: 1 Primary, 2 Secondaries, 2 Proxy hosts (App servers) 1 Management server: monitoring and making Topology changes automatically Problem: Management server & replica server is partitioned from all other servers What will happen? MySQL InnoDB ReplicaSet - Manual Failover 27 / 49
  57. 57. Example: 1 Primary, 2 Secondaries, 2 Proxy hosts (App servers) 1 Management server: monitoring and making Topology changes automatically Problem: Management server & replica server is partitioned from all other servers What will happen? The management host might promote the secondary causing split brain use MySQL InnoDB Cluster over Semi-Sync With semi-sync, all members have to ack (prevent split brain), causing downtime with every small glitch MySQL InnoDB ReplicaSet - Manual Failover 28 / 49
  58. 58. 17. Rejoin instance back to the ReplicaSet mysql-js> rs.rejoinInstance("server_3:3306") Note: there is no guarantee there is no split brain, but is minimized due to Router logic MySQL InnoDB ReplicaSet - Hands-on Tutorial! 29 / 49
  59. 59. 17. Rejoin instance back to the ReplicaSet mysql-js> rs.rejoinInstance("server_3:3306") Note: there is no guarantee there is no split brain, but is minimized due to Router logic 18. Verify the ReplicaSet status mysql-js> rs.status() MySQL InnoDB ReplicaSet - Hands-on Tutorial! 29 / 49
  60. 60. 17. Rejoin instance back to the ReplicaSet mysql-js> rs.rejoinInstance("server_3:3306") Note: there is no guarantee there is no split brain, but is minimized due to Router logic 18. Verify the ReplicaSet status mysql-js> rs.status() 19. Stop Routers $ docker-compose stop router-rs 20. Dissolve ReplicaSet mysql-js> rs.dissolve() MySQL InnoDB ReplicaSet - Hands-on Tutorial! 29 / 49
  61. 61. MySQL InnoDB Cluster 30 / 49
  62. 62. Components: MySQL Server MySQL Group Replication MySQL Shell MySQL Router MySQL InnoDB Cluster "A single product — MySQL — with high availability and scaling features baked in; providing an integrated end-to-end solution that is easy to use." 31 / 49
  63. 63. Many of our customers have adopted InnoDB Cluster! Fully integrated MySQL Router Automatic Routing Ease of use with MySQL Shell Configuring, Adding, Removing members Group Replication Architecture Providing Consistency Automatic Failover Network Partition Handling No data loss in case of failure Automatic Member Provisioning (CLONE) MySQL InnoDB Cluster 32 / 49
  64. 64. MySQL Group Replication 33 / 49
  65. 65. High Available Distributed MySQL DB Fault tolerance Automatic failover Active/Active update anywhere (limits apply) Automatic membership management Adding/removing members Network partitions, failures Conflict detection and resolution Prevents data loss MySQL Group Replication 33 / 49
  66. 66. MySQL Group Replication Implementation of Replicated Database State Machine Total Order - Writes XCOM - Paxos implementation Configurable Consistency Guarantees eventual consistency 8.0+: per session & global read/write consistency Using MySQL replication framework by design binary logs relay logs GTIDs: Global Transaction IDs Generally Available since MySQL 5.7 Supported on all platforms: linux, windows, solaris, macosx, freebsd 34 / 49
  67. 67. Consistency: No Data Loss (RPO=0) in event of failure of (primary) member Split brain prevention (Quorum) MySQL Group Replication - Use Cases 35 / 49
  68. 68. Consistency: No Data Loss (RPO=0) in event of failure of (primary) member Split brain prevention (Quorum) Highly Available: Automatic Failover Primary members are automatically elected Automatic Network Partition handling MySQL Group Replication - Use Cases 35 / 49
  69. 69. Consistency: No Data Loss (RPO=0) in event of failure of (primary) member Split brain prevention (Quorum) Highly Available: Automatic Failover Primary members are automatically elected Automatic Network Partition handling Read Scaleout Add/Remove members as needed Replication Lag handling with Flow Control Configurable Consistency Levels Eventual Full Consistency -- no stale reads MySQL Group Replication - Use Cases 35 / 49
  70. 70. Consistency: No Data Loss (RPO=0) in event of failure of (primary) member Split brain prevention (Quorum) Highly Available: Automatic Failover Primary members are automatically elected Automatic Network Partition handling Read Scaleout Add/Remove members as needed Replication Lag handling with Flow Control Configurable Consistency Levels Eventual Full Consistency -- no stale reads Active/Active environments Write to many members at the same time ordered writes within the group (XCOM) guaranteed consistency Good write performance due to Optimistic Locking (workload dependent) MySQL Group Replication - Use Cases 35 / 49
  71. 71. MySQL InnoDB Cluster - Evolving 36 / 49
  72. 72. MySQL InnoDB Cluster - Hands-on Tutorial! 37 / 49
  73. 73. MySQL InnoDB Cluster - Hands-on Tutorial! 1. Configure MySQL instances for Cluster usage mysql-js> dba.con gureInstance("root@server_1:3306") mysql-js> dba.con gureInstance("root@server_2:3306", {clearReadOnly: true}) mysql-js> dba.con gureInstance("root@server_3:3306", {clearReadOnly: true}) Note: server_1 is the last ReplicaSet Primary, server_2 and server_3 were Secondary and hence R/O 38 / 49
  74. 74. MySQL InnoDB Cluster - Hands-on Tutorial! 1. Configure MySQL instances for Cluster usage mysql-js> dba.con gureInstance("root@server_1:3306") mysql-js> dba.con gureInstance("root@server_2:3306", {clearReadOnly: true}) mysql-js> dba.con gureInstance("root@server_3:3306", {clearReadOnly: true}) Note: server_1 is the last ReplicaSet Primary, server_2 and server_3 were Secondary and hence R/O 2. Create the Cluster: mysql-js> c root@server_1 mysql-js> c = dba.createCluster("cluster") 38 / 49
  75. 75. MySQL InnoDB Cluster - Hands-on Tutorial! 1. Configure MySQL instances for Cluster usage mysql-js> dba.con gureInstance("root@server_1:3306") mysql-js> dba.con gureInstance("root@server_2:3306", {clearReadOnly: true}) mysql-js> dba.con gureInstance("root@server_3:3306", {clearReadOnly: true}) Note: server_1 is the last ReplicaSet Primary, server_2 and server_3 were Secondary and hence R/O 2. Create the Cluster: mysql-js> c root@server_1 mysql-js> c = dba.createCluster("cluster") 3. Add server_2 to the Cluster mysql-js> c.addInstance('server_2') 38 / 49
  76. 76. MySQL InnoDB Cluster - Hands-on Tutorial! 4. Let's purge the binary logs, to force CLONE mysql-js> sql mysql-sql> CREATE DATABASE app; mysql-sql> FLUSH BINARY LOGS; mysql-sql> PURGE BINARY LOGS BEFORE NOW(); mysql-sql> c root@server_2 mysql-sql> FLUSH BINARY LOGS; mysql-sql> PURGE BINARY LOGS BEFORE NOW(); mysql-sql> c root@server_1 mysql-js> js 39 / 49
  77. 77. MySQL InnoDB Cluster - Hands-on Tutorial! 4. Let's purge the binary logs, to force CLONE mysql-js> sql mysql-sql> CREATE DATABASE app; mysql-sql> FLUSH BINARY LOGS; mysql-sql> PURGE BINARY LOGS BEFORE NOW(); mysql-sql> c root@server_2 mysql-sql> FLUSH BINARY LOGS; mysql-sql> PURGE BINARY LOGS BEFORE NOW(); mysql-sql> c root@server_1 mysql-js> js 5. Add server_3 mysql-js> c.addInstance('server_3') Note: binary logs will be missing and CLONE will have to be used to provision server_2 39 / 49
  78. 78. 6. Check Cluster status mysql-js> c.status() MySQL InnoDB Cluster - Hands-on Tutorial! 40 / 49
  79. 79. 6. Check Cluster status mysql-js> c.status() 7. Deploy MySQL Router $ docker-compose up -d --scale router=2 router MySQL InnoDB Cluster - Hands-on Tutorial! 40 / 49
  80. 80. 6. Check Cluster status mysql-js> c.status() 7. Deploy MySQL Router $ docker-compose up -d --scale router=2 router 8. List Routers mysql-js> c.listRouters() MySQL InnoDB Cluster - Hands-on Tutorial! 40 / 49
  81. 81. 6. Check Cluster status mysql-js> c.status() 7. Deploy MySQL Router $ docker-compose up -d --scale router=2 router 8. List Routers mysql-js> c.listRouters() 9. Start the App (if needed) $ docker-compose run app MySQL InnoDB Cluster - Hands-on Tutorial! 40 / 49
  82. 82. 10. Scale-out Router! $ docker-compose up -d --scale router=4 router MySQL InnoDB Cluster - Hands-on Tutorial! 41 / 49
  83. 83. 10. Scale-out Router! $ docker-compose up -d --scale router=4 router 11. Check database-router-rw service status http://localhost:8500 MySQL InnoDB Cluster - Hands-on Tutorial! 41 / 49
  84. 84. 10. Scale-out Router! $ docker-compose up -d --scale router=4 router 11. Check database-router-rw service status http://localhost:8500 12. Scale-down Router again $ docker-compose up -d --scale router=2 router MySQL InnoDB Cluster - Hands-on Tutorial! 41 / 49
  85. 85. DNS-SRV Support in Connectors New in MySQL 8.0.19 Connectors! 42 / 49
  86. 86. MySQL InnoDB Cluster - Hands-on Tutorial! 13. Look at Cluster Options mysql-js> c.options() Note: there are global & server specific options 14. Set Best practices mysql-js> c.setOption("expelTimeout", 5) mysql-js> c.setOption("autoRejoinTries", 3) Best Practices are covered on https://www.slideshare.net/Grypyrg/mysql-innodb-cluster-new-features-in-80-releases-best-practices 43 / 49
  87. 87. 15. Switch primary manually mysql-js> c.setPrimaryInstance("server_3:3306") MySQL InnoDB Cluster - Hands-on Tutorial! 44 / 49
  88. 88. 16. Take down primary instance $ docker-tc post mysqltutorial_server_3_1 loss=100% MySQL InnoDB Cluster - Hands-on Tutorial! 45 / 49
  89. 89. 16. Take down primary instance $ docker-tc post mysqltutorial_server_3_1 loss=100% 17. Check partitioned server logs $ docker logs -f mysqltutorial_server_3_1 MySQL InnoDB Cluster - Hands-on Tutorial! 45 / 49
  90. 90. 16. Take down primary instance $ docker-tc post mysqltutorial_server_3_1 loss=100% 17. Check partitioned server logs $ docker logs -f mysqltutorial_server_3_1 18. Bring primary back $ docker-tc delete mysqltutorial_server_3_1 Note: Instance will automatically rejoin MySQL InnoDB Cluster - Hands-on Tutorial! 45 / 49
  91. 91. 19. Switch to multi-primary mode mysql-js> c.switchToMultiPrimaryMode() Note: App writes will be sent to every cluster member 20. Switch back to single-primary mode mysql-js> c.switchToSinglePrimaryMode() MySQL InnoDB Cluster - Hands-on Tutorial! 46 / 49
  92. 92. What to choose? MySQL InnoDB Cluster or MySQL InnoDB ReplicaSet 47 / 49
  93. 93. Recovery Time Objective (RTO) How fast should the service recover from a failure Recovery Point Objective (RPO) How much data loss can the service lose from a failure Business Requirements 48 / 49
  94. 94. Recovery Time Objective (RTO) How fast should the service recover from a failure Recovery Point Objective (RPO) How much data loss can the service lose from a failure Types of Failures High Availability: Single Server Failure, Network Partition Disaster Recovery: Full Region/Network Failure Human Error: Little Bobby Tables How Much None few seconds minutes hours day ... Business Requirements 48 / 49
  95. 95. MySQL InnoDB Cluster MySQL InnoDB ReplicaSet Which Solution fits me? 49 / 49
  96. 96. MySQL InnoDB Cluster MySQL InnoDB ReplicaSet Single Primary, multiple Secondaries Multi Primary mode (write on all) Single Primary, multiple Secondaries Which Solution fits me? 49 / 49
  97. 97. MySQL InnoDB Cluster MySQL InnoDB ReplicaSet Single Primary, multiple Secondaries Multi Primary mode (write on all) Single Primary, multiple Secondaries Read Scaleout with configurable consistent reads Read Scaleout with stale reads Which Solution fits me? 49 / 49
  98. 98. MySQL InnoDB Cluster MySQL InnoDB ReplicaSet Single Primary, multiple Secondaries Multi Primary mode (write on all) Single Primary, multiple Secondaries Read Scaleout with configurable consistent reads Read Scaleout with stale reads All members partake in consensus (write performance is as fast as it's slowest node) Secondary members only get stream of changes (binlog), does not impact Primary Which Solution fits me? 49 / 49
  99. 99. MySQL InnoDB Cluster MySQL InnoDB ReplicaSet Single Primary, multiple Secondaries Multi Primary mode (write on all) Single Primary, multiple Secondaries Read Scaleout with configurable consistent reads Read Scaleout with stale reads All members partake in consensus (write performance is as fast as it's slowest node) Secondary members only get stream of changes (binlog), does not impact Primary Stable network is required: Network glitches cause stalls/membership changes Uneven amount of members (3-5) No network requirements: glitches in network do not impact availability 2 or more members Which Solution fits me? 49 / 49
  100. 100. MySQL InnoDB Cluster MySQL InnoDB ReplicaSet Single Primary, multiple Secondaries Multi Primary mode (write on all) Single Primary, multiple Secondaries Read Scaleout with configurable consistent reads Read Scaleout with stale reads All members partake in consensus (write performance is as fast as it's slowest node) Secondary members only get stream of changes (binlog), does not impact Primary Stable network is required: Network glitches cause stalls/membership changes Uneven amount of members (3-5) No network requirements: glitches in network do not impact availability 2 or more members No data loss in case of member failure (Recovery Point Objective = 0 (RPO)) Consistency During planned switchover: No data loss, split brain is handled During manual Unplanned failover: up to user Which Solution fits me? 49 / 49
  101. 101. MySQL InnoDB Cluster MySQL InnoDB ReplicaSet Single Primary, multiple Secondaries Multi Primary mode (write on all) Single Primary, multiple Secondaries Read Scaleout with configurable consistent reads Read Scaleout with stale reads All members partake in consensus (write performance is as fast as it's slowest node) Secondary members only get stream of changes (binlog), does not impact Primary Stable network is required: Network glitches cause stalls/membership changes Uneven amount of members (3-5) No network requirements: glitches in network do not impact availability 2 or more members No data loss in case of member failure (Recovery Point Objective = 0 (RPO)) Consistency During planned switchover: No data loss, split brain is handled During manual Unplanned failover: up to user Automatic Failover in case of failure (Easier to achieve a lower Recovery Time Objective (RTO) with stable network/servers) Manual switchover/failover only Which Solution fits me? 49 / 49

×