Format based on README template
This is a move towards a more standardised README. The Series Upgrade section should probably eventually be moved to the series-upgrade appendix in the CDG. Change-Id: I9ca724dc9b3db02dc32f6462f5e24cc453d0dd3e
This commit is contained in:
236
README.md
236
README.md
@@ -5,34 +5,86 @@ MySQL clustering. Percona XtraDB Cluster integrates Percona Server with the
|
|||||||
Galera library of MySQL high availability solutions in a single product package
|
Galera library of MySQL high availability solutions in a single product package
|
||||||
which enables you to create a cost-effective MySQL cluster.
|
which enables you to create a cost-effective MySQL cluster.
|
||||||
|
|
||||||
This charm deploys Percona XtraDB Cluster onto Ubuntu.
|
The percona-cluster charm deploys Percona XtraDB Cluster and provides DB
|
||||||
|
services to those charms that support the 'mysql-shared' interface. The current
|
||||||
|
list of such charms can be obtained from the [Charm
|
||||||
|
Store][charms-requires-mysql-shared] (the charms officially supported by the
|
||||||
|
OpenStack Charms project are published by 'openstack-charmers').
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
This section covers common configuration options. See file `config.yaml` for
|
||||||
|
the full list of options, along with their descriptions and default values.
|
||||||
|
|
||||||
|
#### `max-connections`
|
||||||
|
|
||||||
|
The `max-connections` option set the maximum number of allowed connections.
|
||||||
|
The default is 600. This is an important option and is discussed in the Memory
|
||||||
|
section below.
|
||||||
|
|
||||||
|
#### `min-cluster-size`
|
||||||
|
|
||||||
|
The `min-cluster-size` option sets the number of percona-cluster units required
|
||||||
|
to form its cluster. It is best practice to use this option as doing so ensures
|
||||||
|
that the charm will wait until the cluster is up before accepting relations
|
||||||
|
from other client applications.
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
To deploy this charm:
|
To deploy a single percona-cluster unit:
|
||||||
|
|
||||||
juju deploy percona-cluster
|
juju deploy percona-cluster
|
||||||
|
|
||||||
Passwords required for the correct operation of the deployment are automatically
|
To make use of DB services, simply add a relation between percona-cluster and
|
||||||
generated and stored by the lead unit (typically the first unit).
|
an application that supports the 'mysql-shared' interface. For instance:
|
||||||
|
|
||||||
To expand the deployment:
|
juju add-relation percona-cluster:shared-db keystone:shared-db
|
||||||
|
|
||||||
juju add-unit -n 2 percona-cluster
|
Passwords required for the correct operation of the deployment are
|
||||||
|
automatically generated and stored by the application leader. The root password
|
||||||
See notes in the 'HA/Clustering' section on safely deploying a PXC cluster
|
for mysql can be retrieved using the following command:
|
||||||
in a single action.
|
|
||||||
|
|
||||||
The root password for mysql can be retrieved using the following command:
|
|
||||||
|
|
||||||
juju run --unit percona-cluster/0 leader-get root-password
|
juju run --unit percona-cluster/0 leader-get root-password
|
||||||
|
|
||||||
This is only usable from within one of the units within the deployment
|
Root user DB access is only usable from within one of the deployed units
|
||||||
(access to root is restricted to localhost only).
|
(access to root is restricted to localhost only).
|
||||||
|
|
||||||
## Memory Configuration
|
## High availability
|
||||||
|
|
||||||
|
When more than one unit is deployed with the hacluster application the charm
|
||||||
|
will bring up an HA active/active cluster. The `min-cluster-size` option
|
||||||
|
should be used (see description above).
|
||||||
|
|
||||||
|
To deploy a three-node cluster:
|
||||||
|
|
||||||
|
juju deploy -n 3 --config min-cluster-size=3 percona-cluster
|
||||||
|
|
||||||
|
There are two mutually exclusive high availability options: using virtual IP(s)
|
||||||
|
or DNS. In both cases the hacluster subordinate charm is used to provide the
|
||||||
|
Corosync and Pacemaker backend HA functionality.
|
||||||
|
|
||||||
|
See the [OpenStack high availability][cdg-app-ha-apps] appendix in the
|
||||||
|
[OpenStack Charms Deployment Guide][cdg] for details.
|
||||||
|
|
||||||
|
## Actions
|
||||||
|
|
||||||
|
This section lists Juju [actions][juju-docs-actions] supported by the charm.
|
||||||
|
Actions allow specific operations to be performed on a per-unit basis. To
|
||||||
|
display action descriptions run `juju actions percona-cluster`. If the charm is
|
||||||
|
not deployed then see file `actions.yaml`.
|
||||||
|
|
||||||
|
* `backup`
|
||||||
|
* `bootstrap-pxc`
|
||||||
|
* `complete-cluster-series-upgrade`
|
||||||
|
* `mysqldump`
|
||||||
|
* `notify-bootstrapped`
|
||||||
|
* `pause`
|
||||||
|
* `resume`
|
||||||
|
* `set-pxc-strict-mode`
|
||||||
|
|
||||||
|
## Memory
|
||||||
|
|
||||||
Percona Cluster is extremely memory sensitive. Setting memory values too low
|
Percona Cluster is extremely memory sensitive. Setting memory values too low
|
||||||
will give poor performance. Setting them too high will create problems that are
|
will give poor performance. Setting them too high will create problems that are
|
||||||
@@ -42,87 +94,34 @@ configurations.
|
|||||||
|
|
||||||
The Percona Cluster charm needs to be able to be deployed in small low memory
|
The Percona Cluster charm needs to be able to be deployed in small low memory
|
||||||
development environments as well as high performance production environments.
|
development environments as well as high performance production environments.
|
||||||
The charm configuration opinionated defaults favor the developer environment in
|
The charm configuration opinionated defaults favour the developer environment
|
||||||
order to ease initial testing. Production environments need to consider
|
in order to ease initial testing. Production environments need to consider
|
||||||
carefully the memory requirements for the hardware or cloud in use. Consult a
|
carefully the memory requirements for the hardware or cloud in use. Consult a
|
||||||
MySQL memory calculator [2] to understand the implications of the values.
|
[MySQL memory calculator][mysql-memory-calculator] to understand the
|
||||||
|
implications of the values.
|
||||||
|
|
||||||
Between the 5.5 and 5.6 releases a significant default was changed.
|
Between the 5.5 and 5.6 releases a significant default was changed. The
|
||||||
The performance schema [1] defaulted to on for 5.6 and later. This allocates
|
[performance schema][upstream-performance-schema] defaulted to on for 5.6 and
|
||||||
all the memory that would be required to handle max-connections plus several
|
later. This allocates all the memory that would be required to handle
|
||||||
other memory settings. With 5.5 memory was allocated during runtime as needed.
|
`max-connections` plus several other memory settings. With 5.5 memory was
|
||||||
|
allocated during run-time as needed.
|
||||||
|
|
||||||
The charm now makes performance schema configurable and defaults to off (False).
|
The charm now makes performance schema configurable and defaults to off
|
||||||
With the performance schema turned off memory is allocated when needed during
|
(False). With the performance schema turned off memory is allocated when needed
|
||||||
run time. It is important to understand this can lead to run time memory
|
during run-time. It is important to understand this can lead to run-time memory
|
||||||
exhaustion if the configuration values are set too high. Consult a MySQL memory
|
exhaustion if the configuration values are set too high. Consult a [MySQL
|
||||||
calculator [2] to understand the implications of the values.
|
memory calculator][mysql-memory-calculator] to understand the implications of
|
||||||
|
the values.
|
||||||
|
|
||||||
Particularly consider the max-connections setting, this value is a balance
|
The value of `max-connections` should strike a balance between connection
|
||||||
between connection exhaustion and memory exhaustion. Occasionally connection
|
exhaustion and memory exhaustion. Occasionally connection exhaustion occurs in
|
||||||
exhaustion occurs in large production HA clouds with max-connections less than
|
large production HA clouds with a value of less than 2000. The common practice
|
||||||
2000. The common practice became to set max-connections unrealistically high
|
became to set it unrealistically high (near 10k or 20k). In the move to 5.6 on
|
||||||
near 10k or 20k. In the move to 5.6 on Xenial this became a problem as Percona
|
Xenial this became a problem as Percona would fail to start up or behave
|
||||||
would fail to start up or behave erratically as memory exhaustion occurred on
|
erratically as memory exhaustion occurred on the host due to performance schema
|
||||||
the host due to performance schema being turned on. Even with the default now
|
being turned on. Even with the default now turned off this value should be
|
||||||
turned off this value should be carefully considered against the production
|
carefully considered against the production requirements and resources
|
||||||
requirements and resources available.
|
available.
|
||||||
|
|
||||||
[1] http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-6.html#mysqld-5-6-6-performance-schema
|
|
||||||
[2] http://www.mysqlcalculator.com/
|
|
||||||
|
|
||||||
## HA/Clustering
|
|
||||||
|
|
||||||
When more than one unit of the charm is deployed with the hacluster charm
|
|
||||||
the percona charm will bring up an Active/Active cluster. The process of
|
|
||||||
clustering the units together takes some time. Due to the nature of
|
|
||||||
asynchronous hook execution it is possible client relationship hooks may
|
|
||||||
be executed before the cluster is complete. In some cases, this can lead
|
|
||||||
to client charm errors.
|
|
||||||
|
|
||||||
To guarantee client relation hooks will not be executed until clustering is
|
|
||||||
completed use the min-cluster-size configuration setting:
|
|
||||||
|
|
||||||
juju deploy -n 3 percona-cluster
|
|
||||||
juju config percona-cluster min-cluster-size=3
|
|
||||||
|
|
||||||
When min-cluster-size is not set the charm will still cluster, however,
|
|
||||||
there are no guarantees client relation hooks will not execute before it is
|
|
||||||
complete.
|
|
||||||
|
|
||||||
Single unit deployments behave as expected.
|
|
||||||
|
|
||||||
There are two mutually exclusive high availability options: using virtual
|
|
||||||
IP(s) or DNS. In both cases, a relationship to hacluster is required which
|
|
||||||
provides the corosync back end HA functionality.
|
|
||||||
|
|
||||||
To use virtual IP(s) the clustered nodes must be on the same subnet such that
|
|
||||||
the VIP is a valid IP on the subnet for one of the node's interfaces and each
|
|
||||||
node has an interface in said subnet. The VIP becomes a highly-available API
|
|
||||||
endpoint.
|
|
||||||
|
|
||||||
At a minimum, the config option 'vip' must be set in order to use virtual IP
|
|
||||||
HA. If multiple networks are being used, a VIP should be provided for each
|
|
||||||
network, separated by spaces. Optionally, vip_iface or vip_cidr may be
|
|
||||||
specified.
|
|
||||||
|
|
||||||
To use DNS high availability there are several prerequisites. However, DNS HA
|
|
||||||
does not require the clustered nodes to be on the same subnet.
|
|
||||||
Currently the DNS HA feature is only available for MAAS 2.0 or greater
|
|
||||||
environments. MAAS 2.0 requires Juju 2.0 or greater. The clustered nodes must
|
|
||||||
have static or "reserved" IP addresses registered in MAAS. The DNS hostname(s)
|
|
||||||
must be pre-registered in MAAS before use with DNS HA.
|
|
||||||
|
|
||||||
At a minimum, the config option 'dns-ha' must be set to true, the
|
|
||||||
'os-access-hostname' must be set, and the 'access' binding must be
|
|
||||||
defined in order to use DNS HA.
|
|
||||||
|
|
||||||
The charm will throw an exception in the following circumstances:
|
|
||||||
|
|
||||||
- If neither 'vip' nor 'dns-ha' is set and the charm is related to hacluster
|
|
||||||
- If both 'vip' and 'dns-ha' are set, as they are mutually exclusive
|
|
||||||
- If 'dns-ha' is set and 'os-access-hostname' is not set
|
|
||||||
- If the 'access' binding is not set and 'dns-ha' is set, consumers of the db may not be allowed to connect
|
|
||||||
|
|
||||||
## MySQL asynchronous replication
|
## MySQL asynchronous replication
|
||||||
|
|
||||||
@@ -138,26 +137,26 @@ setup master-slave replication of "example1" and "example2" databases between
|
|||||||
|
|
||||||
and then relate them:
|
and then relate them:
|
||||||
|
|
||||||
juju relate pxc1:master pxc2:slave
|
juju add-relation pxc1:master pxc2:slave
|
||||||
|
|
||||||
In order to setup master-master replication, add another relation:
|
In order to setup master-master replication, add another relation:
|
||||||
|
|
||||||
juju relate pxc2:master pxc1:slave
|
juju add-relation pxc2:master pxc1:slave
|
||||||
|
|
||||||
In the same way circular replication can be setup between multiple clusters.
|
In the same way circular replication can be setup between multiple clusters.
|
||||||
|
|
||||||
## Network Space support
|
## Network Space support
|
||||||
|
|
||||||
This charm supports the use of Juju Network Spaces, allowing the charm to be bound
|
This charm supports the use of Juju Network Spaces, allowing the charm to be
|
||||||
to network space configurations managed directly by Juju. This is only supported
|
bound to network space configurations managed directly by Juju. This is only
|
||||||
with Juju 2.0 and above.
|
supported with Juju 2.0 and above.
|
||||||
|
|
||||||
You can ensure that database connections and cluster peer communication are bound to
|
You can ensure that database connections and cluster peer communication are
|
||||||
specific network spaces by binding the appropriate interfaces:
|
bound to specific network spaces by binding the appropriate interfaces:
|
||||||
|
|
||||||
juju deploy percona-cluster --bind "shared-db=internal-space cluster=internal-space"
|
juju deploy percona-cluster --bind "shared-db=internal-space cluster=internal-space"
|
||||||
|
|
||||||
alternatively these can also be provided as part of a juju native bundle configuration:
|
Alternatively, configuration can be provided as part of a bundle:
|
||||||
|
|
||||||
percona-cluster:
|
percona-cluster:
|
||||||
charm: cs:xenial/percona-cluster
|
charm: cs:xenial/percona-cluster
|
||||||
@@ -171,12 +170,12 @@ within the percona-cluster deployment should use for communication with each
|
|||||||
other; the 'shared-db' endpoint binding is used to determine which network
|
other; the 'shared-db' endpoint binding is used to determine which network
|
||||||
space should be used for access to MySQL databases services from other charms.
|
space should be used for access to MySQL databases services from other charms.
|
||||||
|
|
||||||
**NOTE:** Spaces must be configured in the underlying provider prior to
|
> **Note**: Spaces must be configured in the underlying provider prior to
|
||||||
attempting to use them.
|
attempting to use them.
|
||||||
|
|
||||||
**NOTE:** Existing deployments using the access-network configuration option
|
> **Note**: Existing deployments using the access-network configuration option
|
||||||
will continue to function; this option is preferred over any network space
|
will continue to function; this option is preferred over any network space
|
||||||
binding provided for the 'shared-db' relation if set.
|
binding provided for the 'shared-db' relation if set.
|
||||||
|
|
||||||
# Limitations
|
# Limitations
|
||||||
|
|
||||||
@@ -242,12 +241,11 @@ This also updates mysql configuration with all peers in the cluster.
|
|||||||
juju set-series percona-cluster xenial
|
juju set-series percona-cluster xenial
|
||||||
juju config mysql source=distro
|
juju config mysql source=distro
|
||||||
|
|
||||||
## Documentation
|
## Upstream documentation
|
||||||
|
|
||||||
* https://www.percona.com/doc/percona-xtradb-cluster/LATEST/howtos/upgrade_guide.html
|
|
||||||
* https://www.percona.com/doc/percona-xtradb-cluster/5.6/upgrading_guide_55_56.html
|
|
||||||
* https://www.percona.com/blog/2014/09/01/galera-replication-how-to-recover-a-pxc-cluster/
|
|
||||||
|
|
||||||
|
* [Upgrading Percona XtraDB Cluster][upstream-upgrading-percona]
|
||||||
|
* [Percona XtraDB Cluster In-Place Upgrading Guide: From 5.5 to 5.6][upstream-upgrading-55-to-56]
|
||||||
|
* [Galera replication - how to recover a PXC cluster][upstream-recovering]
|
||||||
|
|
||||||
# Cold Boot
|
# Cold Boot
|
||||||
|
|
||||||
@@ -342,4 +340,24 @@ state:
|
|||||||
percona-cluster/2 active idle 3 10.5.0.27 3306/tcp Unit is ready
|
percona-cluster/2 active idle 3 10.5.0.27 3306/tcp Unit is ready
|
||||||
hacluster/2 active idle 10.5.0.27 Unit is ready and clustered
|
hacluster/2 active idle 10.5.0.27 Unit is ready and clustered
|
||||||
|
|
||||||
The percona-cluster is now back to a clustered and healthy state.
|
The percona-cluster application is now back to a clustered and healthy state.
|
||||||
|
|
||||||
|
# Bugs
|
||||||
|
|
||||||
|
Please report bugs on [Launchpad][lp-bugs-charm-percona-cluster].
|
||||||
|
|
||||||
|
For general charm questions refer to the [OpenStack Charm Guide][cg].
|
||||||
|
|
||||||
|
<!-- LINKS -->
|
||||||
|
|
||||||
|
[cg]: https://docs.openstack.org/charm-guide
|
||||||
|
[cdg]: https://docs.openstack.org/project-deploy-guide/charm-deployment-guide
|
||||||
|
[cdg-app-ha-apps]: https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/latest/app-ha.html#ha-applications
|
||||||
|
[charms-requires-mysql-shared]: https://jaas.ai/search?requires=mysql-shared
|
||||||
|
[mysql-memory-calculator]: http://www.mysqlcalculator.com/
|
||||||
|
[lp-bugs-charm-percona-cluster]: https://bugs.launchpad.net/charm-percona-cluster/+filebug
|
||||||
|
[upstream-performance-schema]: http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-6.html#mysqld-5-6-6-performance-schema
|
||||||
|
[upstream-upgrading-percona]: https://www.percona.com/doc/percona-xtradb-cluster/LATEST/howtos/upgrade_guide.html
|
||||||
|
[upstream-upgrading-55-to-56]: https://www.percona.com/doc/percona-xtradb-cluster/5.6/upgrading_guide_55_56.html
|
||||||
|
[upstream-recovering]: https://www.percona.com/blog/2014/09/01/galera-replication-how-to-recover-a-pxc-cluster/
|
||||||
|
[juju-docs-actions]: https://jaas.ai/docs/actions
|
||||||
|
Reference in New Issue
Block a user