Experience using ScaleArc in test or production?
HA HA HA HA What a coincidence. I was asked to evaluate it myself.

Here is what has been done so far...


My supervisor installed it
I created two EC2 instances
I have created Master/Slave status between them
I create the Cluster on ScaleArc EC2


I submitted the Master EC2 as a ScaleArc Master
I submitted the Slave EC2 as a ScaleArc Slave

I adjusted the Security Options for port 3306 on the Cluster


Here is what the rudimentary test I performed: I decided to connect to MySQL, not using the Master EC2, and not using the Slave EC2, but using only the ScaleArc EC2. Here is a script to wrote up to test connectivity:

[redwards@lw-lts-155 ec2]$ cat master_select
EC2_DNS=&lt;ScaleArc-EC2-DNS Hidden&gt;
MYSQL_USER=&lt;&lt;Username Hidden&gt;
MYSQL_PASS=&lt;Password Hidden&gt;
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
mysql -h${EC2_DNS} ${MYSQL_CONN} -ANe"show variables like 'hostname'"


Here is the result:

[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-242-47-176 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-205-21-233 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-242-47-176 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-242-47-176 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-242-47-176 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-242-47-176 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-205-21-233 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-242-47-176 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-205-21-233 |
+----------+------------------+
[redwards@lw-lts-155 ec2]$ ./master_select
+----------+------------------+
| hostname | ip-10-242-47-176 |
+----------+------------------+


Hey, not bad. Slave was reached 7 out of 10 times.

At the very least, that is what one would want: Using just one address, connect to MySQL and have some roving intelligence decide which DB Server to connect to. This has been the pipe dream of all avid prognosticators of MySQL Proxy:


Dec 17, 2012 : MySQL proxy to replication configuration
Apr 19, 2012 : What&#39;s the latest on MySQL Proxy?
Jan 24, 2012 : Using Replication for Scale-Out


Whether they implemented MySQL Proxy using LUA or scripted it in some proprietary way, the bottom line is this : ScaleArc has achieved this and has done the heavy lifting for us all (at least in the AWS Universe).

I would say : Go ahead and play with it as follows:


Setup one Master and three Slaves
Register the Master and Slaves in ScaleArc
Write up some benchmark against the Cluster
Use the charts provided and see if it intelligently does the load balancing


Sorry, I am no expert with ScaleArc and this not a full answer for you. Test drive it and kick the tires some.

UPDATE 2013-01-14 16:32 EDT

I downloaded the sakila database and loaded it into the Cluster.

wget http://downloads.mysql.com/docs/sakila-db.tar.gz


Then, I ran this query

SELECT actor_id FROM sakila.actor
ORDER BY MD5(CONCAT(last_name,first_name))


and stored the results in actor_id.txt

Next, I constructed the following script to launch mysql many, many times, in testbeds..

EC2_DNS=&lt;ScaleArc-EC2-DNS Hidden&gt;
MYSQL_USER=&lt;Username Hidden&gt;
MYSQL_PASS=&lt;Password Hidden&gt;
MYSQL_CONN="-h${EC2_DNS} -u${MYSQL_USER} -p${MYSQL_PASS} -Dsakila"
NUMBER_OF_TESTBEDS=${1}
PARALLEL_TESTS=${2}
if [ "${1}" == "" ] ; then NUMBER_OF_TESTBEDS=1 ; fi
if [ "${2}" == "" ] ; then PARALLEL_TESTS=1     ; fi
ACTOR_LIST=""
for ACTOR_ID in `cat actor_id.txt`
do
        ACTOR_LIST="${ACTOR_LIST} ${ACTOR_ID}"
done
SQLPREFIX="SELECT F.film_id,F.title FROM actor A"
SQLPREFIX="${SQLPREFIX} INNER JOIN film_actor FA USING (actor_id)"
SQLPREFIX="${SQLPREFIX} INNER JOIN film F USING (film_id) WHERE A.actor_id="
for (( X = 1 ; X &lt;= NUMBER_OF_TESTBEDS ; X++ ))
do
        echo -n "Launching TestBed #${X} ("
        for (( Y = 1 ; Y &lt;= PARALLEL_TESTS ; Y++ ))
        do
                echo -n " ${Y}"
                for ACTOR_ID in `echo "${ACTOR_LIST}"`
                do
                        SQLSTMT="${SQLPREFIX}${ACTOR_ID}"
                        mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" /dev/null 2&gt;/dev/null &amp;
                done
        done
        echo -n ")"
        wait
        echo
done


Hope This Helps !!!