|
|
|
#!/bin/bash
|
|
|
|
# forksand-mariadb-setup
|
|
|
|
#
|
|
|
|
# Script template for setting up MySQL compatible MariaDB Cluster
|
|
|
|
# on four nodes: sql1 sql2 sql3 sql4
|
|
|
|
#
|
|
|
|
# https://mariadb.com/kb/en/library/getting-started-with-mariadb-galera-cluster/
|
|
|
|
#
|
|
|
|
# Get repo mirror:
|
|
|
|
# https://downloads.mariadb.org/mariadb/repositories
|
|
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
|
|
# As root
|
|
|
|
apt-get install software-properties-common dirmngr
|
|
|
|
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
|
|
|
|
add-apt-repository 'deb [arch=amd64] http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.3/debian stretch main'
|
|
|
|
apt-get update
|
|
|
|
apt-get install mariadb-server
|
|
|
|
apt-get clean
|
|
|
|
|
|
|
|
# Set config like here:
|
|
|
|
# https://mariadb.org/installing-mariadb-galera-cluster-on-debian-ubuntu/
|
|
|
|
# /etc/mysql/my.cnf
|
|
|
|
# =================================================
|
|
|
|
[galera]
|
|
|
|
# Mandatory settings
|
|
|
|
wsrep_on=ON
|
|
|
|
wsrep_provider=/usr/lib/galera/libgalera_smm.so
|
|
|
|
wsrep_cluster_address="gcomm://10.42.1.171,10.42.1.172,10.42.1.173,10.42.1.174"
|
|
|
|
wsrep_cluster_name="XXX"
|
|
|
|
binlog_format=row
|
|
|
|
default_storage_engine=InnoDB
|
|
|
|
innodb_autoinc_lock_mode=2
|
|
|
|
wsrep_sst_method=rsync
|
|
|
|
query_cache_size=0
|
|
|
|
query_cache_type=0
|
|
|
|
#
|
|
|
|
# Allow server to accept connections on all interfaces.
|
|
|
|
#
|
|
|
|
bind-address=10.42.1.174
|
|
|
|
#
|
|
|
|
# Optional setting
|
|
|
|
#wsrep_slave_threads=1
|
|
|
|
#innodb_flush_log_at_trx_commit=0
|
|
|
|
|
|
|
|
# =================================================
|
|
|
|
|
|
|
|
service mysql stop
|
|
|
|
# on just sql1:
|
|
|
|
galera_new_cluster
|
|
|
|
|
|
|
|
# See if the cluster node comes up:
|
|
|
|
mysql -p -u root -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
|
|
|
|
|
|
|
|
# Start another node, sql2:
|
|
|
|
service mysql start
|
|
|
|
|
|
|
|
# See if it came up:
|
|
|
|
mysql -p -u root -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
|
|
|
|
|
|
|
|
# Then do sql3 sql4
|
|
|
|
service mysql start
|
|
|
|
|
|
|
|
# See if it came up:
|
|
|
|
mysql -p -u root -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
|
|
|
|
|
|
|
|
###############################################
|
|
|
|
# run this to lock down:
|
|
|
|
mysql_secure_installation
|
|
|
|
|
|
|
|
|
|
|
|
###########################################
|
|
|
|
# If all cluster nodes get shutdown at the same time, the cluster needs to be boot strapped again.
|
|
|
|
# On just one node, the most advanced, if known (e.g. sql1):
|
|
|
|
galera_new_cluster
|
|
|
|
|
|
|
|
# On other nodes sql2 sql3 sql4
|
|
|
|
service mysql start
|
|
|
|
|
|
|
|
# Maybe need on most advanced node:
|
|
|
|
# sed -i -e 's/safe_to_bootstrap: 0/safe_to_bootstrap: 1/g' /var/lib/mysql/grastate.dat
|
|
|
|
|
|
|
|
|
|
|
|
##########################
|
|
|
|
# haproxy
|
|
|
|
|
|
|
|
# for code.forksand.com, insert on sql1 (or any of them):
|
|
|
|
# http://galeracluster.com/documentation-webpages/haproxy.html
|
|
|
|
USE mysql;
|
|
|
|
|
|
|
|
# This fails. Not a good way to create users either.
|
|
|
|
CREATE USER 'haproxy'@'10.42.1.163' IDENTIFIED BY 'password';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
SHOW GRANTS FOR 'haproxy'@'10.42.1.163';
|
|
|
|
|
|
|
|
|
|
|
|
# pen proxy instead of haproxy
|
|
|
|
# To run manually:
|
|
|
|
pen -l pen.log -p pen.pid localhost:3306 10.42.1.171:3306 10.42.1.172:3306 10.42.1.173:3306 10.42.1.174:3306
|
|
|
|
|
|
|
|
|
|
|
|
useradd pen
|
|
|
|
echo "d /var/run/pen 0755 pen pen -" > /etc/tmpfiles.d/pen.conf
|
|
|
|
systemd-tmpfiles --create
|
|
|
|
|
|
|
|
mkdir -p /etc/pen
|
|
|
|
cat > /etc/pen/galera.cfg <<EOF
|
|
|
|
server 0 address 10.42.1.171 port 3306
|
|
|
|
server 2 address 10.42.1.172 port 3306
|
|
|
|
server 3 address 10.42.1.173 port 3306
|
|
|
|
server 4 address 10.42.1.174 port 3306
|
|
|
|
debug 1
|
|
|
|
EOF
|
|
|
|
|
|
|
|
cat > /lib/systemd/system/pen-galera.service <<EOF
|
|
|
|
[Unit]
|
|
|
|
Description=Pen load balancer (galera)
|
|
|
|
After=network.target
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
User=pen
|
|
|
|
Type=forking
|
|
|
|
PIDFile=/var/run/pen/galera.pid
|
|
|
|
ExecStart=/usr/bin/pen -u pen -C /var/run/pen/galera.ctl -F /etc/pen/galera.cfg -p /var/run/pen/galera.pid 127.0.0.1:3306
|
|
|
|
Restart=on-failure
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
EOF
|
|
|
|
|
|
|
|
systemctl restart pen-galera
|
|
|
|
systemctl enable pen-galera.service
|
|
|
|
|
|
|
|
|
|
|
|
################
|
|
|
|
# XXX fix on sql1 sql2 sql3 sql4
|
|
|
|
# For firewall, need to open port 4444 for rsync when cluster node needs to sync up.
|
|
|
|
|
|
|
|
# Galera Access Ports
|
|
|
|
-A INPUT -p tcp --dport 4567 -j ACCEPT
|
|
|
|
-A INPUT -p tcp --dport 4568 -j ACCEPT
|
|
|
|
|
|
|
|
# MariaDB Access Port
|
|
|
|
-A INPUT -p tcp --dport 3306 -j ACCEPT
|
|
|
|
|
|
|
|
# rsync port for Galera node synchronization
|
|
|
|
-A INPUT -p tcp --dport 4444 -j ACCEPT
|
|
|
|
|