As maxadmin is deprecated, it is better to use maxctrl for all commands and remove any references to maxadmin.
		
			
				
	
	
		
			231 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# MariaDB MaxScale Administration Tutorial
 | 
						|
 | 
						|
The purpose of this tutorial is to introduce the MariaDB MaxScale Administrator
 | 
						|
to a few of the common administration tasks. This is intended to be an
 | 
						|
introduction for administrators who are new to MariaDB MaxScale and not a
 | 
						|
reference to all the tasks that may be performed.
 | 
						|
 | 
						|
## Starting and Stopping MariaDB MaxScale
 | 
						|
 | 
						|
### Systemd
 | 
						|
 | 
						|
Most modern operating systems support the Systemd interface.
 | 
						|
 | 
						|
**Starting MaxScale:**
 | 
						|
```
 | 
						|
systemctl start maxscale
 | 
						|
```
 | 
						|
 | 
						|
**Stopping MaxScale:**
 | 
						|
```
 | 
						|
systemctl stop maxscale
 | 
						|
```
 | 
						|
 | 
						|
The MaxScale service file is located in `/lib/systemd/system/maxscale.service`.
 | 
						|
 | 
						|
### SysV
 | 
						|
 | 
						|
Legacy platforms should use the service interface to start MaxScale.
 | 
						|
 | 
						|
**Starting MaxScale:**
 | 
						|
```
 | 
						|
service maxscale start
 | 
						|
```
 | 
						|
 | 
						|
**Stopping MaxScale:**
 | 
						|
```
 | 
						|
service maxscale stop
 | 
						|
```
 | 
						|
 | 
						|
Additional command line arguments can be passed to MariaDB MaxScale with a
 | 
						|
configuration file placed at `/etc/sysconfig/maxscale` on RPM installations and
 | 
						|
`/etc/default/maxscale` file on DEB installations. Set the arguments in a
 | 
						|
variable called `MAXSCALE_OPTIONS` and remember to surround the arguments with
 | 
						|
quotes. The file should only contain environment variable declarations.
 | 
						|
 | 
						|
```
 | 
						|
MAXSCALE_OPTIONS="--logdir=/home/maxscale/logs --piddir=/tmp --syslog=no"
 | 
						|
```
 | 
						|
 | 
						|
Note that this is only supported on legacy SysV systems.
 | 
						|
 | 
						|
## Checking The Status Of The MariaDB MaxScale Services
 | 
						|
 | 
						|
It is possible to use the maxctrl command to obtain statistics about the
 | 
						|
services that are running within MaxScale. The maxctrl command `list services`
 | 
						|
will give very basic information regarding services. This command may be either
 | 
						|
run in interactive mode or passed on the maxctrl command line.
 | 
						|
 | 
						|
```
 | 
						|
$ maxctrl list services
 | 
						|
┌────────────────────────┬────────────────┬─────────────┬───────────────────┬────────────────────────────────────┐
 | 
						|
│ Service                │ Router         │ Connections │ Total Connections │ Servers                            │
 | 
						|
├────────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────┤
 | 
						|
│ CLI                    │ cli            │ 1           │ 1                 │                                    │
 | 
						|
├────────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────┤
 | 
						|
│ RW-Split-Router        │ readwritesplit │ 1           │ 1                 │ server1, server2, server3, server4 │
 | 
						|
├────────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────┤
 | 
						|
│ RW-Split-Hint-Router   │ readwritesplit │ 1           │ 1                 │ server1, server2, server3, server4 │
 | 
						|
├────────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────┤
 | 
						|
│ SchemaRouter-Router    │ schemarouter   │ 1           │ 1                 │ server1, server2, server3, server4 │
 | 
						|
├────────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────┤
 | 
						|
│ Read-Connection-Router │ readconnroute  │ 1           │ 1                 │ server1                            │
 | 
						|
└────────────────────────┴────────────────┴─────────────┴───────────────────┴────────────────────────────────────┘
 | 
						|
 | 
						|
```
 | 
						|
 | 
						|
