Create your own cluster using ansible.
It was tested with:
- KVM servers + CentOS 7 minimal.
- Amazon Linux 2
- (Load Balancer) Haproxy -> (Nodes) Apache (1) + MariaDB Galera Cluster
- (Load Balancer) Haproxy -> (Nodes) Nginx (2) + MariaDB Galera Cluster
- (Load Balancer) Nginx -> (Nodes) Nginx (3) + MariaDB Galera Cluster
- (Load Balancer) Haproxy -> (Nodes) Nginx (10) + Mysql8
- Haproxy / Nginx as a Load Balancer
- MariaDB Galera Cluster (mariabackup or rsync) / Mysql8
- You can have PHP74 and PHP73 on nodes
- Apache (httpd) or Nginx on nodes
- NTP for clock synchronization
- Logrotate
- Storage NFS
- Domains
- Iptables
- Phpmyadmin
- Composer tool
- centOS 7 on all servers (minimal)
- 1 server for Load Balancing
- minimum 1 Servers for Nodes
- minimum 3 Servers for MariaDB
- 1 server with ansible (master)
- centOS 7 (minimal)
- 1 server
On this setup we use user "root" to manage the servers (you can use ssh key or another user)
$ yum install ansible
In our case:
Load Balancing: lb.example.org Nodes: s1.example.org, s2.example.org, s2.example.org, s3.example.org NFS (storage): lb.example.org MariaDB: db1.example.org, db2.example.org, db3.example.org
[root@master ansible]# cat /etc/hosts | grep example.org
192.168.1.101 lb.example.org
192.168.1.102 s1.example.org
192.168.1.103 s2.example.org
192.168.1.104 s3.example.org
192.168.1.105 db1.example.org
192.168.1.106 db2.example.org
192.168.1.107 db3.example.org
[root@master ansible]#
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
$ ssh-copy-id root@lb.example.org
$ ssh-copy-id root@s1.example.org
$ ssh-copy-id root@s2.example.org
$ ssh-copy-id root@s3.example.org
$ ssh-copy-id root@db1.example.org
$ ssh-copy-id root@db2.example.org
$ ssh-copy-id root@db3.example.org
- 1 - (Load Balancer) Haproxy -> (Nodes) Apache + MariaDB Galera Cluster
- 2 - (Load Balancer) Haproxy -> (Nodes) Nginx + MariaDB Galera Cluster
- 3 - (Load Balancer) Nginx -> (Nodes) Nginx + MariaDB Galera Cluster
# inventory
$ vim inventory/cluster
# variables
# inital domain
$ vim playbooks/vars/global-vars.yml
# variables used for setup, by default cluster_setup_mode is 3
$ vim playbooks/vars/setup-cluster-vars.yml
Add your public ssh key to playbooks/authorized_keys
Remember to modify the variables with your data!!! For MariaDB we need the interface name, in our case "enp0s3". You can get it using "ip a" command
$ ansible-playbook -i inventory/cluster playbooks/new-domain-cluster.yml
$ vim playbooks/vars/new-domain-cluster.yml
$ ansible-playbook -i inventory/cluster playbooks/new-domain-cluster.yml
$ vim playbooks/vars/new-domain-cluster.yml
$ ansible-playbook -i inventory/cluster playbooks/remove-domain-cluster.yml -e "primary_domain_user=mydomainuser" -e "primary_domain=mydomain.example.com" -e "cluster_setup_mode=3"
For this setup you need only one server.
- 10 - (Load Balancer) Haproxy + (Web) Nginx + Mysql 8
# inventory
$ vim inventory/single
# variables
# inital domain
$ vim playbooks/vars/global-vars.yml
$ vim playbooks/vars/setup-single-vars.yml
$ ansible-playbook -i inventory/single playbooks/new-domain-single.yml
$ vim playbooks/vars/new-domain-single.yml
$ ansible-playbook -i inventory/single playbooks/new-domain-single.yml
$ vim playbooks/vars/new-domain-single.yml
$ ansible-playbook -i inventory/single playbooks/remove-domain-single.yml -e "primary_domain_user=mydomainuser" -e "primary_domain=mydomain.example.com" -e "cluster_setup_mode=10"
$ ansible-playbook -i inventory/cluster playbooks/mariadb-galera-add.yml -e "username=testinguser" -e "password=testinguser123" -e "database=testinguser"
$ ansible-playbook -i inventory/cluster playbooks/mariadb-galera-remove.yml -e "username=testinguser" -e "database=testinguser"
- improve security / vaults