Installing HAProxy
yum install haproxy is effective for CentOS 7. After installation, you can start the service using systemctl start haproxy. But don’t rush yet.
Configuring HAProxy
Add the following content to /etc/haproxy/haproxy.cfg.
global # The content of global is generally fixed and quite understandable.
log 127.0.0.1 local2
maxconn 4096
user haproxy
group haproxy
chroot /var/lib/haproxy
daemon
pidfile /var/run/haproxy.pid
stats socket /var/run/haproxy.sock # Create a socket file for haproxy
nbproc 40 # Start 40 processes to forward concurrently, higher versions can use nbthread, a threaded approach.
defaults # This section is mostly copied, not entirely clear on the options.
log global
mode http
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 1024
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen cdb_cluster 0.0.0.0:3030 # The actual proxy name and address for receiving services.
## cdb balance leastconn - the cluster listening on port 3030.
mode tcp
balance leastconn # This method is most suitable for databases; do not change.
server cdb1 172.16.30.3:26257 check # Check seems to require a port for feedback status; without it, it might not work, but it doesn't matter.
server cdb2 172.16.30.3:26258 check
server cdb3 172.16.30.3:26259 check
server cdb4 172.16.30.3:26260 check
Start and Connect
systemctl start haproxy to start the service.
psql -Uroot -h127.0.0.1 -p3030 test to connect to the database.
CockroachDB Official Recommendation
CockroachDB officially provided their recommended configuration. In this configuration, they use:
default
# TCP keep-alive on client side. Server already enables them.
option clitcpka
listen psql
option httpchk GET /health?ready=1
These two configurations, the first is to keep the client connection alive, which seems very useful. The second is a status check port, which I understand might be an option to ensure the service is available before dispatching requests, and it also seems very useful. It is recommended to add them.