Hera multiplexes connections for MySQL and Oracle databases. It supports sharding the databases for horizontal scaling.
Hera is Data Access Gateway for databases and is a key enabler for scaling and improving availability databases. - It Protects the database from resource exhaustion by evicting poorly performing queries, - Intelligently routes read/write traffic appropriately for better load balancing, - Improves tolerance to database outages, - Provides high performance secured connections between applications and Hera - Provides domain agnostic database sharding for horizontal database scaling. - Automatic transaction application failover between replica databases - And many more site resiliency features.
For development, the following docker commands can help get started
docker run --network host --name mysql-11 -e MYSQL_ROOT_PASSWORD=62-AntHill -d mysql:latest docker exec -it mysql-11 bash -c 'echo "create database testschema;" | mysql -u root -h 127.0.0.1 -p62-AntHill' cd hera/tests/devdocker mkdir -p src/github.com/paypal/hera rsync -av --exclude tests/devdocker ../.. src/github.com/paypal/hera docker build -t hera-oss . docker run -it --rm --name testRunHeraOss --network host -e password=62-AntHill hera-oss
To test it, in a separate terminal:
docker exec -it testRunHeraOss /bin/bash cd /go/src go run github.com/paypal/hera/client/gosqldriver/tls/example/sample_main.go
The following sections explain the process for manually building mux without Docker. We only tested on RedHat and Ubuntu.
Navigate to the working directory.
cd $WORKSPACE export GOPATH=$WORKSPACE
Clone the source code from github
git clone [email protected]:paypal/hera src/github.com/paypal/hera
(a) GO 1.12 is prerequisite
(b) export GO111MODULE=on ( to enable the go mod feature)
go get github.com/paypal/hera
Install the dependencies: MySQL and Oracle driver
go get gopkg.in/goracle.v2 go get github.com/go-sql-driver/mysql
Build server binaries
go install github.com/paypal/hera/mux github.com/paypal/hera/worker/mysqlworker github.com/paypal/hera/worker/oracleworker
Build Go test client
go install github.com/paypal/hera/tests/e2e/client
Build Java test client under the client/java directory
To run mux there is minimal configuration required. Please see examples for running with MySQL or Oracle. The main configuration file is hera.txt, which must contain the TCP port where the server listens and the number of workers. The user name, password and the data source are passsed via environment parameters.
# the proxy executable ln -s $GOPATH/bin/mux . # the MySQL worker ln -s $GOPATH/bin/mysqlworker mysqlworker # to use the Oracle worker use oracleworker instead of mysqlworker # create the configuration file with the required configuration echo 'bind_ip=127.0.0.1' > hera.txt echo 'bind_port=11111' >> hera.txt echo 'opscfg.hera.server.max_connections=2' >> hera.txt # if using mysql run this # echo 'database_type=mysql' >> hera.txt # create minimal CAL configuration, needed by ops config echo 'cal_pool_name=stage_hera' > cal_client.txt # the database user name export username='user' # the database password export password='pass' # the data source export TWO_TASK='tcp(127.0.0.1:3306)/myschema' # for Oracle the datasource can be like '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=hostname) # (PORT=12345)))(CONNECT_DATA=(SERVICE_NAME=sn)))'. # for Oracle only add to LD_LIBRARY_PATH environment variable the path to the shared libraries of the # Oracle instant client # start ./mux --name hera-test
For details about the parameters see configuration
There is a Java client implemented as JDBC driver. Please see the documentation for how to install and use it.
Hera is licensed under Apache 2.0.