Galera container
This changes are providing support for galera cluster. It's important for project to has got support for database cluster as a one of the steps to providing High Avability(HA) in Kolla project Change-Id: If51bb88ab05972d3b8aa8abbbbd2a5480213a10e Implemented: blueprint galera-container
This commit is contained in:
parent
0c5d6575ed
commit
abbee7dbca
15
compose/galeradb.yml
Normal file
15
compose/galeradb.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
galeradbdata:
|
||||||
|
image: kollaglue/centos-rdo-mariadb-data:latest
|
||||||
|
name: galeradb-data
|
||||||
|
restart: on-failure
|
||||||
|
|
||||||
|
galeraapp:
|
||||||
|
image: kollaglue/centos-rdo-galera:latest
|
||||||
|
name: galera-app
|
||||||
|
restart: always
|
||||||
|
net: "host"
|
||||||
|
privileged: true
|
||||||
|
env_file:
|
||||||
|
- openstack.env
|
||||||
|
volumes_from:
|
||||||
|
- galeradbdata
|
27
docker/centos/binary/galera/Dockerfile
Normal file
27
docker/centos/binary/galera/Dockerfile
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
FROM %%KOLLA_NAMESPACE%%/%%KOLLA_PREFIX%%base:%%KOLLA_TAG%%
|
||||||
|
MAINTAINER Kolla Project (https://launchpad.net/kolla)
|
||||||
|
|
||||||
|
RUN echo "[mariadb]" > /etc/yum.repos.d/MariaDB.repo && \
|
||||||
|
echo "name = MariaDB" >> /etc/yum.repos.d/MariaDB.repo && \
|
||||||
|
echo "baseurl = http://yum.mariadb.org/10.0/centos7-amd64" >> /etc/yum.repos.d/MariaDB.repo && \
|
||||||
|
echo "gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB" >> /etc/yum.repos.d/MariaDB.repo && \
|
||||||
|
echo "gpgcheck=1" >> /etc/yum.repos.d/MariaDB.repo && \
|
||||||
|
yum install -y \
|
||||||
|
http://www.percona.com/redir/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm && \
|
||||||
|
sed -i 's|$releasever|centos/latest|g' /etc/yum.repos.d/percona-release.repo && \
|
||||||
|
yum install -y \
|
||||||
|
MariaDB-Galera-server \
|
||||||
|
MariaDB-client \
|
||||||
|
rsync \
|
||||||
|
galera \
|
||||||
|
socat \
|
||||||
|
hostname \
|
||||||
|
percona-xtrabackup \
|
||||||
|
pv \
|
||||||
|
tar \
|
||||||
|
expect
|
||||||
|
|
||||||
|
COPY config-galera.sh /opt/kolla/config-galera.sh
|
||||||
|
COPY start.sh /start.sh
|
||||||
|
|
||||||
|
CMD ["/start.sh"]
|
1
docker/centos/binary/galera/build
Symbolic link
1
docker/centos/binary/galera/build
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../tools/build-docker-image
|
94
docker/centos/binary/galera/config-galera.sh
Executable file
94
docker/centos/binary/galera/config-galera.sh
Executable file
@ -0,0 +1,94 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /opt/kolla/kolla-common.sh
|
||||||
|
|
||||||
|
check_required_vars DB_CLUSTER_BIND_ADDRESS DB_CLUSTER_NAME DB_CLUSTER_NODES \
|
||||||
|
DB_ROOT_PASSWORD DB_CLUSTER_WSREP_METHOD
|
||||||
|
|
||||||
|
CFG=/etc/my.cnf.d/server.cnf
|
||||||
|
DB_CLUSTER_INIT_SQL=/tmp/mysql-first-time.sql
|
||||||
|
|
||||||
|
function configure_files {
|
||||||
|
crudini --set $CFG mariadb bind-address "${DB_CLUSTER_BIND_ADDRESS}"
|
||||||
|
crudini --set $CFG mariadb binlog_format "ROW"
|
||||||
|
crudini --set $CFG mariadb character-set-server "utf8"
|
||||||
|
crudini --set $CFG mariadb collation-server "utf8_general_ci"
|
||||||
|
crudini --set $CFG mariadb datadir "/var/lib/mysql"
|
||||||
|
crudini --set $CFG mariadb default-storage-engine "innodb"
|
||||||
|
crudini --set $CFG mariadb init-connect "'SET NAMES utf8'"
|
||||||
|
crudini --set $CFG mariadb innodb_autoinc_lock_mode "2"
|
||||||
|
crudini --set $CFG mariadb innodb_file_per_table 1
|
||||||
|
crudini --set $CFG mariadb innodb_flush_log_at_trx_commit "2"
|
||||||
|
crudini --set $CFG mariadb innodb_locks_unsafe_for_binlog "1"
|
||||||
|
crudini --set $CFG mariadb innodb_log_file_size "100M"
|
||||||
|
crudini --set $CFG mariadb query_cache_size "0"
|
||||||
|
crudini --set $CFG mariadb query_cache_type "0"
|
||||||
|
crudini --set $CFG mariadb wsrep_cluster_address "gcomm://${DB_CLUSTER_NODES}"
|
||||||
|
crudini --set $CFG mariadb wsrep_cluster_name "${DB_CLUSTER_NAME}"
|
||||||
|
crudini --set $CFG mariadb wsrep_provider "/usr/lib64/galera/libgalera_smm.so"
|
||||||
|
crudini --set $CFG mariadb wsrep_sst_auth "'root:${DB_ROOT_PASSWORD}'"
|
||||||
|
crudini --set $CFG mariadb wsrep_sst_method "${DB_CLUSTER_WSREP_METHOD}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function bootstrap_database() {
|
||||||
|
mysqld_safe &
|
||||||
|
# Waiting for deamon
|
||||||
|
sleep 10
|
||||||
|
expect -c '
|
||||||
|
set timeout 10
|
||||||
|
spawn mysql_secure_installation
|
||||||
|
expect "Enter current password for root (enter for none):"
|
||||||
|
send "\r"
|
||||||
|
expect "Set root password?"
|
||||||
|
send "y\r"
|
||||||
|
expect "New password:"
|
||||||
|
send "'"${DB_ROOT_PASSWORD}"'\r"
|
||||||
|
expect "Re-enter new password:"
|
||||||
|
send "'"${DB_ROOT_PASSWORD}"'\r"
|
||||||
|
expect "Remove anonymous users?"
|
||||||
|
send "y\r"
|
||||||
|
expect "Disallow root login remotely?"
|
||||||
|
send "n\r"
|
||||||
|
expect "Remove test database and access to it?"
|
||||||
|
send "y\r"
|
||||||
|
expect "Reload privilege tables now?"
|
||||||
|
send "y\r"
|
||||||
|
expect eof'
|
||||||
|
mysqladmin -p"${DB_ROOT_PASSWORD}" shutdown
|
||||||
|
}
|
||||||
|
|
||||||
|
function configure_db {
|
||||||
|
bootstrap_database
|
||||||
|
|
||||||
|
echo "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '$DB_ROOT_PASSWORD' ;" > $DB_CLUSTER_INIT_SQL
|
||||||
|
|
||||||
|
if [ "$MARIADB_DATABASE" ]; then
|
||||||
|
echo "CREATE DATABASE IF NOT EXISTS $MARIADB_DATABASE ;" >> $DB_CLUSTER_INIT_SQL
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$MARIADB_USER" -a "$MARIADB_PASSWORD" ]; then
|
||||||
|
echo "CREATE USER '$MARIADB_USER'@'%' IDENTIFIED BY '$MARIADB_PASSWORD' ;" >> $DB_CLUSTER_INIT_SQL
|
||||||
|
|
||||||
|
if [ "$MARIADB_DATABASE" ]; then
|
||||||
|
echo "GRANT ALL ON $MARIADB_DATABASE.* TO '$MARIADB_USER'@'%' ;" >> $DB_CLUSTER_INIT_SQL
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "FLUSH PRIVILEGES" >> $DB_CLUSTER_INIT_SQL
|
||||||
|
}
|
||||||
|
|
||||||
|
function populate_db {
|
||||||
|
if [[ $(ls /var/lib/mysql) == "" ]]; then
|
||||||
|
echo "POPULATING NEW DB"
|
||||||
|
mysql_install_db
|
||||||
|
chown -R mysql /var/lib/mysql
|
||||||
|
else
|
||||||
|
echo "DB ALREADY EXISTS"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function prepare_db {
|
||||||
|
populate_db
|
||||||
|
configure_db
|
||||||
|
configure_files
|
||||||
|
}
|
14
docker/centos/binary/galera/start.sh
Executable file
14
docker/centos/binary/galera/start.sh
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /opt/kolla/kolla-common.sh
|
||||||
|
. /opt/kolla/config-galera.sh
|
||||||
|
|
||||||
|
check_required_vars DB_CLUSTER_INIT_DB
|
||||||
|
prepare_db
|
||||||
|
|
||||||
|
if [[ "${DB_CLUSTER_INIT_DB}" == "true" ]] && ! [[ -a /var/lib/mysql/cluster.exists ]]; then
|
||||||
|
DB_CLUSTER_IS_MASTER_NODE="--wsrep-new-cluster"
|
||||||
|
touch /var/lib/mysql/cluster.exists
|
||||||
|
fi
|
||||||
|
|
||||||
|
mysqld_safe --init-file=$DB_CLUSTER_INIT_SQL $DB_CLUSTER_IS_MASTER_NODE
|
@ -56,6 +56,11 @@ all containers. This allows a simple method of ensuring every type of node
|
|||||||
ADMIN_USER_PASSWORD=<steakfordinner> - The admin user password
|
ADMIN_USER_PASSWORD=<steakfordinner> - The admin user password
|
||||||
ADMIN_TENANT_NAME=<admin> - tenant name
|
ADMIN_TENANT_NAME=<admin> - tenant name
|
||||||
FLAT_INTERFACE=<eth1> - nova networking flat interface device name
|
FLAT_INTERFACE=<eth1> - nova networking flat interface device name
|
||||||
|
DB_CLUSTER_BIND_ADDRESS=<subnet address/IP> - Defaults to 0.0.0.0. Listening address for database.
|
||||||
|
DB_CLUSTER_INIT_DB=<true|false> - Defaults to false. Configures if Galera should be initialized.
|
||||||
|
DB_CLUSTER_NAME=<cluster-name>. Defaults to kollacluster. Galera cluster name.
|
||||||
|
DB_CLUSTER_NODES=<cluster-nodes>. Defaults to none. List of nodes in Galera cluster, separated by comma(IP address or hostname).
|
||||||
|
DB_CLUSTER_WSREP_METHOD=<rsync|mysqldump|xtremebackup|xtremebackup-v2> - Defaults to mysqldump. Galera replication method.
|
||||||
GLANCE_API_SERVICE_HOST=<IP> - address where glance API is running>
|
GLANCE_API_SERVICE_HOST=<IP> - address where glance API is running>
|
||||||
GLANCE_DB_NAME=<glance> - DB name of glance service
|
GLANCE_DB_NAME=<glance> - DB name of glance service
|
||||||
GLANCE_DB_PASSWORD=<password> - <Glance DB password>
|
GLANCE_DB_PASSWORD=<password> - <Glance DB password>
|
||||||
|
12
tools/genenv
12
tools/genenv
@ -27,6 +27,13 @@ HOST_IP=$MY_IP
|
|||||||
MARIADB_ROOT_PASSWORD=kolla
|
MARIADB_ROOT_PASSWORD=kolla
|
||||||
PASSWORD=12345
|
PASSWORD=12345
|
||||||
|
|
||||||
|
# Galera
|
||||||
|
DB_CLUSTER_BIND_ADDRESS=0.0.0.0
|
||||||
|
DB_CLUSTER_INIT_DB=false
|
||||||
|
DB_CLUSTER_NAME=kollacluster
|
||||||
|
DB_CLUSTER_NODES=
|
||||||
|
DB_CLUSTER_WSREP_METHOD=mysqldump
|
||||||
|
|
||||||
# Host
|
# Host
|
||||||
ADMIN_TENANT_NAME=admin
|
ADMIN_TENANT_NAME=admin
|
||||||
PUBLIC_IP=$HOST_IP
|
PUBLIC_IP=$HOST_IP
|
||||||
@ -253,6 +260,11 @@ DESIGNATE_POOLMAN_TARGETS=$DESIGNATE_POOLMAN_TARGETS
|
|||||||
DESIGNATE_POOLMAN_NSS=$DESIGNATE_POOLMAN_NSS
|
DESIGNATE_POOLMAN_NSS=$DESIGNATE_POOLMAN_NSS
|
||||||
DESIGNATE_INITDB=$DESIGNATE_INITDB
|
DESIGNATE_INITDB=$DESIGNATE_INITDB
|
||||||
DESIGNATE_ALLOW_RECURSION=$DESIGNATE_ALLOW_RECURSION
|
DESIGNATE_ALLOW_RECURSION=$DESIGNATE_ALLOW_RECURSION
|
||||||
|
DB_CLUSTER_BIND_ADDRESS=$DB_CLUSTER_BIND_ADDRESS
|
||||||
|
DB_CLUSTER_INIT_DB=$DB_CLUSTER_INIT_DB
|
||||||
|
DB_CLUSTER_NAME=$DB_CLUSTER_NAME
|
||||||
|
DB_CLUSTER_NODES=$DB_CLUSTER_NODES
|
||||||
|
DB_CLUSTER_WSREP_METHOD=$DB_CLUSTER_WSREP_METHOD
|
||||||
EOF
|
EOF
|
||||||
echo Please customize your FLAT_INTERFACE to a different network then your
|
echo Please customize your FLAT_INTERFACE to a different network then your
|
||||||
echo main network. The FLAT_INTERFACE is used for inter-VM communication.
|
echo main network. The FLAT_INTERFACE is used for inter-VM communication.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user