384 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			384 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# MariaDB MaxScale 2.1.0 Release Notes -- 2017-02-16
 | 
						|
 | 
						|
Release 2.1.0 is a Beta release.
 | 
						|
 | 
						|
This document describes the changes in release 2.1.0, when compared to
 | 
						|
release 2.0.4.
 | 
						|
 | 
						|
For any problems you encounter, please consider submitting a bug
 | 
						|
report at [Jira](https://jira.mariadb.org).
 | 
						|
 | 
						|
## License
 | 
						|
 | 
						|
The license of MaxScale has been changed from MariaDB BSL 1.0 to MariaDB BSL 1.1.
 | 
						|
 | 
						|
For more information about MariaDB BSL 1.1, please refer to
 | 
						|
[MariaDB BSL11](https://www.mariadb.com/bsl11).
 | 
						|
 | 
						|
## Changed Features
 | 
						|
 | 
						|
### `router_options` to Parameters
 | 
						|
 | 
						|
The `router_options` values can also be given as parameters to the service for
 | 
						|
the _readwritesplit_, _schemarouter_ and _binlogrouter_ modules.
 | 
						|
 | 
						|
What this means is that in MaxScale 2.1 the following _readwritesplit_
 | 
						|
configration.
 | 
						|
 | 
						|
```
 | 
						|
[RW Split Router]
 | 
						|
type=service
 | 
						|
router=readwritesplit
 | 
						|
servers=server1
 | 
						|
user=maxuser
 | 
						|
passwd=maxpwd
 | 
						|
router_options=slave_selection_criteria=LEAST_ROUTER_CONNECTIONS,max_sescmd_history=10,disable_sescmd_history=false
 | 
						|
```
 | 
						|
 | 
						|
Can also be written in the following form.
 | 
						|
 | 
						|
```
 | 
						|
[RW Split Router]
 | 
						|
type=service
 | 
						|
router=readwritesplit
 | 
						|
servers=server1
 | 
						|
user=maxuser
 | 
						|
passwd=maxpwd
 | 
						|
slave_selection_criteria=LEAST_ROUTER_CONNECTIONS
 | 
						|
max_sescmd_history=10
 | 
						|
disable_sescmd_history=false
 | 
						|
```
 | 
						|
 | 
						|
### Configuration Files
 | 
						|
 | 
						|
From 2.1.0 onwards MariaDB MaxScale supports hierarchical configuration
 | 
						|
files. When invoked with a configuration file, e.g. `maxscale.cnf`, MariaDB
 | 
						|
MaxScale looks for a directory `maxscale.cnf.d` in the same directory as the
 | 
						|
configuration file, and reads all `.cnf` files it finds in that directory
 | 
						|
hierarchy. All other files will be ignored.
 | 
						|
 | 
						|
Please see the
 | 
						|
[Configuration Guide](../Getting-Started/Configuration-Guide.md#configuration)
 | 
						|
for details.
 | 
						|
 | 
						|
### Readwritesplit `disable_sescmd_history` option
 | 
						|
 | 
						|
The default value for `disable_sescmd_history` is now true. This new default
 | 
						|
value will prevent the excessive memory use of long-lived connections. In
 | 
						|
addition to this, it was not optimal to enable this option while the default
 | 
						|
value for `max_slave_connections` was 100%, effectively making it useless.
 | 
						|
 | 
						|
### Module configurations
 | 
						|
 | 
						|
MaxScale 2.1 introduces a new directory for module configurations. This new
 | 
						|
directory can be used to store module specific configuration files.
 | 
						|
 | 
						|
Any configuration parameter that accepts a path will also support relative
 | 
						|
paths. If a relative path is given, the path is interpreted relative to
 | 
						|
the module configuration directory. The default value is
 | 
						|
_/etc/maxscale.modules.d_.
 | 
						|
 | 
						|
For example, the `dbfwfilter` rule files could be stored in
 | 
						|
_/etc/maxscale.modules.d/my_rules.txt_ and referred to with
 | 
						|
`rules=my_rules.txt`.
 | 
						|
 | 
						|
For more details, refer to the documentation of _module_configdir_ in the
 | 
						|
[Configuration Guide](../Getting-Started/Configuration-Guide.md)
 | 
						|
 | 
						|
### Logging
 | 
						|
 | 
						|
Before version 2.1.0, MaxScale created in the log directory a log file
 | 
						|
maxscaleN.log, where N initially was 1 and then was increased every time
 | 
						|
MaxScale was instructed (by sending the signal SIGUSR1 or via maxadmin)
 | 
						|
to rotate the log file.
 | 
						|
 | 
						|
That has now been changed so that the name of the log file is *always*
 | 
						|
maxscale.log and when MaxScale is instructed to rotate the log file,
 | 
						|
MaxScale simply closes it and then reopens and truncates it.
 | 
						|
 | 
						|
To retain the existing log entries, you should first move the file to
 | 
						|
another name (MaxScale continues writing to it) and then instruct
 | 
						|
MaxScale to rotate the the log file.
 | 
						|
 | 
						|
```
 | 
						|
    $ mv maxscale.log maxscale1.log
 | 
						|
    $ # MaxScale continues to write to maxscale1.log
 | 
						|
    $ kill -SIGUSR1 <maxscale-pid>
 | 
						|
    $ # MaxScale closes the file (i.e. maxscale1.log) and reopens maxscale.log
 | 
						|
```
 | 
						|
 | 
						|
This behaviour is now compatible with logrotate(8).
 | 
						|
 | 
						|
Further, if MaxScale is configured to use shared memory for the log file,
 | 
						|
the file is created into the directory `/dev/shm/maxscale`. Earlier the
 | 
						|
log file was created into the directory `/dev/shm/maxscale.PID`, where PID
 | 
						|
was the pid of the MaxScale process.
 | 
						|
 | 
						|
In addition, there is now a mechanism that prevents the flooding of the log, in
 | 
						|
case the same error occurs over and over again. That mechanism, which is enabled
 | 
						|
by default, is configured using the new global configuration entry `log_throttling`.
 | 
						|
For more information about this configuration entry, please see
 | 
						|
[Global Settings](../Getting-Started/Configuration-Guide.md#global-settings).
 | 
						|
 | 
						|
### Readwritesplit Read Retry
 | 
						|
 | 
						|
In 2.1, Readwritesplit will retry failed SELECT statements that are
 | 
						|
executed outside of transaction and with autocommit enabled. This allows
 | 
						|
seamless slave failover and makes it transparent to the client.
 | 
						|
 | 
						|
Read the [Readwritesplit documentation](../Routers/ReadWriteSplit.md) on
 | 
						|
`retry_failed_reads` for more details.
 | 
						|
 | 
						|
### Persistent Connections
 | 
						|
 | 
						|
Starting with the 2.1 version of MariaDB MaxScale, when a MySQL protocol
 | 
						|
persistent connection is taken from the persistent connection pool, the
 | 
						|
state of the MySQL session will be reset when the the connection is used
 | 
						|
for the first time. This allows persistent connections to be used with no
 | 
						|
functional limitations and makes them behave like normal MySQL
 | 
						|
connections.
 | 
						|
 | 
						|
For more information about persistent connections, please read the
 | 
						|
[Administration Tutorial](../Tutorials/Administration-Tutorial.md).
 | 
						|
 | 
						|
### User data cache
 | 
						|
 | 
						|
The user data cache stores the cached credentials that are used by some router
 | 
						|
modules. In 2.1.0, the authenticator modules are responsible for the persisting
 | 
						|
of the user data cache. Currently, only the MySQLAuth module implements user
 | 
						|
data caching.
 | 
						|
 | 
						|
The user data loaded from the backend databases is now stored on a per listener
 | 
						|
basis instead of a per service basis. In earlier versions, each service had its own
 | 
						|
cache directory in `/var/cache/maxscale`. This directory contains cached user
 | 
						|
data which is used there is no connectivity to the backend cluster.
 | 
						|
 | 
						|
In 2.1.0, each listener has its own sub-directory in the service cache
 | 
						|
directory. The old caches in `/var/cache/maxscale` will need to be manually
 | 
						|
removed if they are no longer used by older versions of MaxScale.
 | 
						|
 | 
						|
### Galeramon Monitoring Algorithm
 | 
						|
 | 
						|
The galeramon monitor will only choose nodes with a _wsrep_local_index_
 | 
						|
value of 0 as the master. This allows multiple MaxScales to always choose
 | 
						|
the same node as the write master node for the cluster. The old behavior
 | 
						|
can be taken into use by disabling the new `root_node_as_master` option.
 | 
						|
 | 
						|
For more details, read the [Galeramon documentation](../Monitors/Galera-Monitor.md).
 | 
						|
 | 
						|
### MaxAdmin editing mode
 | 
						|
 | 
						|
MaxAdmin now defaults to Emacs editing mode instead of VIM. To activate
 | 
						|
with VIM-mode start MaxAdmin with option -i.
 | 
						|
 | 
						|
### Named Server Filter
 | 
						|
The source option can now handle wildcards such as:
 | 
						|
192.168.%.%
 | 
						|
 | 
						|
For more details, read the [Named Server Filter documentation](../Filters/Named-Server-Filter.md).
 | 
						|
 | 
						|
## New Features
 | 
						|
 | 
						|
### Dynamic configuration
 | 
						|
 | 
						|
MaxScale 2.1 supports dynamic configuration of servers, monitors and
 | 
						|
listeners. A set of new commands were added to maxadmin. See output of
 | 
						|
`maxadmin help` and `maxadmin help { create | destroy | alter | add | remove }`
 | 
						|
for more details.
 | 
						|
 | 
						|
#### Dynamic server configuration
 | 
						|
 | 
						|
MaxScale can now change the servers of a service or a monitor at run-time. New
 | 
						|
servers can also be created and they will persisted even after a restart.
 | 
						|
 | 
						|
- `create server`: Creates a new server
 | 
						|
- `destroy server`: Destroys a created server
 | 
						|
- `add server`: Adds a server to a service or a monitor
 | 
						|
- `remove server`: Removes a server from a service or a monitor
 | 
						|
- `alter server`: Alter server configuration
 | 
						|
- `alter monitor`: Alter monitor configuration
 | 
						|
 | 
						|
With these new features, you can start MaxScale without the servers and define
 | 
						|
them later.
 | 
						|
 | 
						|
#### Dynamic listener configuration
 | 
						|
 | 
						|
New listeners for services can be created and destroyed at runtime. This allows
 | 
						|
the services to adapt to changes in client traffic.
 | 
						|
 | 
						|
- `create listener`: Create a new listener
 | 
						|
- `destroy listener`: Destroy a created listener. The listener will stop
 | 
						|
  handling client requests and will be removed after the next restart of
 | 
						|
  MaxScale.
 | 
						|
 | 
						|
In addition to these commands, individual listeners can now be stopped and started.
 | 
						|
 | 
						|
- `shutdown listener`: Stop a listener
 | 
						|
- `restart listener`: Restart a listener
 | 
						|
 | 
						|
#### Dynamic monitor configuration
 | 
						|
 | 
						|
New monitors can be created, modified and destroyed at runtime. This allows new
 | 
						|
clusters to be added into MaxScale by defining new monitors for them. The
 | 
						|
monitor parameters can also be changed at runtime making them more adaptive and
 | 
						|
allowing runtime tuning of parameters.
 | 
						|
 | 
						|
- `create monitor`: Create a new monitor
 | 
						|
- `destroy monitor`: Destroy a created monitor
 | 
						|
- `alter monitor`: Alter monitor parameters
 | 
						|
 | 
						|
### Module commands
 | 
						|
 | 
						|
Introduced in MaxScale 2.1, the module commands are special, module-specific
 | 
						|
commands. They allow the modules to expand beyound the capabilities of the
 | 
						|
module API. Currently, only MaxAdmin implements an interface to the module
 | 
						|
commands.
 | 
						|
 | 
						|
All registered module commands can be shown with `maxadmin list commands` and
 | 
						|
they can be executed with `maxadmin call command <module> <name> ARGS...` where
 | 
						|
_<module>_ is the name of the module and _<name>_ is the name of the
 | 
						|
command. _ARGS_ is a command specific list of arguments.
 | 
						|
 | 
						|
Read [Module Commands](../Reference/Module-Commands.md) documentation for more details.
 | 
						|
 | 
						|
In the 2.1 release of MaxScale, the [_dbfwfilter_}(../Filters/Database-Firewall-Filter.md),
 | 
						|
[_avrorouter_](../Routers/Avrorouter.md), [_cache_](../Filters/Cache.md) and
 | 
						|
[_masking_](../Filters/Masking.md) modules implement module commands.
 | 
						|
 | 
						|
### Amazon RDS Aurora monitor
 | 
						|
 | 
						|
The new [Aurora Monitor](../Monitors/Aurora-Monitor.md) module allows monitoring
 | 
						|
of Aurora clusters. The monitor detects which of the nodes are read replicas and
 | 
						|
which of them is the real write node and assigns the appropriate status for each
 | 
						|
node. This module also supports launchable scripts on monitored events. Read the
 | 
						|
[Monitor Common Documentation](../Monitors/Monitor-Common.md) for more details.
 | 
						|
 | 
						|
### Multi-master mode for MySQL Monitor
 | 
						|
 | 
						|
The MySQL monitor now detects complex multi-master replication
 | 
						|
topologies. This allows the mysqlmon module to be used as a replacement
 | 
						|
for the mmmon module. For more details, please read the
 | 
						|
[MySQL Monitor Documentation](../Monitors/MySQL-Monitor.md).
 | 
						|
 | 
						|
### Failover mode for MySQL Monitor
 | 
						|
 | 
						|
A simple failover mode has been added to the MySQL Monitor. This mode is
 | 
						|
aimed for two node master-slave clusters where the slave can act as a
 | 
						|
master in case the original master fails. For more details, please read
 | 
						|
the [MySQL Monitor Documentation](../Monitors/MySQL-Monitor.md).
 | 
						|
 | 
						|
### Permissive authentication mode for MySQLAuth
 | 
						|
 | 
						|
The MySQL authentication module supports the `skip_authentication` option which
 | 
						|
allows authentication to always succedd in MaxScale. This option offloads the
 | 
						|
actual authentication to the backend server and it can be used to implement a
 | 
						|
secure version of a wildcard user.
 | 
						|
 | 
						|
### Consistent Critical Reads
 | 
						|
 | 
						|
MaxScale 2.1 comes with a new filter module, _ccrfilter_, which allows critical
 | 
						|
reads to be routed to master after inserts. This will make reads after inserts
 | 
						|
consistent while still allowing read scaling.
 | 
						|
 | 
						|
For more information, refer to the [CCRFilter](../Filters/CCRFilter.md)
 | 
						|
documentation.
 | 
						|
 | 
						|
### Database Cache
 | 
						|
 | 
						|
A new filter module, _cache_, allows MaxScale to cache the results of SELECT
 | 
						|
statements. This improves the performance of read-heavy workloads by reducing
 | 
						|
the work the backend databases have to perform.
 | 
						|
 | 
						|
For more information, refer to the [Cache](../Filters/Cache.md) documentation.
 | 
						|
 | 
						|
### Result set masking
 | 
						|
 | 
						|
The new _masking_ filter can mask sensitive information from result sets. This
 | 
						|
is commonly done to hide sensitive information while still allowing the database
 | 
						|
to efficiently process the actual data.
 | 
						|
 | 
						|
For more information, refer to the [Masking](../Filters/Masking.md)
 | 
						|
documentation.
 | 
						|
 | 
						|
### Result set limiting
 | 
						|
 | 
						|
The newly added _maxrows_ filter can restrict the maximum size of a returned
 | 
						|
result set. This can be used to reduce the negative effects of unexpectedly
 | 
						|
large result sets. It can also be used to improve security by preventing access
 | 
						|
to large sets of data with a single query.
 | 
						|
 | 
						|
For more information, refer to the [Maxrows](../Filters/Maxrows.md)
 | 
						|
documentation.
 | 
						|
 | 
						|
### Insert stream filter
 | 
						|
 | 
						|
The _insertstream_ filter converts bulk inserts into CSV data streams that are
 | 
						|
consumed by the backend server via the LOAD DATA LOCAL INFILE mechanism. This
 | 
						|
leverages the speed advantage of LOAD DATA LOCAL INFILE over regular inserts
 | 
						|
while also reducing the overall network traffic by condensing the inserted
 | 
						|
values into CSV.
 | 
						|
 | 
						|
For more information, refer to the [Insert Stream Filter](../Filters/Insert-Stream-Filter.md)
 | 
						|
documentation.
 | 
						|
 | 
						|
### Galeramon Monitor new option
 | 
						|
The `set_donor_nodes` option allows the setting of _global variable_ _wsrep_sst_donor_  with a list the preferred donor nodes (among slave ones).
 | 
						|
 | 
						|
For more details, read the [Galeramon documentation](../Monitors/Galera-Monitor.md).
 | 
						|
 | 
						|
### Binlog Server encrypted binlogs
 | 
						|
The binlog server can optionally encrypt the events received from the master server: the setup requires MariaDB 10.1 master (with Encryption active) and the `mariadb10-compatibility=1` option set.
 | 
						|
 | 
						|
For more details, read the [Binlogrouter documentation](../Routers/Binlogrouter.md).
 | 
						|
 | 
						|
## Bug fixes
 | 
						|
 | 
						|
[Here is a list of bugs fixed since the release of MaxScale 2.0.4.](https://jira.mariadb.org/browse/MXS-951?jql=project%20%3D%20MXS%20AND%20issuetype%20%3D%20Bug%20AND%20resolution%20in%20(Fixed%2C%20Done)%20AND%20fixVersion%20%3D%202.1.0%20AND%20fixVersion%20!%3D%202.0.1%20AND%20fixVersion%20!%3D%202.0.2%20AND%20fixVersion%20!%3D%202.0.3%20AND%20fixVersion%20!%3D%202.0.4)
 | 
						|
 | 
						|
* [MXS-1025](https://jira.mariadb.org/browse/MXS-1025) qc_sqlite always reports " Statement was parsed, but not classified"
 | 
						|
* [MXS-977](https://jira.mariadb.org/browse/MXS-977) MaxAdmin show monitor output missing formatting
 | 
						|
* [MXS-951](https://jira.mariadb.org/browse/MXS-951) Using utf8mb4 on galera hosts stops maxscale connections
 | 
						|
* [MXS-889](https://jira.mariadb.org/browse/MXS-889) "Ungrade Test" Jenkins job fails with CeentOS/RHEL 5 and SLES11
 | 
						|
* [MXS-887](https://jira.mariadb.org/browse/MXS-887) create_env Jenkin job fails
 | 
						|
* [MXS-873](https://jira.mariadb.org/browse/MXS-873) Changing server status via maxadmin is not atomic
 | 
						|
* [MXS-832](https://jira.mariadb.org/browse/MXS-832) Problem with Regex filter as readconnroute doesn't wait for complete packets
 | 
						|
* [MXS-831](https://jira.mariadb.org/browse/MXS-831) new_master event not triggered by galeramon
 | 
						|
* [MXS-828](https://jira.mariadb.org/browse/MXS-828) Remove "Syslog logging is disabled." to stdout when starting without syslog
 | 
						|
* [MXS-825](https://jira.mariadb.org/browse/MXS-825) --execdir option does not work
 | 
						|
* [MXS-805](https://jira.mariadb.org/browse/MXS-805) Server weights don't work with LEAST_BEHIND_MASTER
 | 
						|
* [MXS-804](https://jira.mariadb.org/browse/MXS-804) Grants for user@IP/Netmask doesn't work
 | 
						|
* [MXS-799](https://jira.mariadb.org/browse/MXS-799) fatal signal 11 when socket could not be opened
 | 
						|
* [MXS-769](https://jira.mariadb.org/browse/MXS-769) Malloc return value must be checked.
 | 
						|
* [MXS-711](https://jira.mariadb.org/browse/MXS-711) All service ports use the same user data
 | 
						|
* [MXS-650](https://jira.mariadb.org/browse/MXS-650) Connection attempt w/o SSL to SSL service gives confusing error
 | 
						|
* [MXS-626](https://jira.mariadb.org/browse/MXS-626) Don't log anything to maxlog until it is known whether that is wanted.
 | 
						|
* [MXS-590](https://jira.mariadb.org/browse/MXS-590) MaxScale doesn't log an error when .secrets file is not owned by current user
 | 
						|
* [MXS-586](https://jira.mariadb.org/browse/MXS-586) Tee filter hangs when using range
 | 
						|
* [MXS-576](https://jira.mariadb.org/browse/MXS-576) Maxscale does not generate warning/error if incorrect values is set for persistpoolmax
 | 
						|
* [MXS-397](https://jira.mariadb.org/browse/MXS-397) Unsafe handling of dcb_readqueue
 | 
						|
* [MXS-390](https://jira.mariadb.org/browse/MXS-390) Lack of checks of dynamic memory allocation
 | 
						|
* [MXS-350](https://jira.mariadb.org/browse/MXS-350) Return value of realloc must not be assigned to provided pointer.
 | 
						|
* [MXS-348](https://jira.mariadb.org/browse/MXS-348) Incorrect use of strncat
 | 
						|
* [MXS-253](https://jira.mariadb.org/browse/MXS-253) Use of strncpy is dangerous
 | 
						|
* [MXS-126](https://jira.mariadb.org/browse/MXS-126) debug assert in TEE filter test
 | 
						|
 | 
						|
## Known Issues and Limitations
 | 
						|
 | 
						|
There are some limitations and known issues within this version of MaxScale.
 | 
						|
For more information, please refer to the [Limitations](../About/Limitations.md) document.
 | 
						|
 | 
						|
## Packaging
 | 
						|
 | 
						|
RPM and Debian packages are provided for the Linux distributions supported
 | 
						|
by MariaDB Enterprise.
 | 
						|
 | 
						|
Packages can be downloaded [here](https://mariadb.com/resources/downloads).
 | 
						|
 | 
						|
## Source Code
 | 
						|
 | 
						|
The source code of MaxScale is tagged at GitHub with a tag, which is identical
 | 
						|
with the version of MaxScale. For instance, the tag of version X.Y.Z of MaxScale
 | 
						|
is X.Y.Z. Further, *master* always refers to the latest released non-beta version.
 | 
						|
 | 
						|
The source code is available [here](https://github.com/mariadb-corporation/MaxScale).
 |