Yes, there is a better solution. A proper load balancer in front of your servers.
Any load distribution without feedback like DNS round-robin does spread the load but can't possibly do this evenly. To have an even load on all backend servers, you need to have a load feedback from servers to the balancer so it knows the actual load on each back end and can use that info when it decides where to send the connection.
Also notice that in master-slave configuration it is impossible to load master and slaves the same way, due to different roles they perform. MySQL/MariaDB has a Galera multi-master cluster solution, where it is possible to distribute load evenly.
Lastly, DNS "load balancing" is susceptible to easy bypass. One can simply use a literal IP address of one of servers instead of DNS name and they will always load that server. With a proper load balancer, it is impossible, since only balancer's IP can be made available for connections so it always able to decide where to forward the connection.
Try haproxy; for your case you'll obviously need a TCP mode and an agent (a simple script with a simple protocol) running on each backend which will be queried regularly by the balancer to obtain information about that server's current load. Start here for the basic setup, and then you'll need to create an agent and add agent-check to haproxy configuration.