Network listeners count as a user of the service, therefore there will always be
 | 
						|
one user per network port in which the service listens. More details can be
 | 
						|
obtained by using the "show service" command.
 | 
						|
 | 
						|
## Persistent Connections
 | 
						|
 | 
						|
When clients who are accessing a database system through MariaDB MaxScale make
 | 
						|
frequent short connections, there may be a benefit in using persistent
 | 
						|
connections. This feature is controlled by two configuration values that are
 | 
						|
specified per server in the relevant server section of the configuration file.
 | 
						|
The configuration options are `persistpoolmax` and `persistmaxtime`.
 | 
						|
 | 
						|
Normally, when a client connection is terminated, all the related back end
 | 
						|
database connections are also terminated. If the `persistpoolmax` options is set
 | 
						|
to a non-zero integer, then up to that number of connections will be kept in a
 | 
						|
pool for that server. When a new connection is requested by the system to handle
 | 
						|
a client session, then a connection from the pool will be used if possible.
 | 
						|
 | 
						|
The connection will only be taken from the pool if it has been there for no more
 | 
						|
than `persistmaxtime` seconds. The connection will also be discarded if it has
 | 
						|
been disconnected by the back end server. Connections will be selected so that
 | 
						|
they match the user name and protocol for the new request.
 | 
						|
 | 
						|
Starting with MaxScale 2.1, when a MySQL protocol connection is taken from the
 | 
						|
pool, the backend protocol module resets the session state. This allows
 | 
						|
persistent connections to be used with no functional limitations.
 | 
						|
 | 
						|
The session state is reset when the first outgoing network transmission is done.
 | 
						|
This _lazy initialization_ of the persistent connections allows MaxScale to take
 | 
						|
multiple new connections into use but only initialize the ones that it actually
 | 
						|
needs.
 | 
						|
 | 
						|
**Please note** that in versions before 2.1 the persistent connections may give
 | 
						|
a different environment when compared to a fresh connection. For example, if the
 | 
						|
previous use of the connection issued a "USE mydatabase;" statement then this
 | 
						|
setting will be carried over into the reuse of the same connection. For many
 | 
						|
applications this will not be noticeable, since each request will assume that
 | 
						|
nothing has been set and will issue fresh requests such as "USE" to establish
 | 
						|
the desired configuration. In exceptional cases this feature could be a problem.
 | 
						|
 | 
						|
It is possible to have pools for as many servers as you wish, with configuration
 | 
						|
values in each server section.
 | 
						|
 | 
						|
## What Clients Are Connected To MariaDB MaxScale
 | 
						|
 | 
						|
To determine what client are currently connected to MariaDB MaxScale, you can
 | 
						|
use the `list sessions` command within maxctrl. This will give you IP address
 | 
						|
and the ID of the session for that connection. As with any maxctrl
 | 
						|
command this can be passed on the command line or typed interactively in
 | 
						|
maxctrl.
 | 
						|
 | 
						|
```
 | 
						|
$ maxctrl list sessions
 | 
						|
┌────┬─────────┬──────────────────┬──────────────────────────┬──────┬─────────────────┐
 | 
						|
│ Id │ User    │ Host             │ Connected                │ Idle │ Service         │
 | 
						|
├────┼─────────┼──────────────────┼──────────────────────────┼──────┼─────────────────┤
 | 
						|
│ 6  │ maxuser │ ::ffff:127.0.0.1 │ Thu Aug 27 10:39:16 2020 │ 4    │ RW-Split-Router │
 | 
						|
└────┴─────────┴──────────────────┴──────────────────────────┴──────┴─────────────────┘
 | 
						|
```
 | 
						|
 | 
						|
## Rotating the Log File
 | 
						|
 | 
						|
MariaDB MaxScale logs messages of different priority into a single log file.
 | 
						|
With the exception if error messages that are always logged, whether messages of
 | 
						|
a particular priority should be logged or not can be enabled via the maxctrl
 | 
						|
