 3f62ea2c41
			
		
	
	3f62ea2c41
	
	
	
		
			
			This is mostly about MaxAdmin file load removal. Also added a note on NamedServerFilter and MaxAdmin editing mode changes.
		
			
				
	
	
		
			1595 lines
		
	
	
		
			60 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			1595 lines
		
	
	
		
			60 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # MaxAdmin - Admin Interface
 | |
| 
 | |
| # The Maxscale Administrative & Monitoring Client Application
 | |
| 
 | |
|  - [Overview](#overview)
 | |
|  - [Configuring MariaDB MaxScale for MaxAdmin](#configuring-mariadb-maxscale-for-maxadmin)
 | |
|  - [Running MaxAdmin](#running-maxadmin)
 | |
|  - [Working With Administration Interface Users](#working-with-administration-interface-users)
 | |
|  - [Getting Help](#getting-help)
 | |
|  - [Working with Services](#working-with-services)
 | |
|  - [Working with Servers](#working-with-servers)
 | |
|  - [Working with Sessions](#working-with-sessions)
 | |
|  - [Descriptor Control Blocks](#descriptor-control-blocks)
 | |
|  - [Working with Filters](#working-with-filters)
 | |
|  - [Working with Monitors](#working-with-monitors)
 | |
|  - [MariaDB MaxScale Status Commands](#maxscale-status-commands)
 | |
|  - [Administration Commands](#administration-commands)
 | |
|  - [Runtime Configuration Changes](#runtime-configuration-changes)
 | |
|    - [Servers](#servers)
 | |
|    - [Listeners](#listeners)
 | |
|    - [Monitors](#monitors)
 | |
|  - [Tuning MariaDB MaxScale](#tuning-mariadb-maxscale)
 | |
| 
 | |
| # Overview
 | |
| 
 | |
| MaxAdmin is a simple client interface that can be used to interact with the
 | |
| MariaDB MaxScale server, it allows the display of internal MariaDB MaxScale
 | |
| statistics, status and control of MariaDB MaxScale operations.
 | |
| 
 | |
| MaxAdmin supports
 | |
| 
 | |
| * Interactive user sessions
 | |
| 
 | |
| * Execution of one-off commands via command line arguments
 | |
| 
 | |
| * Execution of command scripts
 | |
| 
 | |
| # Configuring MariaDB MaxScale for MaxAdmin
 | |
| 
 | |
| In order to be able to use MaxAdmin, MariaDB MaxScale must be configured for it.
 | |
| 
 | |
| There are two ways MaxAdmin can connect to to MaxScale.
 | |
| 
 | |
| * Using a Unix domain socket.
 | |
| * Using a hostname and port.
 | |
| 
 | |
| The first alternative is introduced in MaxScale 2.0 and is the secure and
 | |
| recommended way. The second alternative is available for backward compatibility,
 | |
| but is _insecure_ and **deprecated** and _will be removed in a future version of
 | |
| MaxScale_.
 | |
| 
 | |
| An example configuration looks as follows:
 | |
| 
 | |
| ```
 | |
| [MaxAdmin]
 | |
| type=service
 | |
| router=cli
 | |
| 
 | |
| [MaxAdmin Unix Listener]
 | |
| type=listener
 | |
| service=MaxAdmin
 | |
| protocol=maxscaled
 | |
| socket=default
 | |
| 
 | |
| [MaxAdmin Inet Listener]
 | |
| type=listener
 | |
| service=MaxAdmin
 | |
| protocol=maxscaled
 | |
| address=localhost
 | |
| port=6603
 | |
| ```
 | |
| 
 | |
| In the configuration above, two listeners are created; one listening on the
 | |
| default Unix domain socket and one listening on the default port.
 | |
| 
 | |
| Which approach is used has other implications than just how the communication
 | |
| between MaxAdmin and MariaDB MaxScale is handled. In the former case, the
 | |
| authorization is based upon the Linux identity and in the latter case on
 | |
| explicitly created user accounts that have **no** relationship to the Linux
 | |
| accounts.
 | |
| 
 | |
| Note that if the socket path or port are changed, then MaxAdmin has to be
 | |
| invoked with `-S` or `-P` respectively.
 | |
| 
 | |
| # Running MaxAdmin
 | |
| 
 | |
| Depending on whether MariaDB MaxScale has been configured to use Unix domain
 | |
| sockets or internet sockets, MaxAdmin needs to be invoked slightly differently.
 | |
| 
 | |
| If Unix domain sockets are used, then MaxAdmin needs no additional arguments:
 | |
| 
 | |
| ```
 | |
| alice@host$ maxadmin
 | |
| MaxAdmin>
 | |
| ```
 | |
| 
 | |
| The above implies that the Linux user _alice_ has been enabled to use MaxAdmin.
 | |
| 
 | |
| If internet sockets are used, then either the host, port, user or password has
 | |
| to be specified explicitly:
 | |
| 
 | |
| ```
 | |
| alice@host$ maxadmin -u maxscale-admin
 | |
| Password:
 | |
| MaxScale>
 | |
| ```
 | |
| When internet sockets are enabled, initially it is possible to connect using
 | |
| the username `admin` and the password `mariadb`. These remain in effect as long
 | |
| as no other users have been created. As soon as the first user is added, the use
 | |
| of `admin/mariadb` as login credentials is disabled.
 | |
| 
 | |
| If Unix domain sockets are used, then initially only `root` has access. MaxAdmin
 | |
| usage can subsequently be enabled for other Linux users.
 | |
| 
 | |
| The MaxAdmin client application may be run in two different modes, either as an
 | |
| interactive command shell for executing commands against MariaDB MaxScale or by
 | |
| passing commands on the MaxAdmin command line itself.
 | |
| 
 | |
| # Working With Administration Interface Users
 | |
| 
 | |
| ## What Users Have Been Defined?
 | |
| 
 | |
| In order to see the Linux users for whom MaxAdmin usage has been enabled and any
 | |
| explicitly created accounts, use the command _show users_.
 | |
| 
 | |
| ```
 | |
| MaxScale> show users
 | |
| Enabled Linux accounts (secure)    : alice, bob, cecil
 | |
| Created network accounts (insecure): maxscale-admin
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| Please note that `root` will not be shown.
 | |
| 
 | |
| ## Enabling a Linux account
 | |
| 
 | |
| To enable MaxAdmin usage for a particular Linux account, use the command _enable
 | |
| account_.  This command is passed a user name, which should be the same as that
 | |
| of an existing Linux user.
 | |
| 
 | |
| ```
 | |
| MaxScale> enable account bob
 | |
| ```
 | |
| 
 | |
| Note that it is not checked that the provided name indeed corresponds to an
 | |
| existing Linux account, so it is possible to enable an account that does not
 | |
| exist yet.
 | |
| 
 | |
| Note also that it is possible to enable a Linux account irrespective of how
 | |
| MaxAdmin has connected to MariaDB MaxScale. That is, the command is not
 | |
| restricted to MaxAdmin users connecting over a Unix domain socket.
 | |
| 
 | |
| ## Disabling a Linux account
 | |
| 
 | |
| To disable MaxAdmin usage for a particular Linux account, use the command
 | |
| _disable account_.  This command is passed a user name, which should be a Linux
 | |
| user for whom MaxAdmin usage earlier has been enabled.
 | |
| 
 | |
| ```
 | |
| MaxScale> disable account bob
 | |
| ```
 | |
| 
 | |
| Note also that it is possible to disable a Linux account irrespective of how
 | |
| MaxAdmin has connected to MariaDB MaxScale. That is, the command is not
 | |
| restricted to MaxAdmin users connecting over a Unix domain socket.
 | |
| 
 | |
| Note that it is possible to disable the current user, but that will only affect
 | |
| the next attempt to use MaxAdmin. `root` cannot be removed.
 | |
| 
 | |
| ## Add A New User
 | |
| 
 | |
| To add a new MaxAdmin user to be used when MaxAdmin connects over an internet
 | |
| socket, use the command _add user_. This command is passed a user name and a
 | |
| password.
 | |
| 
 | |
| ```
 | |
| MaxScale> add user maxscale-admin secretpwd
 | |
| User maxscale-admin has been successfully added.
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| Note that there is no difference in rights between an enabled Linux account and
 | |
| an explicitly created user.
 | |
| 
 | |
| ## Delete A User
 | |
| 
 | |
| To remove a user the command _remove user_ is used and it is invoked with the
 | |
| username and password.
 | |
| 
 | |
| ```
 | |
| MaxScale> remove user maxscale-admin secretpwd
 | |
| User maxscale-admin has been successfully removed.
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| Note that it is possible to remove the current user, but that will only affect
 | |
| the next attempt to use MaxAdmin.
 | |
| 
 | |
| # Command Line Switches
 | |
| 
 | |
| The MaxAdmin command accepts a number of options. See the output of
 | |
| `maxadmin --help` for more details.
 | |
| 
 | |
| ## Interactive Operation
 | |
| 
 | |
| If no arguments other than the command line switches are passed to MaxAdmin it
 | |
| will enter its interactive mode of operation. Users will be prompted to enter
 | |
| commands with a **MaxScale>** prompt. The commands themselves are documented in
 | |
| the sections later in this document. A help system is available that will give
 | |
| some minimal details of the commands available.
 | |
| 
 | |
| Command history is available on platforms that support the libedit library. This
 | |
| allows the use of the up and down arrow keys to recall previous commands that
 | |
| have been executed by MaxAdmin. The default edit mode for the history is to
 | |
| emulate *emacs* commands, the behavior of libedit may however be customized using
 | |
| the .editrc file. To obtain the history of commands that have been executed use
 | |
| the inbuilt history command.
 | |
| 
 | |
| In interactive mode it is possible to execute a set of commands stored in an
 | |
| external file by using the source command. The command takes the argument of a
 | |
| filename which should contain a set of MariaDB MaxScale commands, one per
 | |
| line. These will be executed in the order they appear in the file.
 | |
| 
 | |
| ## Command Line Operation
 | |
| 
 | |
| MaxAdmin can also be used to execute commands that are passed on the command
 | |
| line, e.g.
 | |
| 
 | |
| ```
 | |
| -bash-4.1$ maxadmin -S /tmp/maxadmin.sock list services
 | |
| Password:
 | |
| Services.
 | |
| --------------------------+----------------------+--------+---------------
 | |
| Service Name              | Router Module        | #Users | Total Sessions
 | |
| --------------------------+----------------------+--------+---------------
 | |
| Test Service              | readconnroute        |      1 |     1
 | |
| Split Service             | readwritesplit       |      1 |     1
 | |
| Filter Service            | readconnroute        |      1 |     1
 | |
| QLA Service               | readconnroute        |      1 |     1
 | |
| Debug Service             | debugcli             |      1 |     1
 | |
| CLI                       | cli                  |      2 |    27
 | |
| --------------------------+----------------------+--------+---------------
 | |
| -bash-4.1$
 | |
| ```
 | |
| 
 | |
| The single command is executed and MaxAdmin then terminates. If the -p option is
 | |
| not given then MaxAdmin will prompt for a password. If a MariaDB MaxScale
 | |
| command requires an argument which contains whitespace, for example a service
 | |
| name, that name should be quoted. The quotes will be preserved and used in the
 | |
| execution of the MariaDB MaxScale command.
 | |
| 
 | |
| ```
 | |
| -bash-4.1$ maxadmin show service "QLA Service"
 | |
|     Password:
 | |
|     Service 0x70c6a0
 | |
|             Service:                QLA Service
 | |
|             Router:                 readconnroute (0x7ffff0f7ae60)
 | |
|             Number of router sessions:      0
 | |
|             Current no. of router sessions: 0
 | |
|             Number of queries forwarded:    0
 | |
|             Started:                Wed Jun 25 10:08:23 2014
 | |
|             Backend databases
 | |
|                     127.0.0.1:3309  Protocol: MySQLBackend
 | |
|                     127.0.0.1:3308  Protocol: MySQLBackend
 | |
|                     127.0.0.1:3307  Protocol: MySQLBackend
 | |
|                     127.0.0.1:3306  Protocol: MySQLBackend
 | |
|             Users data:             0x724340
 | |
|             Total connections:      1
 | |
|             Currently connected:    1
 | |
|     -bash-4.1$
 | |
| ```
 | |
| 
 | |
| Command files may be executed by redirecting them to MaxAdmin.
 | |
| 
 | |
| ```
 | |
| maxadmin < listall.ms
 | |
| ```
 | |
| 
 | |
| Another option is to use the #! mechanism to make the command file executable
 | |
| from the shell. To do this add a line at the start of your command file that
 | |
| contains the #! directive with the path of the MaxAdmin executable. Command
 | |
| options may also be given in this line. For example to create a script file that
 | |
| runs a set of list commands
 | |
| 
 | |
| ```
 | |
| #!/usr/bin/maxadmin
 | |
| list modules
 | |
| list servers
 | |
| list services
 | |
| list listeners
 | |
| list dcbs
 | |
| list sessions
 | |
| list filters
 | |
| ```
 | |
| 
 | |
| Then simply set this file to have execute permissions and it may be run like any
 | |
| other command in the Linux shell.
 | |
| 
 | |
| ## The .maxadmin file
 | |
| 
 | |
| MaxAdmin supports a mechanism to set defaults for the command line switches via
 | |
| a file in the home directory of the user. If a file named `.maxadmin` exists, it
 | |
| will be read and parameters set according to the entries in that file.
 | |
| 
 | |
| This mechanism can be used to provide defaults to the command line options. If a
 | |
| command line option is provided, it will still override the value in the
 | |
| `.maxadmin` file.
 | |
| 
 | |
| The parameters than can be set are:
 | |
|    * `1.4`: _hostname_, _port_, _user_ and _passwd_
 | |
|    * `2.0.0` and `2.0.1`: _socket_
 | |
|    * `2.0.2` onwards: _socket_, _hostname_, _port_, _user_ and _passwd_ (and as synonym _password_)
 | |
| 
 | |
| An example of a `.maxadmin` file that will alter the default socket path is:
 | |
| 
 | |
| ```
 | |
| socket=/somepath/maxadmin.socket
 | |
| ```
 | |
| 
 | |
| Note that if in `2.0.2` or later, a value for _socket_ as well as any of the
 | |
| internet socket related options, such as _hostname_, is provided in `.maxadmin`,
 | |
| then _socket_ takes precedence. In that case, provide at least one internet
 | |
| socket related option on the command line to force MaxAdmin to use an internet
 | |
| socket and thus the internet socket related options from `.maxadmin`.
 | |
| 
 | |
| The `.maxadmin` file may be made read only to protect any passwords written to
 | |
| that file.
 | |
| 
 | |
| # Getting Help
 | |
| 
 | |
| A help system is available that describes the commands available via the
 | |
| administration interface. To obtain a list of all commands available simply type
 | |
| the command help.
 | |
| 
 | |
| ```
 | |
| MaxScale> help
 | |
| Available commands:
 | |
|     add [user|server]
 | |
|     remove [user|server]
 | |
|     create [server|listener|monitor]
 | |
|     destroy [server|listener|monitor]
 | |
|     alter [server|monitor]
 | |
|     set [server|pollsleep|nbpolls|log_throttling]
 | |
|     clear server
 | |
|     disable [heartbeat|log|log-priority|sessionlog|sessionlog-priority|root|feedback|syslog|maxlog|account]
 | |
|     enable [heartbeat|log|log-priority|sessionlog|sessionlog-priority|root|feedback|syslog|maxlog|account]
 | |
|     flush [log|logs]
 | |
|     list [clients|dcbs|filters|listeners|modules|monitors|services|servers|sessions|threads|commands]
 | |
|     reload [config|dbusers]
 | |
|     restart [monitor|service|listener]
 | |
|     shutdown [maxscale|monitor|service|listener]
 | |
|     show [dcblist|dcbs|dcb|dbusers|epoll|eventq|eventstats|feedbackreport|filter|filters|log_throttling|modules|monitor|monitors|persistent|server|servers|serversjson|services|service|session|sessionlist|sessions|tasks|threads|users]
 | |
|     sync logs
 | |
|     call command
 | |
| 
 | |
| Type help command to see details of each command.  Where commands require names
 | |
| as arguments and these names contain whitespace either the \ character may be
 | |
| used to escape the whitespace or the name may be enclosed in double quotes ".
 | |
| 
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| To see more details on a particular command, and a list of the sub commands of
 | |
| the command, type help followed by the command name.
 | |
| 
 | |
| ```
 | |
| MaxScale> help list
 | |
| Available options to the list command:
 | |
| 'clients' - List all clients
 | |
| 
 | |
| List all the client connections to MaxScale
 | |
| 
 | |
| 'dcbs' - List all DCBs
 | |
| 
 | |
| List all the DCBs active within MaxScale
 | |
| 
 | |
| 'filters' - List all filters
 | |
| 
 | |
| List all the filters defined within MaxScale
 | |
| 
 | |
| 'listeners' - List all listeners
 | |
| 
 | |
| List all the listeners defined within MaxScale
 | |
| 
 | |
| 'modules' - List all currently loaded modules
 | |
| 
 | |
| List all currently loaded modules
 | |
| 
 | |
| 'monitors' - List all monitors
 | |
| 
 | |
| List all monitors
 | |
| 
 | |
| 'services' - List all the services
 | |
| 
 | |
| List all the services defined within MaxScale
 | |
| 
 | |
| 'servers' - List all servers
 | |
| 
 | |
| List all the servers defined within MaxScale
 | |
| 
 | |
| 'sessions' - List all sessions
 | |
| 
 | |
| List all the active sessions within MaxScale
 | |
| 
 | |
| 'threads' - List polling threads
 | |
| 
 | |
| List the status of the polling threads in MaxScale
 | |
| 
 | |
| 'commands' - List registered commands
 | |
| 
 | |
| Usage list commands [MODULE] [COMMAND]
 | |
| Parameters:
 | |
| MODULE  Regular expressions for filtering module names
 | |
| COMMAND Regular expressions for filtering module command names
 | |
| 
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| # Working With Services
 | |
| 
 | |
| A service is a very important concept in MariaDB MaxScale as it defines the
 | |
| mechanism by which clients interact with MariaDB MaxScale and can attached to
 | |
| the backend databases. A number of commands exist that allow interaction with
 | |
| the services.
 | |
| 
 | |
| ## What Services Are Available?
 | |
| 
 | |
| The _list services_ command can be used to discover what services are currently
 | |
| available within your MariaDB MaxScale configuration.
 | |
| 
 | |
| ```
 | |
| MaxScale> list services
 | |
| Services.
 | |
| --------------------------+----------------------+--------+---------------
 | |
| Service Name              | Router Module        | #Users | Total Sessions
 | |
| --------------------------+----------------------+--------+---------------
 | |
| Test Service              | readconnroute        |      1 |     1
 | |
| Split Service             | readwritesplit       |      1 |     1
 | |
| Filter Service            | readconnroute        |      1 |     1
 | |
| QLA Service               | readconnroute        |      1 |     1
 | |
| Debug Service             | debugcli             |      1 |     1
 | |
| CLI                       | cli                  |      2 |    24
 | |
| --------------------------+----------------------+--------+---------------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| In order to determine which ports services are using then the _list listeners_
 | |
| command can be used.
 | |
| 
 | |
| ```
 | |
| MaxScale> list listeners
 | |
| Listeners.
 | |
| ---------------------+--------------------+-----------------+-------+--------
 | |
| Service Name         | Protocol Module    | Address         | Port  | State
 | |
| ---------------------+--------------------+-----------------+-------+--------
 | |
| Test Service         | MySQLClient        | *               |  4006 | Running
 | |
| Split Service        | MySQLClient        | *               |  4007 | Running
 | |
| Filter Service       | MySQLClient        | *               |  4008 | Running
 | |
| QLA Service          | MySQLClient        | *               |  4009 | Running
 | |
| Debug Service        | telnetd            | localhost       |  4242 | Running
 | |
| CLI                  | maxscaled          | localhost       |  6603 | Running
 | |
| ---------------------+--------------------+-----------------+-------+--------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## See Service Details
 | |
| 
 | |
| It is possible to see the details of an individual service using the _show
 | |
| service_ command. This command should be passed the name of the service you wish
 | |
| to examine as an argument. Where a service name contains spaces characters there
 | |
| should either be escaped or the name placed in quotes.
 | |
| 
 | |
| ```
 | |
| MaxScale> show service "QLA Service"
 | |
| Service 0x70c6a0
 | |
|     Service:                                QLA Service
 | |
|     Router:                         readconnroute (0x7ffff0f7ae60)
 | |
|     Number of router sessions:      0
 | |
|     Current no. of router sessions: 0
 | |
|     Number of queries forwarded:    0
 | |
|     Started:                                Wed Jun 25 10:08:23 2014
 | |
|     Backend databases
 | |
|             127.0.0.1:3309  Protocol: MySQLBackend
 | |
|             127.0.0.1:3308  Protocol: MySQLBackend
 | |
|             127.0.0.1:3307  Protocol: MySQLBackend
 | |
|             127.0.0.1:3306  Protocol: MySQLBackend
 | |
|     Users data:                             0x724340
 | |
|     Total connections:                      1
 | |
|     Currently connected:                    1
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| This allows the set of backend servers defined by the service to be seen along
 | |
| with the service statistics and other information.
 | |
| 
 | |
| ## Examining Service Users
 | |
| 
 | |
| MariaDB MaxScale provides an authentication model by which the client
 | |
| application authenticates with MariaDB MaxScale using the credentials they would
 | |
| normally use to with the database itself. MariaDB MaxScale loads the user data
 | |
| from one of the backend databases defined for the service. The _show dbusers_
 | |
| command can be used to examine the user data held by MariaDB MaxScale.
 | |
| 
 | |
| ```
 | |
| MaxScale> show dbusers "Filter Service"
 | |
| User names: pappo@%, rana@%, new_control@%, new_nuovo@%, uno@192.168.56.1, nuovo@192.168.56.1, pesce@%, tryme@192.168.1.199, repluser@%, seven@%, due@%, pippo@%, mmm@%, daka@127.0.0.1, timour@%, ivan@%, prova@%, changeme@127.0.0.1, uno@%, massimiliano@127.0.0.1, massim@127.0.0.1, massi@127.0.0.1, masssi@127.0.0.1, pappo@127.0.0.1, rana@127.0.0.1, newadded@127.0.0.1, newaded@127.0.0.1, pesce@127.0.0.1, repluser@127.0.0.1, seven@127.0.0.1, pippo@127.0.0.1, due@127.0.0.1, nopwd@127.0.0.1, timour@127.0.0.1, controlla@192.168.56.1, ivan@127.0.0.1, ppp@127.0.0.1, daka@%, nuovo@127.0.0.1, uno@127.0.0.1, repluser@192.168.56.1, havoc@%, tekka@192.168.1.19, due@192.168.56.1, qwerty@127.0.0.1, massimiliano@%, massi@%, massim@%
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Reloading Service User Data
 | |
| 
 | |
| MariaDB MaxScale will automatically reload user data if there are failed
 | |
| authentication requests from client applications. This reloading is rate limited
 | |
| and triggered by missing entries in the MariaDB MaxScale table. If a user is
 | |
| removed from the backend database user table it will not trigger removal from
 | |
| the MariaDB MaxScale internal table. The reload dbusers command can be used to
 | |
| force the reloading of the user table within MariaDB MaxScale.
 | |
| 
 | |
| ```
 | |
| MaxScale> reload dbusers "Split Service"
 | |
| Loaded 34 database users for service Split Service.
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Stopping A Service
 | |
| 
 | |
| It is possible to stop a service from accepting new connections by using the
 | |
| _shutdown service_ command. This will not affect the connections that are
 | |
| already in place for a service, but will stop any new connections from being
 | |
| accepted.
 | |
| 
 | |
| ```
 | |
| MaxScale> shutdown service "Split Service"
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Restart A Stopped Service
 | |
| 
 | |
| A stopped service may be restarted by using the _restart service_ command.
 | |
| 
 | |
| ```
 | |
| MaxScale> restart service "Split Service"
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| # Working With Servers
 | |
| 
 | |
| The server represents each of the instances of MySQL or MariaDB that a service
 | |
| may use.
 | |
| 
 | |
| ## What Servers Are Configured?
 | |
| 
 | |
| The command _list servers_ can be used to display a list of all the servers
 | |
| configured within MariaDB MaxScale.
 | |
| 
 | |
| ```
 | |
| MaxScale> list servers
 | |
| Servers.
 | |
| -------------------+-----------------+-------+----------------------+------------
 | |
| Server             | Address         | Port  | Status               | Connections
 | |
| -------------------+-----------------+-------+----------------------+------------
 | |
| server1            | 127.0.0.1       |  3306 | Running              |    0
 | |
| server2            | 127.0.0.1       |  3307 | Master, Running      |    0
 | |
| server3            | 127.0.0.1       |  3308 | Running              |    0
 | |
| server4            | 127.0.0.1       |  3309 | Slave, Running       |    0
 | |
| -------------------+-----------------+-------+----------------------+------------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Server Details
 | |
| 
 | |
| It is possible to see more details regarding a given server using the _show
 | |
| server_ command.
 | |
| 
 | |
| ```
 | |
| MaxScale> show server server2
 | |
| Server 0x70d460 (server2)
 | |
|     Server:                         127.0.0.1
 | |
|     Status:                         Master, Running
 | |
|     Protocol:                       MySQLBackend
 | |
|     Port:                           3307
 | |
|     Server Version:                 5.5.25-MariaDB-log
 | |
|     Node Id:                        124
 | |
|     Number of connections:          0
 | |
|     Current no. of conns:           0
 | |
|     Current no. of operations:      0
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| If the server has a non-zero value set for the server configuration item
 | |
| "persistpoolmax", then additional information will be shown:
 | |
| 
 | |
| ```
 | |
|     Persistent pool size:            1
 | |
|     Persistent measured pool size:   1
 | |
|     Persistent pool max size:        10
 | |
|     Persistent max time (secs):      3660
 | |
| ```
 | |
| 
 | |
| The distinction between pool size and measured pool size is that the first is a
 | |
| counter that is updated when operations affect the persistent connections pool,
 | |
| whereas the measured size is the result of checking how many persistent
 | |
| connections are currently in the pool. It can be slightly different, since any
 | |
| expired connections are removed during the check.
 | |
| 
 | |
| ## Setting The State Of A Server
 | |
| 
 | |
| MariaDB MaxScale maintains a number of status flags for each server that is
 | |
| configured. These status flags are normally maintained by the monitors but there
 | |
| are two commands in the user interface that can be used to manually set these
 | |
| flags; the _set server_ and _clear server_ commands.
 | |
| 
 | |
| |Flag       |Description                                                                                |
 | |
| |-----------|-------------------------------------------------------------------------------------------|
 | |
| |running    |The server is responding to requests, accepting connections and executing database commands|
 | |
| |master     |The server is a master in a replication or it can be used for database writes              |
 | |
| |slave      |The server is a replication slave or is considered as a read only database                 |
 | |
| |synced     |The server is a fully fledged member of a Galera cluster                                   |
 | |
| |maintenance|The server is in maintenance mode. It won't be used by services or monitored by monitors   |
 | |
| |stale      |The server is a [stale master server](../Monitors/MySQL-Monitor.md)                        |
 | |
| 
 | |
| All status flags, with the exception of the maintenance flag, will be set by the
 | |
| monitors that are monitoring the server. If manual control is required the
 | |
| monitor should be stopped.
 | |
| 
 | |
| ```
 | |
| MaxScale> set server server3 maintenance
 | |
| MaxScale> clear server server3 maintenance
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Viewing the persistent pool of DCB
 | |
| 
 | |
| The DCBs that are in the pool for a particular server can be displayed (in the
 | |
| format described below in the DCB section) with a command like:
 | |
| 
 | |
| ```
 | |
| MaxScale> show persistent server1
 | |
| ```
 | |
| 
 | |
| # Working With Sessions
 | |
| 
 | |
| The MariaDB MaxScale session represents the state within MariaDB
 | |
| MaxScale. Sessions are dynamic entities and not named in the configuration file,
 | |
| this means that sessions can not be easily named within the user interface. The
 | |
| sessions are referenced using ID values, these are actually memory address,
 | |
| however the important thing is that no two session have the same ID.
 | |
| 
 | |
| ## What Sessions Are Active in MariaDB MaxScale?
 | |
| 
 | |
| There are a number of ways to find out what sessions are active, the most
 | |
| comprehensive being the _list sessions_ command.
 | |
| 
 | |
| ```
 | |
| MaxScale> list sessions
 | |
| Sessions.
 | |
| -----------------+-----------------+----------------+--------------------------
 | |
| Session          | Client          | Service        | State
 | |
| -----------------+-----------------+----------------+--------------------------
 | |
| 0x7267a0         | 127.0.0.1       | CLI            | Session ready for routing
 | |
| 0x726340         |                 | CLI            | Listener Session
 | |
| 0x725720         |                 | Debug Service  | Listener Session
 | |
| 0x724720         |                 | QLA Service    | Listener Session
 | |
| 0x72a750         |                 | Filter Service | Listener Session
 | |
| 0x709500         |                 | Split Service  | Listener Session
 | |
| 0x7092d0         |                 | Test Service   | Listener Session
 | |
| -----------------+-----------------+----------------+--------------------------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| This lists all the sessions for both user connections and for the service
 | |
| listeners.
 | |
| 
 | |
| The _list clients_ command will give just the subset of sessions that originate
 | |
| from a client connection.
 | |
| 
 | |
| ```
 | |
| MaxScale> list clients
 | |
| Client Connections
 | |
| -----------------+------------+----------------------+------------
 | |
|  Client          | DCB        | Service              | Session
 | |
| -----------------+------------+----------------------+------------
 | |
|  127.0.0.1       |   0x7274b0 | CLI                  |   0x727700
 | |
|  127.0.0.1       |   0x727900 | QLA Service          |   0x727da0
 | |
| -----------------+------------+----------------------+------------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Display Session Details
 | |
| 
 | |
| Once the session ID has been determined using one of the above method it is
 | |
| possible to determine more detail regarding a session by using the _show
 | |
| session_ command.
 | |
| 
 | |
| ```
 | |
| MaxScale> show session 0x727da0
 | |
| Session 0x727da0
 | |
|     State:                  Session ready for routing
 | |
|     Service:                QLA Service (0x70d6a0)
 | |
|     Client DCB:             0x727900
 | |
|     Client Address:         127.0.0.1
 | |
|     Connected:              Wed Jun 25 15:27:21 2014
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| # Descriptor Control Blocks
 | |
| 
 | |
| The Descriptor Control Block or DCB is a very important entity within MariaDB
 | |
| MaxScale, it represents the state of each connection within MariaDB MaxScale. A
 | |
| DCB is allocated for every connection from a client, every network listener and
 | |
| every connection to a backend database. Statistics for each of these connections
 | |
| are maintained within these DCB’s.
 | |
| 
 | |
| As with session above the DCB’s are not named and are therefore referred to by
 | |
| the use of a unique ID, the memory address of the DCB.
 | |
| 
 | |
| ## Finding DCB’s
 | |
| 
 | |
| There are several ways to determine what DCB’s are active within a MariaDB
 | |
| MaxScale server, the most straightforward being the _list dcbs_ command.
 | |
| 
 | |
| ```
 | |
| MaxScale> list dcbs
 | |
| Descriptor Control Blocks
 | |
| ------------+----------------------------+----------------------+----------
 | |
|  DCB        | State                      | Service              | Remote
 | |
| ------------+----------------------------+----------------------+----------
 | |
|    0x667170 | DCB for listening socket   | Test Service         |
 | |
|    0x71a350 | DCB for listening socket   | Split Service        |
 | |
|    0x724b40 | DCB for listening socket   | Filter Service       |
 | |
|    0x7250d0 | DCB for listening socket   | QLA Service          |
 | |
|    0x725740 | DCB for listening socket   | Debug Service        |
 | |
|    0x726740 | DCB for listening socket   | CLI                  |
 | |
|    0x7274b0 | DCB in the polling loop    | CLI                  | 127.0.0.1
 | |
|    0x727900 | DCB in the polling loop    | QLA Service          | 127.0.0.1
 | |
|    0x72e880 | DCB in the polling loop    | QLA Service          |
 | |
| ------------+----------------------------+----------------------+----------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| A MariaDB MaxScale server that has activity on it will however have many more
 | |
| DCB’s than in the example above, making it hard to find the DCB that you
 | |
| require. The DCB ID is also included in a number of other command outputs,
 | |
| depending on the information you have it may be easier to use other methods to
 | |
| locate a particular DCB.
 | |
| 
 | |
| ## DCB Of A Client Connection
 | |
| 
 | |
| To find the DCB for a particular client connection it may be best to start with
 | |
| the list clients command and then look at each DCB for a particular client
 | |
| address to determine the one of interest.
 | |
| 
 | |
| ## DCB Details
 | |
| 
 | |
| The details of an individual DCB can be obtained by use of the _show dcb_
 | |
| command
 | |
| 
 | |
| ```
 | |
| MaxScale> show dcb 0x727900
 | |
| DCB: 0x727900
 | |
|     DCB state:              DCB in the polling loop
 | |
|     Username:               somename
 | |
|     Protocol:               MySQLBackend
 | |
|     Server Status:          Master, running
 | |
|     Role:                   Request Handler
 | |
|     Connected to:           127.0.0.1
 | |
|     Owning Session:         0x727da0
 | |
|     Statistics:
 | |
|             No. of Reads:                   4
 | |
|             No. of Writes:                  3
 | |
|             No. of Buffered Writes:         0
 | |
|             No. of Accepts:                 0
 | |
|             No. of High Water Events:       0
 | |
|             No. of Low Water Events:        0
 | |
|             Added to persistent pool:       Jun 24 09:09:56
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| The information Username, Protocol, Server Status are not always relevant, and
 | |
| will not be shown when they are null.  The time the DCB was added to the
 | |
| persistent pool is only shown for a DCB that is in a persistent pool.
 | |
| 
 | |
| # Working with Filters
 | |
| 
 | |
| Filters allow the request contents and result sets from a database to be
 | |
| modified for a client connection, pipelines of filters can be created between
 | |
| the client connection and MariaDB MaxScale router modules.
 | |
| 
 | |
| ## What Filters Are Configured?
 | |
| 
 | |
| Filters are configured in the configuration file for MariaDB MaxScale, they are
 | |
| given names and may be included in the definition of a service. The _list
 | |
| filters_ command can be used to determine which filters are defined.
 | |
| 
 | |
| ```
 | |
| MaxScale> list filters
 | |
| Filters
 | |
| --------------------+-----------------+----------------------------------------
 | |
| Filter              | Module          | Options
 | |
| --------------------+-----------------+----------------------------------------
 | |
| counter             | testfilter      |
 | |
| QLA                 | qlafilter       | /tmp/QueryLog
 | |
| Replicate           | tee             |
 | |
| QLA_BLR             | qlafilter       | /tmp/QueryLog.blr0
 | |
| regex               | regexfilter     |
 | |
| MySQL5.1            | regexfilter     |
 | |
| top10               | topfilter       |
 | |
| --------------------+-----------------+----------------------------------------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Retrieve Details Of A Filter Configuration
 | |
| 
 | |
| The command _show filter_ can be used to display information related to a
 | |
| particular filter.
 | |
| 
 | |
| ```
 | |
| MaxScale> show filter QLA
 | |
| Filter 0x719460 (QLA)
 | |
|     Module: qlafilter
 | |
|     Options:        /tmp/QueryLog
 | |
|             Limit logging to connections from       127.0.0.1
 | |
|             Include queries that match              select.*from.*user.*where
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Filter Usage
 | |
| 
 | |
| The _show session_ command will include details for each of the filters in use
 | |
| within a session.  First use _list sessions_ or _list clients_ to find the
 | |
| session of interest and then run the _show session_ command
 | |
| 
 | |
| ```
 | |
| MaxScale> list clients
 | |
| Client Connections
 | |
| -----------------+------------+----------------------+------------
 | |
|  Client          | DCB        | Service              | Session
 | |
| -----------------+------------+----------------------+------------
 | |
|  127.0.0.1       |   0x7361a0 | Split Service        |   0x736680
 | |
|  127.0.0.1       |   0x737ec0 | Plumbing             |   0x7382b0
 | |
|  127.0.0.1       |   0x73ab20 | DigitalOcean         |   0x73ad90
 | |
|  127.0.0.1       |   0x7219e0 | CLI                  |   0x721bd0
 | |
| -----------------+------------+----------------------+------------
 | |
| MaxScale> show session 0x736680
 | |
| Session 0x736680
 | |
|     State:                  Session ready for routing
 | |
|     Service:                Split Service (0x719f60)
 | |
|     Client DCB:             0x7361a0
 | |
|     Client Address:         127.0.0.1
 | |
|     Connected:              Thu Jun 26 10:10:44 2014
 | |
|     Filter: top10
 | |
|             Report size                     10
 | |
|             Logging to file /tmp/Query.top10.1.
 | |
|             Current Top 10:
 | |
|             1 place:
 | |
|                     Execution time: 23.826 seconds
 | |
|                     SQL: select sum(salary), year(from_date) from salaries s, (select distinct year(from_date) as y1 from salaries) y where (makedate(y.y1, 1) between s.from_date and s.to_date) group by y.y1 ("1988-08-01?
 | |
|             2 place:
 | |
|                     Execution time: 5.251 seconds
 | |
|                     SQL: select d.dept_name as "Department", y.y1 as "Year", count(*) as "Count" from departments d, dept_emp de, (select distinct year(from_date) as y1 from dept_emp order by 1) y where d.dept_no = de.dept_no and (makedate(y.y1, 1) between de.from_date and de.to_date) group by y.y1, d.dept_name order by 1, 2
 | |
|             3 place:
 | |
|                     Execution time: 2.903 seconds
 | |
|                     SQL: select year(now()) - year(birth_date) as age, gender, avg(salary) as "Average Salary" from employees e, salaries s where e.emp_no = s.emp_no and ("1988-08-01"  between from_date AND to_date) group by year(now()) - year(birth_date), gender order by 1,2
 | |
|             4 place:
 | |
|                     Execution time: 2.138 seconds
 | |
|                     SQL: select dept_name as "Department", sum(salary) / 12 as "Salary Bill" from employees e, departments d, dept_emp de, salaries s where e.emp_no = de.emp_no and de.dept_no = d.dept_no and ("1988-08-01"  between de.from_date AND de.to_date) and ("1988-08-01"  between s.from_date AND s.to_date) and s.emp_no = e.emp_no group by dept_name order by 1
 | |
|             5 place:
 | |
|                     Execution time: 0.839 seconds
 | |
|                     SQL: select dept_name as "Department", avg(year(now()) - year(birth_date)) as "Average Age", gender from employees e, departments d, dept_emp de where e.emp_no = de.emp_no and de.dept_no = d.dept_no and ("1988-08-01"  between from_date AND to_date) group by dept_name, gender
 | |
|             6 place:
 | |
|                     Execution time: 0.662 seconds
 | |
|                     SQL: select year(hire_date) as "Hired", d.dept_name, count(*) as "Count" from employees e, departments d, dept_emp de where de.emp_no = e.emp_no and de.dept_no = d.dept_no group by d.dept_name, year(hire_date)
 | |
|             7 place:
 | |
|                     Execution time: 0.286 seconds
 | |
|                     SQL: select moves.n_depts As "No. of Departments", count(moves.emp_no) as "No. of Employees" from (select de1.emp_no as emp_no, count(de1.emp_no) as n_depts from dept_emp de1 group by de1.emp_no) as moves group by moves.n_depts order by 1
 | |
|             8 place:
 | |
|                     Execution time: 0.248 seconds
 | |
|                     SQL: select year(now()) - year(birth_date) as age, gender, count(*) as "Count" from employees group by year(now()) - year(birth_date), gender order by 1,2@
 | |
|             9 place:
 | |
|                     Execution time: 0.182 seconds
 | |
|                     SQL: select year(hire_date) as "Hired", count(*) as "Count" from employees group by year(hire_date)
 | |
|             10 place:
 | |
|                     Execution time: 0.169 seconds
 | |
|                     SQL: select year(hire_date) - year(birth_date) as "Age", count(*) as Count from employees group by year(hire_date) - year(birth_date) order by 1
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| The data displayed varies from filter to filter, the example above is the top
 | |
| filter. This filter prints a report of the current top queries at the time the
 | |
| show session command is run.
 | |
| 
 | |
| # Working With Monitors
 | |
| 
 | |
| Monitors are used to monitor the state of databases within MariaDB MaxScale in
 | |
| order to supply information to other modules, specifically the routers within
 | |
| MariaDB MaxScale.
 | |
| 
 | |
| ## What Monitors Are Running?
 | |
| 
 | |
| To see what monitors are running within MariaDB MaxScale use the _list monitors_
 | |
| command.
 | |
| 
 | |
| ```
 | |
| MaxScale> list monitors
 | |
| +----------------------+---------------------
 | |
| | Monitor              | Status
 | |
| +----------------------+---------------------
 | |
| | MySQL Monitor        | Running
 | |
| +----------------------+---------------------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Details Of A Particular Monitor
 | |
| 
 | |
| To see the details of a particular monitor use the _show monitor_ command.
 | |
| 
 | |
| ```
 | |
| MaxScale> show monitor "MySQL Monitor"
 | |
| Monitor: 0x71c370
 | |
|     Name:           MySQL Monitor
 | |
|     Monitor running
 | |
|     Sampling interval:      10000 milliseconds
 | |
|     MaxScale MonitorId:     24209641
 | |
|     Replication lag:        disabled
 | |
|     Monitored servers:      127.0.0.1:3306, 127.0.0.1:3307, 127.0.0.1:3308, 127.0.0.1:3309
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Controlling Replication Heartbeat
 | |
| 
 | |
| Some monitors provide a replication heartbeat mechanism that monitors the delay
 | |
| for data that is replicated from a master to slaves in a tree structured
 | |
| replication environment. This can be enabled or disabled using the commands
 | |
| _enable heartbeat_ and _disable heartbeat_.
 | |
| 
 | |
| ```
 | |
| MaxScale> disable heartbeat "MySQL Monitor"
 | |
| MaxScale> enable heartbeat "MySQL Monitor"
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| Please note that changes made via this interface will not persist across
 | |
| restarts of MariaDB MaxScale. To make a permanent change edit the maxscale.cnf
 | |
| file.
 | |
| 
 | |
| Enabling the replication heartbeat mechanism will add the display of heartbeat
 | |
| information in the show server output
 | |
| 
 | |
| ```
 | |
| MaxScale> show server server4
 | |
| Server 0x719800 (server4)
 | |
|     Server:                 127.0.0.1
 | |
|     Status:                 Slave, Running
 | |
|     Protocol:               MySQLBackend
 | |
|     Port:                   3309
 | |
|     Server Version:         5.5.25-MariaDB-log
 | |
|     Node Id:                4
 | |
|     Number of connections:  0
 | |
|     Current no. of conns:   0
 | |
| MaxScale> enable heartbeat "MySQL Monitor"
 | |
| MaxScale> show server server4
 | |
| Server 0x719800 (server4)
 | |
|     Server:                 127.0.0.1
 | |
|     Status:                 Slave, Running
 | |
|     Protocol:               MySQLBackend
 | |
|     Port:                   3309
 | |
|     Server Version:         5.5.25-MariaDB-log
 | |
|     Node Id:                4
 | |
|     Slave delay:            0
 | |
|     Last Repl Heartbeat:    Thu Jun 26 17:04:58 2014
 | |
|     Number of connections:  0
 | |
|     Current no. of conns:   0
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Shutting Down A Monitor
 | |
| 
 | |
| A monitor may be shutdown using the _shutdown monitor_ command. This allows for
 | |
| manual control of the status of servers using the _set server_ and _clear
 | |
| server_ commands.
 | |
| 
 | |
| ```
 | |
| MaxScale> shutdown monitor "MySQL Monitor"
 | |
| MaxScale> list monitors
 | |
| +----------------------+---------------------
 | |
| | Monitor              | Status
 | |
| +----------------------+---------------------
 | |
| | MySQL Monitor        | Stopped
 | |
| +----------------------+---------------------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Restarting A Monitor
 | |
| 
 | |
| A monitor that has been shutdown may be restarted using the _restart monitor_
 | |
| command.
 | |
| 
 | |
| ```
 | |
| MaxScale> restart monitor "MySQL Monitor"
 | |
| MaxScale> show monitor "MySQL Monitor"
 | |
| Monitor: 0x71a310
 | |
|     Name:           MySQL Monitor
 | |
|     Monitor running
 | |
|     Sampling interval:      10000 milliseconds
 | |
|     MaxScale MonitorId:     24201552
 | |
|     Replication lag:        enabled
 | |
|     Monitored servers:      127.0.0.1:3306, 127.0.0.1:3307, 127.0.0.1:3308, 127.0.0.1:3309
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| # MaxScale Status Commands
 | |
| 
 | |
| A number of commands exists that enable the internal MariaDB MaxScale status to
 | |
| be revealed, these commands give an insight to how MariaDB MaxScale is using
 | |
| resource internally and are used to allow the tuning process to take place.
 | |
| 
 | |
| ## MariaDB MaxScale Thread Usage
 | |
| 
 | |
| MariaDB MaxScale uses a number of threads, as defined in the MariaDB MaxScale
 | |
| configuration file, to execute the processing of requests received from clients
 | |
| and the handling of responses. The _show threads_ command can be used to
 | |
| determine what each thread is currently being used for.
 | |
| 
 | |
| ```
 | |
| MaxScale> show threads
 | |
| Polling Threads.
 | |
| Historic Thread Load Average: 1.00.
 | |
| Current Thread Load Average: 1.00.
 | |
| 15 Minute Average: 0.48, 5 Minute Average: 1.00, 1 Minute Average: 1.00
 | |
| Pending event queue length averages:
 | |
| 15 Minute Average: 0.90, 5 Minute Average: 1.83, 1 Minute Average: 2.00
 | |
|  ID | State      | # fds  | Descriptor       | Running  | Event
 | |
| ----+------------+--------+------------------+----------+---------------
 | |
|   0 | Processing |      1 | 0xf55a70         | <  100ms | IN|OUT
 | |
|   1 | Processing |      1 | 0xf49ba0         | <  100ms | IN|OUT
 | |
|   2 | Processing |      1 | 0x7f54c0030d00   | <  100ms | IN|OUT
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| The resultant output returns data as to the average thread utilization for the
 | |
| past minutes 5 minutes and 15 minutes. It also gives a table, with a row per
 | |
| thread that shows what DCB that thread is currently processing events for, the
 | |
| events it is processing and how long, to the nearest 100ms has been send
 | |
| processing these events.
 | |
| 
 | |
| ## The Event Queue
 | |
| 
 | |
| At the core of MariaDB MaxScale is an event driven engine that is processing
 | |
| network events for the network connections between MariaDB MaxScale and client
 | |
| applications and MariaDB MaxScale and the backend servers. It is possible to see
 | |
| the event queue using the _show eventq_ command. This will show the events
 | |
| currently being executed and those that are queued for execution.
 | |
| 
 | |
| ```
 | |
| MaxScale> show eventq
 | |
| Event Queue.
 | |
| DCB              | Status     | Processing Events  | Pending Events
 | |
| -----------------+------------+--------------------+-------------------
 | |
| 0x1e22f10        | Processing | IN|OUT             |
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| The output of this command gives the DCB’s that are currently in the event
 | |
| queue, the events queued for that DCB, and events that are being processed for
 | |
| that DCB.
 | |
| 
 | |
| ## The Housekeeper Tasks
 | |
| 
 | |
| Internally MariaDB MaxScale has a housekeeper thread that is used to perform
 | |
| periodic tasks, it is possible to use the command show tasks to see what tasks
 | |
| are outstanding within the housekeeper.
 | |
| 
 | |
| ```
 | |
| MaxScale> show tasks
 | |
| Name                      | Type     | Frequency | Next Due
 | |
| --------------------------+----------+-----------+-------------------------
 | |
| Load Average              | Repeated | 10        | Wed Nov 19 15:10:51 2014
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| # Administration Commands
 | |
| 
 | |
| ## What Modules Are In use?
 | |
| 
 | |
| In order to determine what modules are in use, and the version and status of
 | |
| those modules the _list modules_ command can be used.
 | |
| 
 | |
| ```
 | |
| MaxScale> list modules
 | |
| Modules.
 | |
| ----------------+-------------+---------+-------+-------------------------
 | |
| Module Name     | Module Type | Version | API   | Status
 | |
| ----------------+-------------+---------+-------+-------------------------
 | |
| tee             | Filter      | V1.0.0  | 1.1.0 | Alpha
 | |
| qlafilter       | Filter      | V1.1.1  | 1.1.0 | Alpha
 | |
| topfilter       | Filter      | V1.0.1  | 1.1.0 | Alpha
 | |
| MySQLBackend    | Protocol    | V2.0.0  | 1.0.0 | Alpha
 | |
| maxscaled       | Protocol    | V1.0.0  | 1.0.0 | Alpha
 | |
| telnetd         | Protocol    | V1.0.1  | 1.0.0 | Alpha
 | |
| MySQLClient     | Protocol    | V1.0.0  | 1.0.0 | Alpha
 | |
| mysqlmon        | Monitor     | V1.2.0  | 1.0.0 | Alpha
 | |
| readconnroute   | Router      | V1.0.2  | 1.0.0 | Alpha
 | |
| readwritesplit  | Router      | V1.0.2  | 1.0.0 | Alpha
 | |
| debugcli        | Router      | V1.1.1  | 1.0.0 | Alpha
 | |
| cli             | Router      | V1.0.0  | 1.0.0 | Alpha
 | |
| ----------------+-------------+---------+-------+-------------------------
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| This command provides important version information for the module. Each module
 | |
| has two versions; the version of the module itself and the version of the module
 | |
| API that it supports. Also included in the output is the status of the module,
 | |
| this may be "In Development", “Alpha”, “Beta”, “GA” or “Experimental”.
 | |
| 
 | |
| ## Enabling syslog and maxlog logging
 | |
| 
 | |
| MariaDB MaxScale can log messages to syslog, to a log file or to both. The
 | |
| approach can be set in the config file, but can also be changed from
 | |
| maxadmin. Syslog logging is identified by *syslog* and file logging by *maxlog*.
 | |
| 
 | |
| ```
 | |
| MaxScale> enable syslog
 | |
| MaxScale> disable maxlog
 | |
| ```
 | |
| 
 | |
| **NOTE** If you disable both, then you will see no messages at all.
 | |
| 
 | |
| ## Rotating the log file
 | |
| 
 | |
| MariaDB MaxScale logs messages to a log file in the log directory of MariaDB
 | |
| MaxScale. As the log file grows continuously, it is recommended to periodically
 | |
| rotate it. When rotated, the current log file will be closed and a new one with
 | |
| the *same* name opened.
 | |
| 
 | |
| To retain the earlier log entries, you need to first rename the log file and then
 | |
| instruct MaxScale to rotate it.
 | |
| 
 | |
| ```
 | |
| $ 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
 | |
| ```
 | |
| 
 | |
| There are two ways for rotating the log - *flush log maxscale* and *flush logs*
 | |
| - and the result is identical. The two alternatives are due to historical
 | |
| reasons; earlier MariaDB MaxScale had several different log files.
 | |
| 
 | |
| ```
 | |
| MaxScale> flush log maxscale
 | |
| MaxScale>
 | |
| The flush logs command may be used to rotate all logs with a single command.
 | |
| MaxScale> flush logs
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| ## Change MariaDB MaxScale Logging Options
 | |
| 
 | |
| From version 1.3 onwards, MariaDB MaxScale has a single log file where messages
 | |
| of various priority (aka severity) are logged. Consequently, you no longer
 | |
| enable or disable log files but log priorities. The priorities are the same as
 | |
| those of syslog and the ones that can be enabled or disabled are *debug*,
 | |
| *info*, *notice* and *warning*. *Error* and any more severe messages can not be
 | |
| disabled.
 | |
| 
 | |
| ```
 | |
| MaxScale> enable log-priority info
 | |
| MaxScale> disable log-priority notice
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| Please note that changes made via this interface will not persist across
 | |
| restarts of MariaDB MaxScale. To make a permanent change edit the maxscale.cnf
 | |
| file.
 | |
| 
 | |
| ## Adjusting the Log Throttling
 | |
| 
 | |
| From 2.0 onwards, MariaDB MaxScale will throttle messages that are logged too
 | |
| frequently, which typically is a sign that MaxScale encounters some error that
 | |
| just keeps on repeating. The aim is to prevent the log from flooding. The
 | |
| configuration specifies how many times a particular error may be logged during a
 | |
| period of a specified length, before it is suppressed for a period of a
 | |
| specified other length.
 | |
| 
 | |
| The current log throttling configuration can be queried with
 | |
| 
 | |
| ```
 | |
| MaxScale> show log_throttling
 | |
| 10 1000 100000
 | |
| ```
 | |
| 
 | |
| where the numbers are the count, the length (in milliseconds) of the period
 | |
| during which the counting is made, and the length (in milliseconds) of the
 | |
| period the message is subsequently suppressed.
 | |
| 
 | |
| The configuration can be set with
 | |
| 
 | |
| ```
 | |
| MaxScale> set log_throttling 10 1000 10000
 | |
| ```
 | |
| 
 | |
| where numbers are specified in the same order as in the *show* case. Setting any
 | |
| of the values to 0, disables the throttling.
 | |
| 
 | |
| ## Reloading The Configuration
 | |
| 
 | |
| A command, _reload config_, is available that will cause MariaDB MaxScale to
 | |
| reload the maxscale.cnf configuration file. Refer to the [Configuration Guide](../Getting-Started/Configuration-Guide.md)
 | |
| for a list of parameters that can be changed with it.
 | |
| 
 | |
| ## Shutting Down MariaDB MaxScale
 | |
| 
 | |
| The MariaDB MaxScale server may be shutdown using the _shutdown maxscale_
 | |
| command.
 | |
| 
 | |
| # Runtime Configuration Changes
 | |
| 
 | |
| Starting with the 2.1 version of MaxScale, you can modify the runtime
 | |
| configuration.
 | |
| 
 | |
| ## Servers
 | |
| 
 | |
| ### Creating a New Server
 | |
| 
 | |
| In order to add new servers into MaxScale, they must first be created. They can
 | |
| be created with the `create server` command. Any runtime configuration changes
 | |
| to servers are persisted meaning that they will still be in effect even after a
 | |
| restart.
 | |
| 
 | |
| ```
 | |
| 'server' - Create a new server
 | |
| 
 | |
| Usage: create server NAME HOST [PORT] [PROTOCOL] [AUTHENTICATOR] [OPTIONS]
 | |
| 
 | |
| Create a new server from the following parameters.
 | |
| 
 | |
| NAME          Server name
 | |
| HOST          Server host address
 | |
| PORT          Server port (default 3306)
 | |
| PROTOCOL      Server protocol (default MySQLBackend)
 | |
| AUTHENTICATOR Authenticator module name (default MySQLAuth)
 | |
| OPTIONS       Options for the authenticator module
 | |
| 
 | |
| The first three parameters are required, the others are optional.
 | |
| ```
 | |
| 
 | |
| ### Adding Servers to Services and Monitors
 | |
| 
 | |
| To add a server to a service or a monitor, use the `add server` command. Any
 | |
| changes to the servers of a service or a monitor are persisted meaning that they
 | |
| will still be in effect even after a restart.
 | |
| 
 | |
| Servers added to services will only be taken into use by new sessions. Old
 | |
| sessions will only use the servers that were a part of the service when they
 | |
| were created.
 | |
| 
 | |
| ```
 | |
| 'server' - Add a new server to a service
 | |
| 
 | |
| Usage: add server SERVER TARGET...
 | |
| 
 | |
| The TARGET must be a list of service and monitor names
 | |
| e.g. add server my-db my-service 'Cluster Monitor'
 | |
| 
 | |
| A server can be assigned to a maximum of 11 objects in one command
 | |
| ```
 | |
| 
 | |
| ### Removing Servers from Services and Monitors
 | |
| 
 | |
| To remove servers from a service or a monitor, use the `remove server`
 | |
| command. The same rules about server usage for services that apply to `add
 | |
| server` also apply to `remove server`. The servers will only be removed from new
 | |
| sessions created after the command is executed.
 | |
| 
 | |
| ```
 | |
| 'server' - Remove a server from a service or a monitor
 | |
| 
 | |
| Usage: remove server SERVER TARGET...
 | |
| 
 | |
| The TARGET must be a list of service and monitor names
 | |
| e.g. remove server my-db my-service 'Cluster Monitor'
 | |
| 
 | |
| A server can be removed from a maximum of 11 objects in one command
 | |
| ```
 | |
| 
 | |
| ### Altering Servers
 | |
| 
 | |
| You can alter server parameters with the `alter server` command. Any changes to
 | |
| the address or port of the server will take effect for new connections
 | |
| only. Changes to other parameters will take effect immediately.
 | |
| 
 | |
| Please note that in order for SSL to be enabled for a created server, all of the
 | |
| required SSL parameters (`ssl`, `ssl_key`, `ssl_cert` and `ssl_ca_cert`) must be
 | |
| given in the same command.
 | |
| 
 | |
| ```
 | |
| Usage: alter server NAME KEY=VALUE ...
 | |
| 
 | |
| This will alter an existing parameter of a server. The accepted values for KEY are:
 | |
| 
 | |
| address               Server address
 | |
| port                  Server port
 | |
| monuser               Monitor user for this server
 | |
| monpw                 Monitor password for this server
 | |
| ssl                   Enable SSL, value must be 'required'
 | |
| ssl_key               Path to SSL private key
 | |
| ssl_cert              Path to SSL certificate
 | |
| ssl_ca_cert           Path to SSL CA certificate
 | |
| ssl_version           SSL version
 | |
| ssl_cert_verify_depth Certificate verification depth
 | |
| 
 | |
| A maximum of 11 parameters can be changed at one time.
 | |
| To configure SSL for a newly created server, the 'ssl', 'ssl_cert',
 | |
| 'ssl_key' and 'ssl_ca_cert' parameters must be given at the same time.
 | |
| ```
 | |
| 
 | |
| ### Destroying Servers
 | |
| 
 | |
| You can destroy created servers with the `destroy server` command. Only servers
 | |
| created with the `create server` command should be destroyed. A server can only
 | |
| be destroyed once it has been removed from all services and monitors.
 | |
| 
 | |
| ```
 | |
| 'server' - Destroy a server
 | |
| 
 | |
| Usage: destroy server NAME
 | |
| ```
 | |
| 
 | |
| ## Listeners
 | |
| 
 | |
| ### Creating New Listeners
 | |
| 
 | |
| To create a new listener for a service, use the `create listener` command. This
 | |
| will create and start a new listener for a service which will immediately start
 | |
| listening for new connections on the specified port.
 | |
| 
 | |
| Please note that in order for SSL to be enabled for a created listeners, all of
 | |
| the required SSL parameters (`ssl`, `ssl_key`, `ssl_cert` and `ssl_ca_cert`)
 | |
| must be given. All the `create listener` parameters do not need to be defined in
 | |
| order for SSL to be enabled. The _default_ parameter can be used to signal that
 | |
| MaxScale should use a default value for the parameter in question.
 | |
| 
 | |
| ```
 | |
| 'listener' - Create a new listener for a service
 | |
| 
 | |
| Usage: create listener SERVICE NAME [HOST] [PORT] [PROTOCOL] [AUTHENTICATOR] [OPTIONS]
 | |
|                        [SSL_KEY] [SSL_CERT] [SSL_CA] [SSL_VERSION] [SSL_VERIFY_DEPTH]
 | |
| 
 | |
| Create a new server from the following parameters.
 | |
| 
 | |
| SERVICE       Service where this listener is added
 | |
| NAME          Listener name
 | |
| HOST          Listener host address (default 0.0.0.0)
 | |
| PORT          Listener port (default 3306)
 | |
| PROTOCOL      Listener protocol (default MySQLClient)
 | |
| AUTHENTICATOR Authenticator module name (default MySQLAuth)
 | |
| OPTIONS       Options for the authenticator module
 | |
| SSL_KEY       Path to SSL private key
 | |
| SSL_CERT      Path to SSL certificate
 | |
| SSL_CA        Path to CA certificate
 | |
| SSL_VERSION   SSL version (default MAX)
 | |
| SSL_VERIFY_DEPTH Certificate verification depth
 | |
| 
 | |
| The first two parameters are required, the others are optional.
 | |
| Any of the optional parameters can also have the value 'default'
 | |
| which will be replaced with the default value.
 | |
| ```
 | |
| 
 | |
| ### Destroying Listeners
 | |
| 
 | |
| You can destroy created listeners with the `destroy listener` command. This will
 | |
| remove the persisted configuration and it will not be created on the next
 | |
| startup. The listener is stopped but it will remain a part of the runtime
 | |
| configuration until the next restart.
 | |
| 
 | |
| ```
 | |
| 'listener' - Destroy a listener
 | |
| 
 | |
| Usage: destroy listener SERVICE NAME
 | |
| ```
 | |
| 
 | |
| ## Monitors
 | |
| 
 | |
| ### Creating New Monitors
 | |
| 
 | |
| The `create monitor` command creates a new monitor that is initially
 | |
| stopped. Configure the monitor with the `alter monitor` command and then start
 | |
| it with the `restart monitor` command. The _user_ and _password_ parameters of
 | |
| the monitor must be defined before the monitor is started.
 | |
| 
 | |
| ```
 | |
| 'monitor' - Create a new monitor
 | |
| 
 | |
| Usage: create monitor NAME MODULE
 | |
| NAME    Monitor name
 | |
| MODULE  Monitor module
 | |
| ```
 | |
| 
 | |
| ### Altering Monitors
 | |
| 
 | |
| To alter a monitor, use the `alter monitor` command. Module specific parameters
 | |
| can also be altered.
 | |
| 
 | |
| ```
 | |
| 'monitor' - Alter monitor parameters
 | |
| 
 | |
| Usage: alter monitor NAME KEY=VALUE ...
 | |
| 
 | |
| This will alter an existing parameter of a monitor. To remove parameters,
 | |
| pass an empty value for a key e.g. 'maxadmin alter monitor my-monitor my-key='
 | |
| A maximum of 11 key-value pairs can be changed at one time
 | |
| ```
 | |
| 
 | |
| ### Destroying Monitors
 | |
| 
 | |
| To destroy a monitor, use the `destroy monitor` command. All servers need to be
 | |
| removed from the monitor before it can be destroyed. Only created monitors
 | |
| should be destroyed and they will remain a part of the runtime configuration
 | |
| until the next restart.
 | |
| 
 | |
| ```
 | |
| 'monitor' - Destroy a monitor
 | |
| 
 | |
| Usage: destroy monitor NAME
 | |
| ```
 | |
| 
 | |
| ## Other Modules
 | |
| 
 | |
| Modules can implement custom commands called _module commands_. These are
 | |
| intended to allow modules to perform very specific tasks.
 | |
| 
 | |
| To list all module commands, execute `list commands` in maxadmin. This shows all
 | |
| commands that the modules have exposed. It also explains what they do and what
 | |
| sort of arguments they take.
 | |
| 
 | |
| If no module commands are registered, no output will be generated. Refer to the
 | |
| module specific documentation for more details about module commands.
 | |
| 
 | |
| To call a module commands, execute `call command <module> <command>` in
 | |
| maxadmin. The _<module>_ is the name of the module and _<command>_ is the
 | |
| command that should be called. The commands take a variable amount of arguments
 | |
| which are explained in the output of `list commands`.
 | |
| 
 | |
| An example of this is the `dbfwfilter` module that implements a rule reloading
 | |
| mechanism as a module command. This command takes a filter name as a parameter.
 | |
| 
 | |
| ```
 | |
| maxadmin call command dbfwfilter rules/reload my-firewall-filter /home/user/rules.txt
 | |
| ```
 | |
| 
 | |
| Here the name of the filter is _my-firewall-filter_ and the optional rule file
 | |
| path is `/home/user/rules.txt`.
 | |
| 
 | |
| # Tuning MariaDB MaxScale
 | |
| 
 | |
| The way that MariaDB MaxScale does its polling is that each of the polling
 | |
| threads, as defined by the threads parameter in the configuration file, will
 | |
| call epoll_wait to obtain the events that are to be processed. The events are
 | |
| then added to a queue for execution. Any thread can read from this queue, not
 | |
| just the thread that added the event.
 | |
| 
 | |
| Once the thread has done an epoll call with no timeout it will either do an
 | |
| epoll_wait call with a timeout or it will take an event from the queue if there
 | |
| is one. These two new parameters affect this behavior.
 | |
| 
 | |
| The first parameter, which may be set by using the non_blocking_polls option in
 | |
| the configuration file, controls the number of epoll_wait calls that will be
 | |
| issued without a timeout before MariaDB MaxScale will make a call with a timeout
 | |
| value. The advantage of performing a call without a timeout is that the kernel
 | |
| treats this case as different and will not rescheduled the process in this
 | |
| case. If a timeout is passed then the system call will cause the MariaDB
 | |
| MaxScale thread to be put back in the scheduling queue and may result in lost
 | |
| CPU time to MariaDB MaxScale. Setting the value of this parameter too high will
 | |
| cause MariaDB MaxScale to consume a lot of CPU when there is infrequent work to
 | |
| be done. The default value of this parameter is 3.
 | |
| 
 | |
| This parameter may also be set via the maxadmin client using the command _set
 | |
| nbpolls <number>_.
 | |
| 
 | |
| The second parameter is the maximum sleep value that MariaDB MaxScale will pass
 | |
| to epoll_wait. What normally happens is that MariaDB MaxScale will do an
 | |
| epoll_wait call with a sleep value that is 10% of the maximum, each time the
 | |
| returns and there is no more work to be done MariaDB MaxScale will increase this
 | |
| percentage by 10%. This will continue until the maximum value is reached or
 | |
| until there is some work to be done. Once the thread finds some work to be done
 | |
| it will reset the sleep time it uses to 10% of the maximum.
 | |
| 
 | |
| The maximum sleep time is set in milliseconds and can be placed in the
 | |
| [maxscale] section of the configuration file with the poll_sleep
 | |
| parameter. Alternatively it may be set in the maxadmin client using the command
 | |
| _set pollsleep <number>_. The default value of this parameter is 1000.
 | |
| 
 | |
| Setting this value too high means that if a thread collects a large number of
 | |
| events and adds to the event queue, the other threads might not return from the
 | |
| epoll_wait calls they are running for some time resulting in less overall
 | |
| performance. Setting the sleep time too low will cause MariaDB MaxScale to wake
 | |
| up too often and consume CPU time when there is no work to be done.
 | |
| 
 | |
| The _show epoll_ command can be used to see how often we actually poll with a
 | |
| timeout, the first two values output are significant. Also the "Number of wake
 | |
| with pending events" is a good measure. This is the count of the number of times
 | |
| a blocking call returned to find there was some work waiting from another
 | |
| thread. If the value is increasing rapidly reducing the maximum sleep value and
 | |
| increasing the number of non-blocking polls should help the situation.
 | |
| 
 | |
| ```
 | |
| MaxScale> show epoll
 | |
| Number of epoll cycles:                     534
 | |
| Number of epoll cycles with wait:   10447
 | |
| Number of read events:                      35
 | |
| Number of write events:                     1988
 | |
| Number of error events:                     0
 | |
| Number of hangup events:                    1
 | |
| Number of accept events:                    3
 | |
| Number of times no threads polling: 5
 | |
| Current event queue length:         1
 | |
| Maximum event queue length:         2
 | |
| Number of DCBs with pending events: 0
 | |
| Number of wakeups with pending queue:       0
 | |
| No of poll completions with descriptors
 | |
|     No. of descriptors      No. of poll completions.
 | |
|      1                      534
 | |
|      2                      0
 | |
|      3                      0
 | |
|      4                      0
 | |
|      5                      0
 | |
|      6                      0
 | |
|      7                      0
 | |
|      8                      0
 | |
|      9                      0
 | |
|     >= 10                   0
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| If the "Number of DCBs with pending events" grows rapidly it is an indication
 | |
| that MariaDB MaxScale needs more threads to be able to keep up with the load it
 | |
| is under.
 | |
| 
 | |
| The _show threads_ command can be used to see the historic average for the
 | |
| pending events queue, it gives 15 minute, 5 minute and 1 minute averages. The
 | |
| load average it displays is the event count per poll cycle data. An idea load is
 | |
| 1, in this case MariaDB MaxScale threads and fully occupied but nothing is
 | |
| waiting for threads to become available for processing.
 | |
| 
 | |
| The _show eventstats_ command can be used to see statistics about how long
 | |
| events have been queued before processing takes place and also how long the
 | |
| events took to execute once they have been allocated a thread to run on.
 | |
| 
 | |
| ```
 | |
| MaxScale> show eventstats
 | |
| Event statistics.
 | |
| Maximum queue time:                  2600ms
 | |
| Maximum execution time:              1600ms
 | |
| Maximum event queue length:     3
 | |
| Current event queue length:     3
 | |
|                |    Number of events
 | |
| Duration       | Queued     | Executed
 | |
| ---------------+------------+-----------
 | |
|  < 100ms       | 107        | 461
 | |
|   100 -  200ms | 958        | 22830
 | |
|   200 -  300ms | 20716      | 2545
 | |
|   300 -  400ms | 3284       | 253
 | |
|   400 -  500ms | 505        | 45
 | |
|   500 -  600ms | 66         | 73
 | |
|   600 -  700ms | 116        | 169
 | |
|   700 -  800ms | 319        | 185
 | |
|   800 -  900ms | 382        | 42
 | |
|   900 - 1000ms | 95         | 31
 | |
|  1000 - 1100ms | 63         | 7
 | |
|  1100 - 1200ms | 18         | 4
 | |
|  1200 - 1300ms | 8          | 2
 | |
|  1300 - 1400ms | 6          | 0
 | |
|  1400 - 1500ms | 1          | 1
 | |
|  1500 - 1600ms | 3          | 1
 | |
|  1600 - 1700ms | 2          | 1
 | |
|  1700 - 1800ms | 2          | 0
 | |
|  1800 - 1900ms | 0          | 0
 | |
|  1900 - 2000ms | 1          | 0
 | |
|  2000 - 2100ms | 0          | 0
 | |
|  2100 - 2200ms | 0          | 0
 | |
|  2200 - 2300ms | 0          | 0
 | |
|  2300 - 2400ms | 0          | 0
 | |
|  2400 - 2500ms | 0          | 0
 | |
|  2500 - 2600ms | 0          | 0
 | |
|  2600 - 2700ms | 1          | 0
 | |
|  2700 - 2800ms | 0          | 0
 | |
|  2800 - 2900ms | 0          | 0
 | |
|  2900 - 3000ms | 0          | 0
 | |
|  > 3000ms      | 0          | 0
 | |
| MaxScale>
 | |
| ```
 | |
| 
 | |
| The statics are defined in 100ms buckets, with the count of the events that fell
 | |
| into that bucket being recorded.
 |