Hi everyone! It has been some time since the last MySQL Group Replication labs release was out. But the team has not been sitting on its hands. 😉 As such, it is time for a new labs release with new features, bug fixes and improvements across the board. This is an exciting but also complex project that adds many features together. Therefore, there is huge energy and effort going into it. In fact, apart from new functionality a lot of testing has been done in the past few months, which has kept both development and QA working in a very tight loop.
New Functionality
Lets start with the new functionality introduced since the last labs release.
Considerable Performance Enhancements. Several performance related enhancements were done in the Group Replication plugin and in the group communication engine. More efficient usage of system resources, more efficient network bandwidth usage, enhancements to the group communication algorithm and a faster hash for calculating the write set. Regardless, this is a continuous effort, but one is reaching the point where the default tuning of the plugin seems pretty good. Stay tuned for additional information on this topic!
LZ4 Compression Support. Group Replication has now compression support. Members of the group can establish a threshold above which a message is compressed before it is sent to the group. The compression algorithm used is LZ4.
Secure Sockets Layer Support (SSL). MySQL Group Replication now supports SSL sockets. It can be built together with YaSSL and OpenSSL . This means that in addition to supporting SSL for the initial binary log state transfer when joining a group, members of the group can also interact over secure communication channels.
IP Addresses Whitelisting. Servers in the group can now be configured to accept connections only from a specified list of IP addresses or specific hosts. By default if nothing is specified, it accepts connections from hosts that are on private networks, on which the server has an interface configured.
Support for Network Partitioning Handling. Group Replication relies on a group communication engine that implements consensus (in practice a variation of Paxos consensus algorithm). This engine has a notion of dynamic reconfiguration of the servers that actually make up the quorum. Simply put, for reconfigurations to be dynamic, servers also have to agree on configuration changes. This means that the group membership configuration dynamically changes overtime, as long as quorum is reachable. However, if there is a network partition or enough servers crash at once causing quorum to be impossible, then the system will obviously block. MySQL Group Replication has now provision for the DBA to identify such cases and unblock a partition, so that he can resume operations if need be.
Read Only Mode On Errors. If a server in the group leaves it because of an error, it gets automatically into super_read_only mode. Examples of such errors are: (i) recovery failure; (ii) transaction apply procedure failure; (iii) some undefined error in the replication pipeline. Therefore, the DBA will be able to do forensics and at the same time the server will be protected from applications committing something while it is in an error state.
Error Logging Enhancements. Entries in the error log were completely revamped and improved. There are still a few, especially in debug builds, that are there to help developers to trace and recognize issues so that they have a better understanding of problems that need to be fixed. But overall, error log entries are now more “civilized”.
Usability Enhancements. There are usability improvements across the board. For example, several error messages have been made clear. And also, some unsupported settings have been enforced in such a way that execution fails early in the process and protects the user from running into an unrecoverable state.
Quality
Bugs Fixed. QA and Dev teams have been working together with a strong pace and that has managed to identify some problems that have been fixed. In fact, more than 130 bugs were fixed since the last labs release. Given the size of the project and codebase, this is in fact a small number, suggesting that development has been doing a great job. Still quite impressive.
More Stable Group Communication Engine. The group communication engine is now much more stable than in the last labs release. Not 100% great, but it is showing a much better shape on the internal testing.
Multi-platform Support Small Improvements. Since the last labs release, MySQL Group Replication can be deployed in many platforms (Linux, Windows, Solaris, OSX, …) . It supports the same platforms that MySQL 5.7 server supports. This support has also been improved over the past few months.
Noteworthy
Removed Corosync Support. Corosync support was finally removed from the plugin. The plugin now works only with the native MySQL group communication engine. Group communication is based on TCP, supports multiple platforms, and is free of some restrictions that were there with Corosync (which can be totally fine for other use cases, but would not make it a perfect fit for the MySQL Group Replication use case).
Start on Boot by Default. By default, if the plugin is installed and loaded, then it will try to join the group when the server starts.
Conclusion
The show is definitely not over yet. There is still some work and more testing to be done. In the meantime, please feel free to grab the latest and greatest and take it for a spin. You can download it from the usual place. Have fun and let us know what you think! Enjoy!