183 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| function do_ssh() {
 | |
|     ssh -i $maxscale_sshkey -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $maxscale_access_user@$maxscale_IP
 | |
| }
 | |
| 
 | |
| function do_scp() {
 | |
|     scp -i $maxscale_sshkey -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $1 $maxscale_access_user@$maxscale_IP:$2
 | |
| }
 | |
| 
 | |
| function create_config() {
 | |
| 
 | |
|     if [ "$1" == "3" ]
 | |
|     then
 | |
|         nodelist=$node_000_network:3306,$node_001_network:3306,$node_002_network:3306
 | |
|     elif [ "$1" == "2" ]
 | |
|     then
 | |
|         nodelist=$node_000_network:3306,$node_001_network:3306
 | |
|     else
 | |
|         nodelist=$node_000_network:3306,$node_001_network:3306,$node_002_network:3306,$node_003_network:3306
 | |
|     fi
 | |
| 
 | |
|     if [ -n "$new_replication_manager" ]
 | |
|     then
 | |
|         default_section="[Default]"
 | |
|     fi
 | |
| 
 | |
|     cat <<EOF > config.toml
 | |
| # config.toml
 | |
| # Example replication-manager configuration file
 | |
| 
 | |
| $default_section
 | |
| hosts = "$nodelist"
 | |
| user = "skysql:skysql"
 | |
| rpluser = "skysql:skysql"
 | |
| title = "Cluster01"
 | |
| connect-timeout = 1
 | |
| prefmaster = "$node_000_network:3306"
 | |
| interactive = false
 | |
| log-level=1
 | |
| # LOG
 | |
| # ---
 | |
| 
 | |
| logfile = "/var/log/replication-manager.log"
 | |
| verbose = true
 | |
| 
 | |
| # TOPOLOGY
 | |
| # --------
 | |
| 
 | |
| 
 | |
| # Automatically rejoin a failed server to the current master
 | |
| # Slaves will re enter with read-only
 | |
| 
 | |
| readonly = true
 | |
| failover-event-scheduler = false
 | |
| failover-event-status = false
 | |
| 
 | |
| # FAILOVER
 | |
| # --------
 | |
| 
 | |
| # Timeout in seconds between consecutive monitoring
 | |
| # check type can be tcp or agent
 | |
| monitoring-ticker = 1
 | |
| check-type = "tcp"
 | |
| check-replication-filters = true
 | |
| check-binlog-filters = true
 | |
| check-replication-state = true
 | |
| 
 | |
| # Failover after N failures detection
 | |
| # Reset number of failure if server auto recover after N seconds
 | |
| failcount = 1
 | |
| failcount-reset-time = 300
 | |
| 
 | |
| # Cancel failover if already N failover
 | |
| # Cancel failover if last failover was N seconds before
 | |
| # Cancel failover in semi-sync when one slave is not in sync
 | |
| # Cancel failover when replication delay is more than N seconds
 | |
| failover-limit = 100
 | |
| failover-time-limit = 1
 | |
| failover-at-sync = false
 | |
| switchover-at-sync = false
 | |
| maxdelay = 30
 | |
| 
 | |
| # SWITCHOVER
 | |
| # ----------
 | |
| 
 | |
| # In switchover Wait N milliseconds before killing long running transactions
 | |
| # Cancel switchover if transaction running more than N seconds
 | |
| # Cancel switchover if write query running more than N seconds
 | |
| # Cancel switchover if one of the slaves is not synced based on GTID equality
 | |
| wait-kill = 5000
 | |
| wait-trx = 10
 | |
| wait-write-query = 10
 | |
| gtidcheck = true
 | |
| 
 | |
| EOF
 | |
| 
 | |
| }
 | |
| 
 | |
| function install_mrm() {
 | |
| 
 | |
|     # new_replication_manager means that we're using a custom build and it's already installed on the system
 | |
|     if [ -z "$new_replication_manager" ]
 | |
|     then
 | |
|         do_ssh <<EOF
 | |
| command -v wget > /dev/null || sudo yum -y install wget
 | |
| wget -q https://github.com/tanji/replication-manager/releases/download/1.0.2/replication-manager-1.0.2_1_g8faf64d-8faf64d.x86_64.rpm
 | |
| sudo yum -y install ./replication-manager-1.0.2_1_g8faf64d-8faf64d.x86_64.rpm
 | |
| sudo systemctl daemon-reload
 | |
| rm ./replication-manager-1.0.2_1_g8faf64d-8faf64d.x86_64.rpm
 | |
| EOF
 | |
|     fi
 | |
| 
 | |
|     create_config $1
 | |
|     do_scp './config.toml' '~/config.toml'
 | |
| 
 | |
|     do_ssh <<EOF
 | |
| sudo mkdir -p /etc/replication-manager/
 | |
| sudo cp ./config.toml /etc/replication-manager/config.toml
 | |
| sudo systemctl stop replication-manager
 | |
| sudo replication-manager bootstrap --clean-all
 | |
| sudo systemctl restart replication-manager
 | |
| EOF
 | |
| }
 | |
| 
 | |
| function build_mrm() {
 | |
|     do_ssh <<EOF
 | |
| command -v wget > /dev/null || sudo yum -y install wget
 | |
| test -f go1.8.linux-amd64.tar.gz || wget -q https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
 | |
| sudo su -
 | |
| cd /home/vagrant/
 | |
| sudo tar -axf go1.8.linux-amd64.tar.gz -C /usr
 | |
| sudo echo 'export GOROOT=/usr/go/' > /etc/profile.d/go.sh
 | |
| sudo echo 'export GOPATH=/usr/' >> /etc/profile.d/go.sh
 | |
| sudo echo 'export PATH=/$PATH:/usr/go/bin/' >> /etc/profile.d/go.sh
 | |
| source /etc/profile
 | |
| go get github.com/tanji/replication-manager
 | |
| go install github.com/tanji/replication-manager
 | |
| cp /usr/src/github.com/tanji/replication-manager/service/replication-manager.service /etc/systemd/system/
 | |
| exit
 | |
| EOF
 | |
| }
 | |
| 
 | |
| function remove_mrm() {
 | |
|         do_ssh <<EOF
 | |
| sudo systemctl stop replication-manager
 | |
| EOF
 | |
|     if [ -z "$new_replication_manager" ]
 | |
|     then
 | |
|         do_ssh <<EOF
 | |
| sudo yum -y remove replication-manager
 | |
| sudo rm /etc/replication-manager/config.toml
 | |
| sudo rm /var/log/replication-manager.log
 | |
| EOF
 | |
|     fi
 | |
| }
 | |
| 
 | |
| case $1 in
 | |
|     install)
 | |
|         echo "`date` Installing replication-manager"
 | |
|         install_mrm $2
 | |
|         ;;
 | |
| 
 | |
|     configure)
 | |
|         echo "`date` Creating replication-manager configuration"
 | |
|         create_config $2
 | |
|         ;;
 | |
| 
 | |
|     build)
 | |
|         echo "`date` Building replication-manager from source"
 | |
|         build_mrm
 | |
|         ;;
 | |
| 
 | |
|     remove)
 | |
|         echo "`date` Removing replication-manager"
 | |
|         remove_mrm
 | |
|         ;;
 | |
| 
 | |
|     *)
 | |
|         echo "Usage: `basename $0` { install | remove }"
 | |
|         ;;
 | |
| esac
 | 
