271 lines
9.9 KiB
Markdown
271 lines
9.9 KiB
Markdown
# Connection Routing with Galera Cluster
|
|
|
|
# Environment & Solution Space
|
|
|
|
The object of this tutorial is to have a system that has two ports available, one for
|
|
write connections to the database cluster and the other for read connections to the database.
|
|
|
|
## Setting up MariaDB MaxScale
|
|
|
|
The first part of this tutorial is covered in [MariaDB MaxScale Tutorial](MaxScale-Tutorial.md).
|
|
Please read it and follow the instructions for setting up MariaDB MaxScale with the
|
|
type of cluster you want to use.
|
|
|
|
Once you have MariaDB MaxScale installed and the database users created, we can create
|
|
the configuration file for MariaDB MaxScale.
|
|
|
|
## Creating Your MariaDB MaxScale Configuration
|
|
|
|
MariaDB MaxScale configuration is held in an ini file that is located in the file maxscale.cnf
|
|
in the directory /etc, if you have installed in the default location then this file
|
|
is available in /etc/maxscale.cnf. This is not created as part of the installation process
|
|
and must be manually created. A template file does exist within the /usr/share/maxscale directory
|
|
that may be use as a basis for your configuration.
|
|
|
|
A global, maxscale, section is included within every MariaDB MaxScale configuration file;
|
|
this is used to set the values of various MariaDB MaxScale wide parameters, perhaps
|
|
the most important of these is the number of threads that MariaDB MaxScale will use
|
|
to execute the code that forwards requests and handles responses for clients.
|
|
|
|
```
|
|
[maxscale]
|
|
threads=4
|
|
```
|
|
|
|
Since we are using Galera Cluster and connection routing we want a single to which
|
|
the client application can connect; MariaDB MaxScale will then route connections to
|
|
this port onwards to the various nodes within the Galera Cluster. To achieve this
|
|
within MariaDB MaxScale we need to define a service in the ini file. Create a section
|
|
for each in your MariaDB MaxScale configuration file and set the type to service,
|
|
the section name is the names of the service and should be meaningful to
|
|
the administrator. Names may contain whitespace.
|
|
|
|
```
|
|
[Galera Service]
|
|
type=service
|
|
```
|
|
|
|
The router for this section the readconnroute module, also the service should be
|
|
provided with the list of servers that will be part of the cluster. The server names
|
|
given here are actually the names of server sections in the configuration file and not
|
|
the physical hostnames or addresses of the servers.
|
|
|
|
```
|
|
[Galera Service]
|
|
type=service
|
|
router=readconnroute
|
|
servers=dbserv1, dbserv2, dbserv3
|
|
```
|
|
|
|
In order to instruct the router to which servers it should route we must add router
|
|
options to the service. The router options are compared to the status that the monitor
|
|
collects from the servers and used to restrict the eligible set of servers to which that
|
|
service may route. In our case we use the option that restricts us to servers that are
|
|
fully functional members of the Galera cluster which are able to support SQL operations
|
|
on the cluster. To achieve this we use the router option synced.
|
|
|
|
```
|
|
[Galera Service]
|
|
type=service
|
|
router=readconnroute
|
|
router_options=synced
|
|
servers=dbserv1, dbserv2, dbserv3
|
|
```
|
|
|
|
The final step in the service section is to add the username and password that will be
|
|
used to populate the user data from the database cluster. There are two options for
|
|
representing the password, either plain text or encrypted passwords may be used.
|
|
In order to use encrypted passwords a set of keys must be generated that will be used
|
|
by the encryption and decryption process. To generate the keys use the maxkeys command
|
|
and pass the name of the secrets file in which the keys are stored.
|
|
|
|
```
|
|
% maxkeys /var/lib/maxscale/.secrets
|
|
%
|
|
```
|
|
|
|
Once the keys have been created the maxpasswd command can be used to generate
|
|
the encrypted password.
|
|
|
|
```
|
|
% maxpasswd plainpassword
|
|
96F99AA1315BDC3604B006F427DD9484
|
|
%
|
|
```
|
|
|
|
The username and password, either encrypted or plain text, are stored in the service
|
|
section using the user and passwd parameters.
|
|
|
|
```
|
|
[Galera Service]
|
|
type=service
|
|
router=readconnroute
|
|
router_options=synced
|
|
servers=dbserv1, dbserv2, dbserv3
|
|
user=maxscale
|
|
passwd=96F99AA1315BDC3604B006F427DD9484
|
|
```
|
|
|
|
This completes the definitions required by the service, however listening ports must
|
|
be associated with a service in order to allow network connections. This is done by
|
|
creating a series of listener sections. These sections again are named for the convenience
|
|
of the administrator and should be of type listener with an entry labeled service which
|
|
contains the name of the service to associate the listener with.
|
|
Each service may have multiple listeners.
|
|
|
|
```
|
|
[Galera Listener]
|
|
type=listener
|
|
service=Galera Service
|
|
```
|
|
|
|
A listener must also define the protocol module it will use for the incoming
|
|
network protocol, currently this should be the MariaDBClient protocol for all
|
|
database listeners. The listener may then supply a network port to listen on
|
|
and/or a socket within the file system.
|
|
|
|
```
|
|
[Galera Listener]
|
|
type=listener
|
|
service=Galera Service
|
|
protocol=MariaDBClient
|
|
port=4306
|
|
socket=/tmp/DB.Cluster
|
|
```
|
|
|
|
An address parameter may be given if the listener is required to bind to a particular
|
|
network address when using hosts with multiple network addresses.
|
|
The default behavior is to listen on all network interfaces.
|
|
|
|
The next stage is the configuration is to define the server information.
|
|
This defines how to connect to each of the servers within the cluster, again a section
|
|
is created for each server, with the type set to server, the network address and port to
|
|
connect to and the protocol to use to connect to the server. Currently the protocol for
|
|
all database connections in MariaDBBackend.
|
|
|
|
```
|
|
[dbserv1]
|
|
type=server
|
|
address=192.168.2.1
|
|
port=3306
|
|
protocol=MariaDBBackend
|
|
|
|
[dbserv2]
|
|
type=server
|
|
address=192.168.2.2
|
|
port=3306
|
|
protocol=MariaDBBackend
|
|
|
|
[dbserv3]
|
|
type=server
|
|
address=192.168.2.3
|
|
port=3306
|
|
protocol=MariaDBBackend
|
|
```
|
|
|
|
In order for MariaDB MaxScale to monitor the servers using the correct monitoring
|
|
mechanisms a section should be provided that defines the monitor to use and
|
|
the servers to monitor. Once again a section is created with a symbolic name for
|
|
the monitor, with the type set to monitor. Parameters are added for the module to use,
|
|
the list of servers to monitor and the username and password to use when connecting to
|
|
the servers with the monitor.
|
|
|
|
```
|
|
[Galera Monitor]
|
|
type=monitor
|
|
module=galeramon
|
|
servers=dbserv1, dbserv2, dbserv3
|
|
user=maxscale
|
|
passwd=96F99AA1315BDC3604B006F427DD9484
|
|
```
|
|
|
|
As with the password definition in the server either plain text or encrypted
|
|
passwords may be used.
|
|
|
|
The final stage in the configuration is to add the option service which is used by
|
|
the maxadmin command to connect to MariaDB MaxScale for monitoring and
|
|
administration purposes. This creates a service section and a listener section.
|
|
|
|
```
|
|
[CLI]
|
|
type=service
|
|
router=cli
|
|
[CLI Listener]
|
|
type=listener
|
|
service=CLI
|
|
protocol=maxscaled
|
|
socket=default
|
|
```
|
|
|
|
## Starting MariaDB MaxScale
|
|
|
|
Upon completion of the configuration process MariaDB MaxScale is ready to be
|
|
started for the first time. This may either be done manually by running the
|
|
maxscale command or via the service interface.
|
|
|
|
```
|
|
% maxscale
|
|
```
|
|
|
|
or
|
|
|
|
```
|
|
% service maxscale start
|
|
```
|
|
|
|
Check the error log in /var/log/maxscale to see if any errors are detected in
|
|
the configuration file and to confirm MariaDB MaxScale has been started.
|
|
Also the maxadmin command may be used to confirm that MariaDB MaxScale is running
|
|
and the services, listeners etc have been correctly configured.
|
|
|
|
```
|
|
% maxadmin list services
|
|
|
|
Services.
|
|
--------------------------+----------------------+--------+---------------
|
|
Service Name | Router Module | #Users | Total Sessions
|
|
--------------------------+----------------------+--------+---------------
|
|
Galera Service | readconnroute | 1 | 1
|
|
CLI | cli | 2 | 2
|
|
--------------------------+----------------------+--------+---------------
|
|
% maxadmin list servers
|
|
Servers.
|
|
-------------------+-----------------+-------+-------------+-------------------
|
|
Server | Address | Port | Connections | Status
|
|
-------------------+-----------------+-------+-------------+--------------------
|
|
dbserv1 | 192.168.2.1 | 3306 | 0 | Running, Synced, Master
|
|
dbserv2 | 192.168.2.2 | 3306 | 0 | Running, Synced, Slave
|
|
dbserv3 | 192.168.2.3 | 3306 | 0 | Running, Synced, Slave
|
|
-------------------+-----------------+-------+-------------+--------------------
|
|
```
|
|
|
|
A Galera Cluster is a multi-master clustering technology, however the monitor is able
|
|
to impose false notions of master and slave roles within a Galera Cluster in order to
|
|
facilitate the use of Galera as if it were a standard MariaDB Replication setup.
|
|
This is merely an internal MariaDB MaxScale convenience and has no impact on the behavior of the cluster.
|
|
|
|
You can control which Galera node is the master server by using the _priority_
|
|
mechanism of the Galera Monitor module. For more details,
|
|
read the [Galera Monitor](../Monitors/Galera-Monitor.md) documentation.
|
|
|
|
```
|
|
% maxadmin list listeners
|
|
|
|
Listeners.
|
|
---------------------+--------------------+-----------------+-------+--------
|
|
Service Name | Protocol Module | Address | Port | State
|
|
---------------------+--------------------+-----------------+-------+--------
|
|
Galera Service | MariaDBClient | * | 4306 | Running
|
|
CLI | maxscaled | localhost | 6603 | Running
|
|
---------------------+--------------------+-----------------+-------+--------
|
|
%
|
|
```
|
|
|
|
MariaDB MaxScale is now ready to start accepting client connections and routing
|
|
them to the master or slaves within your cluster. Other configuration options are
|
|
available that can alter the criteria used for routing, such as using weights to
|
|
obtain unequal balancing operations.
|
|
These options may be found in the MariaDB MaxScale Configuration Guide.
|
|
More detail on the use of maxadmin can be found in the document
|
|
["MaxAdmin - The MariaDB MaxScale Administration & Monitoring Client Application"](../Reference/MaxAdmin.md).
|