interface or in the configuration file. By default, MaxScale keeps on writing to
 | 
						|
the same log file. To prevent the file from growing indefinitely, the
 | 
						|
administrator must take action.
 | 
						|
 | 
						|
The name of the log file is maxscale.log. When the log is rotated, MaxScale
 | 
						|
closes the current log file and opens a new one using the same name.
 | 
						|
 | 
						|
Log file rotation is achieved by use of the `rotate logs` command
 | 
						|
in maxctrl.
 | 
						|
 | 
						|
```
 | 
						|
maxctrl rotate logs
 | 
						|
```
 | 
						|
 | 
						|
As there currently is only the maxscale log, that is the only one that will be
 | 
						|
rotated.
 | 
						|
 | 
						|
This may be integrated into the Linux _logrotate_ mechanism by adding a
 | 
						|
configuration file to the /etc/logrotate.d directory. If we assume we want to
 | 
						|
rotate the log files once per month and wish to keep 5 log files worth of
 | 
						|
history, the configuration file would look as follows.
 | 
						|
 | 
						|
```
 | 
						|
/var/log/maxscale/maxscale.log {
 | 
						|
monthly
 | 
						|
rotate 5
 | 
						|
missingok
 | 
						|
nocompress
 | 
						|
sharedscripts
 | 
						|
postrotate
 | 
						|
\# run if maxscale is running
 | 
						|
if test -n "`ps acx|grep maxscale`"; then
 | 
						|
/usr/bin/maxctrl rotate logs
 | 
						|
fi
 | 
						|
endscript
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
MariaDB MaxScale will also rotate all of its log files if it receives the USR1
 | 
						|
signal. Using this the logrotate configuration script can be rewritten as
 | 
						|
 | 
						|
```
 | 
						|
/var/log/maxscale/maxscale.log {
 | 
						|
monthly
 | 
						|
rotate 5
 | 
						|
missingok
 | 
						|
nocompress
 | 
						|
sharedscripts
 | 
						|
postrotate
 | 
						|
kill -USR1 `cat /var/run/maxscale/maxscale.pid`
 | 
						|
endscript
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
In older versions MaxScale renamed the log file, behavior which is not fully
 | 
						|
compliant with the assumptions of logrotate and may lead to issues, depending on
 | 
						|
the used logrotate configuration file. From version 2.1 onward, MaxScale will
 | 
						|
not itself rename the log file, but when the log is rotated, MaxScale will
 | 
						|
simply close and reopen (and truncate) the same log file. That will make the
 | 
						|
behavior fully compliant with logrotate.
 | 
						|
 | 
						|
## Taking A Database Server Out Of Use
 | 
						|
 | 
						|
MariaDB MaxScale supports the concept of maintenance mode for servers within a
 | 
						|
cluster, this allows for planned, temporary removal of a database from the
 | 
						|
cluster within the need to change the MariaDB MaxScale configuration.
 | 
						|
 | 
						|
To achieve the removal of a database server you can use the `set server` command
 | 
						|
in maxctrl to set the maintenance mode flag for the server. This
 | 
						|
may be done interactively within maxctrl or by passing the command on the
 | 
						|
command line.
 | 
						|
 | 
						|
```
 | 
						|
maxctrl set server dbserver3 maintenance
 | 
						|
```
 | 
						|
 | 
						|
This will cause MariaDB MaxScale to stop routing any new requests to the server,
 | 
						|
however if there are currently requests executing on the server these will not
 | 
						|
be interrupted.
 | 
						|
 | 
						|
To bring the server back into service use the "clear server" command to clear
 | 
						|
the maintenance mode bit for that server.
 | 
						|
 | 
						|
```
 | 
						|
sudo maxctrl clear server dbserver3 maintenance
 | 
						|
```
 | 
						|
 | 
						|
If multiple MariaDB MaxScale instances are configured to use the node
 | 
						|
them maintenance mode must be set within each MariaDB MaxScale instance.
 |