You are looking at the documentation of a prior release. To read the documentation of the latest release, please
visit here.
New to KubeDB? Please start here.
Horizontal Scale ProxySQL
This guide will show you how to use KubeDB Enterprise operator to scale the cluster of a ProxySQL server.
Before You Begin
At first, you need to have a Kubernetes cluster, and the
kubectlcommand-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using kind.Install
KubeDBCommunity and Enterprise operator in your cluster following the steps here.You should be familiar with the following
KubeDBconcepts:
To keep everything isolated, we are going to use a separate namespace called demo throughout this tutorial.
$ kubectl create ns demo
namespace/demo created
Also we need a mysql backend for the proxysql server. So we are creating one with the below yaml.
apiVersion: kubedb.com/v1alpha2
kind: MySQL
metadata:
name: mysql-server
namespace: demo
spec:
version: "5.7.36"
replicas: 3
topology:
mode: GroupReplication
storageType: Durable
storage:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
terminationPolicy: WipeOut
$ kubectl create -f https://github.com/kubedb/docs/raw/v2023.04.10/docs/guides/proxysql/scaling/horizontal-scaling/cluster/example/sample-mysql.yaml
mysql.kubedb.com/mysql-server created
After applying the above yaml wait for the MySQL to be Ready.
Apply Horizontal Scaling on Cluster
Here, we are going to deploy a ProxySQL cluster using a supported version by KubeDB operator. Then we are going to apply horizontal scaling on it.
Deploy ProxySQL Cluster
In this section, we are going to deploy a ProxySQL cluster. Then, in the next section we will scale the proxy server using ProxySQLOpsRequest CRD. Below is the YAML of the ProxySQL CR that we are going to create,
apiVersion: kubedb.com/v1alpha2
kind: ProxySQL
metadata:
name: proxy-server
namespace: demo
spec:
version: "2.3.2-debian"
replicas: 3
mode: GroupReplication
backend:
name: mysql-server
syncUsers: true
terminationPolicy: WipeOut
Let’s create the ProxySQL CR we have shown above,
$ kubectl create -f https://github.com/kubedb/docs/raw/v2023.04.10/docs/guides/proxysql/scaling/horizontal-scaling/cluster/example/sample-proxysql.yaml
proxysql.kubedb.com/proxy-server created
Now, wait until proxy-server has status Ready. i.e,
$ kubectl get proxysql -n demo
NAME VERSION STATUS AGE
proxy-server 2.3.2-debian Ready 2m36s
Let’s check the number of replicas this cluster has from the ProxySQL object, number of pods the statefulset have,
$ kubectl get proxysql -n demo proxy-server -o json | jq '.spec.replicas'
3
$ kubectl get sts -n demo proxy-server -o json | jq '.spec.replicas'
3
We can see from both command that the server has 3 replicas in the cluster.
Also, we can verify the replicas of the replicaset from an internal proxysql command by execing into a replica.
Now let’s connect to a proxysql instance and run a proxysql internal command to check the cluster status,
$ kubectl exec -it -n demo proxy-server-0 -- bash
root@proxy-server-1:/# mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "select * from runtime_proxysql_servers;"
+---------------------------------------+------+--------+---------+
| hostname | port | weight | comment |
+---------------------------------------+------+--------+---------+
| proxy-server-2.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-1.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-0.proxy-server-pods.demo | 6032 | 1 | |
+---------------------------------------+------+--------+---------+
We can see from the above output that the cluster has 3 nodes.
We are now ready to apply the ProxySQLOpsRequest CR to scale this server.
Scale Up Replicas
Here, we are going to scale up the replicas of the replicaset to meet the desired number of replicas after scaling.
Create ProxySQLOpsRequest
In order to scale up the replicas of the replicaset of the server, we have to create a ProxySQLOpsRequest CR with our desired replicas. Below is the YAML of the ProxySQLOpsRequest CR that we are going to create,
apiVersion: ops.kubedb.com/v1alpha1
kind: ProxySQLOpsRequest
metadata:
name: scale-up
namespace: demo
spec:
type: HorizontalScaling
proxyRef:
name: proxy-server
horizontalScaling:
member: 5
Here,
spec.proxyRef.namespecifies that we are performing horizontal scaling operation onproxy-serverinstance.spec.typespecifies that we are performingHorizontalScalingon our database.spec.horizontalScaling.memberspecifies the desired replicas after scaling.
Let’s create the ProxySQLOpsRequest CR we have shown above,
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2023.04.10/docs/guides/proxysql/scaling/horizontal-scaling/cluster/example/proxyops-upscale.yaml
proxysqlopsrequest.ops.kubedb.com/scale-up created
Verify Cluster replicas scaled up successfully
If everything goes well, KubeDB Enterprise operator will update the replicas of ProxySQL object and related StatefulSets and Pods.
Let’s wait for ProxySQLOpsRequest to be Successful. Run the following command to watch ProxySQLOpsRequest CR,
$ watch kubectl get proxysqlopsrequest -n demo
Every 2.0s: kubectl get proxysqlopsrequest -n demo
NAME TYPE STATUS AGE
scale-up HorizontalScaling Successful 106s
We can see from the above output that the ProxySQLOpsRequest has succeeded. Now, we are going to verify the number of replicas this database has from the ProxySQL object, number of pods the statefulset have,
$ kubectl get proxysql -n demo proxy-server -o json | jq '.spec.replicas'
5
$ kubectl get sts -n demo proxy-server -o json | jq '.spec.replicas'
5
Now let’s connect to a proxysql instance and run a proxysql internal command to check the number of replicas,
$ kubectl exec -it -n demo proxy-server-0 -- bash
root@proxy-server-1:/# mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "select * from runtime_proxysql_servers;"
+---------------------------------------+------+--------+---------+
| hostname | port | weight | comment |
+---------------------------------------+------+--------+---------+
| proxy-server-2.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-1.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-0.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-3.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-4.proxy-server-pods.demo | 6032 | 1 | |
+---------------------------------------+------+--------+---------+
root@proxy-server-1:/#
From all the above outputs we can see that the replicas of the cluster is 5. That means we have successfully scaled up the replicas of the ProxySQL replicaset.
Scale Down Replicas
Here, we are going to scale down the replicas of the cluster to meet the desired number of replicas after scaling.
Create ProxySQLOpsRequest
In order to scale down the cluster of the server, we have to create a ProxySQLOpsRequest CR with our desired replicas. Below is the YAML of the ProxySQLOpsRequest CR that we are going to create,
apiVersion: ops.kubedb.com/v1alpha1
kind: ProxySQLOpsRequest
metadata:
name: scale-down
namespace: demo
spec:
type: HorizontalScaling
proxyRef:
name: proxy-server
horizontalScaling:
member: 4
Here,
spec.proxyRef.namespecifies that we are performing horizontal scaling operation onproxy-serverinstance.spec.typespecifies that we are performingHorizontalScalingon our database.spec.horizontalScaling.memberspecifies the desired replicas after scaling.
Let’s create the ProxySQLOpsRequest CR we have shown above,
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2023.04.10/docs/guides/proxysql/scaling/horizontal-scaling/cluster/example/proxyops-downscale.yaml
proxysqlopsrequest.ops.kubedb.com/scale-down created
Verify Cluster replicas scaled down successfully
If everything goes well, KubeDB Enterprise operator will update the replicas of ProxySQL object and related StatefulSets and Pods.
Let’s wait for ProxySQLOpsRequest to be Successful. Run the following command to watch ProxySQLOpsRequest CR,
$ watch kubectl get proxysqlopsrequest -n demo
Every 2.0s: kubectl get proxysqlopsrequest -n demo
NAME TYPE STATUS AGE
scale-down HorizontalScaling Successful 2m32s
We can see from the above output that the ProxySQLOpsRequest has succeeded. Now, we are going to verify the number of replicas this database has from the ProxySQL object, number of pods the statefulset have,
$ kubectl get proxysql -n demo proxy-server -o json | jq '.spec.replicas'
4
$ kubectl get sts -n demo proxy-server -o json | jq '.spec.replicas'
4
Now let’s connect to a proxysql instance and run a proxysql internal command to check the number of replicas,
$ kubectl exec -it -n demo proxy-server-0 -- bash
root@proxy-server-1:/# mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "select * from runtime_proxysql_servers;"
+---------------------------------------+------+--------+---------+
| hostname | port | weight | comment |
+---------------------------------------+------+--------+---------+
| proxy-server-2.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-1.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-0.proxy-server-pods.demo | 6032 | 1 | |
| proxy-server-3.proxy-server-pods.demo | 6032 | 1 | |
+---------------------------------------+------+--------+---------+
From all the above outputs we can see that the replicas of the cluster is 4. That means we have successfully scaled down the replicas of the ProxySQL replicaset.
Cleaning Up
To clean up the Kubernetes resources created by this tutorial, run:
$ kubectl delete proxysql -n demo proxy-server
$ kubectl delete proxysqlopsrequest -n demo scale-up scale-down






























