You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							142 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
	
	
							142 lines
						
					
					
						
							3.8 KiB
						
					
					
				| #!/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.
 | |
| 
 | |
| -A INPUT -p tcp --dport 4444 -j ACCEPT
 | |
| 
 |