mirror of https://github.com/sysown/proxysql
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.
135 lines
5.0 KiB
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
|