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.
proxysql/docker/scenarios/repl1/configure.sh

135 lines
5.0 KiB

set -e
. ./vars
declare -a AIPS
declare -a DIPS
declare -a PIPS
echo Retrieving IPs
for i in `seq 1 ${NUMSERVERS}` ; do
DIPS[$i]=`$USESUDO docker inspect -f '{{.NetworkSettings.IPAddress}}' db$i`
done
configure_mysql() {
echo Setting my.cnf
for i in `seq 1 ${NUMSERVERS}` ; do
$USESUDO docker exec db$i bash -c "echo -e \"[client]\npassword=$ROOTPASS\" > /root/.my.cnf"
done
echo "retrieving GTID executed"
GES=`$USESUDO docker exec -it db1 mysql -e "SHOW GLOBAL VARIABLES LIKE 'gtid_executed'" -NB | awk '{print $2}'`
echo Setting grants on db1
$USESUDO docker exec db1 mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO root@$DOCNET IDENTIFIED BY \"$ROOTPASS\" WITH GRANT OPTION"
for h in ${DIPS[*]} ; do
$USESUDO docker exec db1 mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO root@$h IDENTIFIED BY \"$ROOTPASS\" WITH GRANT OPTION"
$USESUDO docker exec db1 mysql -u root -e "GRANT REPLICATION SLAVE ON *.* TO replication@$h IDENTIFIED BY \"$REPLPASS\""
done
echo Setting replication
for i in `seq 2 ${NUMSERVERS}` ; do
$USESUDO docker exec db$i mysql -u root -e "STOP SLAVE"
$USESUDO docker exec db$i mysql -u root -e "RESET SLAVE"
$USESUDO docker exec db$i mysql -u root -e "RESET MASTER"
$USESUDO docker exec db$i mysql -u root -e "SET GLOBAL gtid_purged=\"$GES\""
$USESUDO docker exec db$i mysql -u root -e "CHANGE MASTER TO MASTER_HOST=\"${DIPS[1]}\" , MASTER_USER='replication', MASTER_PASSWORD=\"$REPLPASS\" , MASTER_AUTO_POSITION=1"
$USESUDO docker exec db$i mysql -u root -e "START SLAVE"
done
}
install_proxy_app() {
echo "Installing standard ProxySQL on apps"
for i in `seq 1 ${NUMAPPS}` ; do
$USESUDO docker cp proxysql*deb app$i:/tmp
$USESUDO docker exec app$i sh -c "dpkg -i /tmp/proxysql*deb"
done
}
install_proxy_cluster() {
echo "Installing standard ProxySQL on cluster layer"
for i in `seq 1 ${NUMPROXIES}` ; do
$USESUDO docker cp proxysql*deb proxy$i:/tmp
$USESUDO docker exec proxy$i sh -c "dpkg -i /tmp/proxysql*deb"
done
## This is optional
echo "Replacing binaries in cluster layer"
for i in `seq 1 ${NUMPROXIES}` ; do
$USESUDO docker cp proxysql proxy$i:/usr/bin/proxysql
done
}
start_proxy_cluster() {
echo "Starting ProxySQL in cluster layer"
for i in `seq 1 ${NUMPROXIES}` ; do
$USESUDO docker exec proxy$i service proxysql start
sleep 3 # wait some time for proxysql to start
## this is already an important testing: proxysql allows to change listening port at runtime
$USESUDO docker exec proxy$i mysql -u admin -padmin -h 127.0.0.1 -P6032 -e "UPDATE global_variables SET variable_value='0.0.0.0:6032' WHERE variable_name='admin-mysql_ifaces'; SAVE ADMIN VARIABLES TO DISK; LOAD ADMIN VARIABLES TO RUNTIME;"
done
sleep 1 # wait some time for proxysql to bind on new port
}
start_proxy_app() {
echo "Starting ProxySQL on Apps"
for i in `seq 1 ${NUMAPPS}` ; do
$USESUDO docker exec app$i service proxysql start
sleep 3 # wait some time for proxysql to start
## this is already an important testing: proxysql allows to change listening port at runtime
$USESUDO docker exec app$i mysql -u admin -padmin -h 127.0.0.1 -P6032 -e "UPDATE global_variables SET variable_value='0.0.0.0:6032' WHERE variable_name='admin-mysql_ifaces'; SAVE ADMIN VARIABLES TO DISK; LOAD ADMIN VARIABLES TO RUNTIME;"
done
sleep 1 # wait some time for proxysql to bind on new port
}
configure_proxy_app() {
echo Configure ProxySQL on Apps
for i in ${AIPS[*]} ; do
echo "DELETE FROM mysql_servers;" | mysql -u admin -h $i -P6032
for h in ${PIPS[*]} ; do
echo "INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (0,\"$h\",6033);" | mysql -u admin -h $i -P6032
done
echo "LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;" | mysql -u admin -h $i -P6032
echo "DELETE FROM mysql_users; INSERT INTO mysql_users (username, password) VALUES ('root',\"$ROOTPASS\"); LOAD MYSQL USERS TO RUNTIME; SAVE MYSQL USERS TO DISK;" | mysql -u admin -h $i -P6032
done
}
configure_proxy_cluster() {
echo Configure ProxySQL on Cluster Layer
for i in ${PIPS[*]} ; do
echo "DELETE FROM mysql_servers;" | mysql -u admin -h $i -P6032
for h in ${DIPS[*]} ; do
echo "INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (0,\"$h\",3306);" | mysql -u admin -h $i -P6032
done
echo "LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;" | mysql -u admin -h $i -P6032
echo "DELETE FROM mysql_users; INSERT INTO mysql_users (username, password) VALUES ('root',\"$ROOTPASS\"); LOAD MYSQL USERS TO RUNTIME; SAVE MYSQL USERS TO DISK;" | mysql -u admin -h $i -P6032
done
}
echo Retrieving Application IPs
for i in `seq 1 ${NUMAPPS}` ; do
AIPS[$i]=`$USESUDO docker inspect -f '{{.NetworkSettings.IPAddress}}' app$i`
done
echo Retrieving ProxySQL IPs
for i in `seq 1 ${NUMPROXIES}` ; do
PIPS[$i]=`$USESUDO docker inspect -f '{{.NetworkSettings.IPAddress}}' proxy$i`
done
#configure_mysql
#install_proxy_app
#install_proxy_cluster
#start_proxy_cluster
#start_proxy_app
export MYSQL_PWD="admin"
echo APP IPs: ${AIPS[*]}
echo ProxySQL IPs: ${PIPS[*]}
configure_proxy_app
configure_proxy_cluster