Title here
Summary here
docker network create --driver=bridge --subnet 172.16.0.0/16 galera-netfor n in 1 2 3; do docker volume create galera-node$n-data; done
# output
galera-node1-data
galera-node2-data
galera-node3-datamkdir -p ~/containers/galera_cluster/galera-node{1,2,3}-confcat <<EOF > galera-node1-conf/60-galera.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://"
wsrep_sst_method=rsync
wsrep_node_name="galera-node1"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOFcat <<EOF > galera-node2-conf/60-galera.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://172.16.0.101,172.16.0.102,172.16.0.103"
wsrep_sst_method=rsync
wsrep_node_name="galera-node2"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOFcat <<EOF > galera-node3-conf/60-galera.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://172.16.0.101,172.16.0.102,172.16.0.103"
wsrep_sst_method=rsync
wsrep_node_name="galera-node3"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOFdocker run -it -d --net galera-net --name galera-node1 -h galera-node1 --ip 172.16.0.101 \
-e MYSQL_ROOT_PASSWORD=rootpass -e GALERA_NEW_CLUSTER=1 -v galera-node1-data:/var/lib/mysql \
-v ~/containers/databases/galera_cluster/galera-node1-conf/60-galera.cnf:/etc/mysql/mariadb.conf.d/60-galera.cnf:Z \
docker.io/library/mariadb:11.4docker exec -it galera-node1 mariadb -h 172.16.0.101 -uroot -prootpass -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';"
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 1 |
+--------------------+-------+docker stop galera-node1
docker rm galera-node1[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
# wsrep_cluster_address="gcomm://" # <= comment this line out
wsrep_cluster_address="gcomm://172.16.0.101,172.16.0.102,172.16.0.103" # <= add all the galera node ip addresses
wsrep_sst_method=rsync
wsrep_node_name="galera-node1"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2docker run -it -d --net galera-net --name galera-node1 -h galera-node1 --ip 172.16.0.101 \
-e MYSQL_ROOT_PASSWORD=rootpass -e GALERA_NEW_CLUSTER=1 -v galera-node1-data:/var/lib/mysql \
-v ~/containers/databases/galera_cluster/galera-node1-conf/60-galera.cnf:/etc/mysql/mariadb.conf.d/60-galera.cnf:Z \
docker.io/library/mariadb:11.4docker run -it -d --net galera-net --name galera-node2 -h galera-node2 --ip 172.16.0.102 \
-e MYSQL_ROOT_PASSWORD=rootpass -v galera-node2-data:/var/lib/mysql \
-v ~/containers/databases/galera_cluster/galera-node2-conf/60-galera.cnf:/etc/mysql/mariadb.conf.d/60-galera.cnf:Z \
docker.io/library/mariadb:11.4docker run -it -d --net galera-net --name galera-node3 -h galera-node3 --ip 172.16.0.103 \
-e MYSQL_ROOT_PASSWORD=rootpass -v galera-node3-data:/var/lib/mysql \
-v ~/containers/databases/galera_cluster/galera-node3-conf/60-galera.cnf:/etc/mysql/mariadb.conf.d/60-galera.cnf:Z \
docker.io/library/mariadb:11.4docker exec -it galera_node1 mariadb -h 172.16.0.101 -uroot -prootpass -e "SHOW GLOBAL STATUS LIKE 'wsrep_%';"
docker exec -it galera_node1 mariadb -h 172.16.0.101 -uroot -prootpass -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';"This has a lot of the important cluster information builtin already.
docker pull registry.gitlab.com/myteam/galera_status:latestdocker run -it --rm registry.gitlab.com/andrewmercer/galera_status:latest python galera_status.py -c all
docker run -it --rm registry.gitlab.com/andrewmercer/galera_status:latest python galera_status.py --check [ option ]WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1docker inspect galera-node1 | grep Mounts -A 5sudo vi /var/lib/docker/volumes/galera-node1-data/_data/grastate.datNext time you stop the containers, make sure the node that initialized the cluster is the last to leave.
Find out which node is the node that needs to bootstrap the cluster (it’s not always the one used initially to bootstrap the cluster).
for container in galera-node1 galera-node2 galera-node3; do docker stop $container && docker rm $container; done
docker network rm galera-net
for volume in galera-node1-data galera-node2-data galera-node3-data; do docker volume rm $volume; done