----------------------------------------------
| HTTP Client |
----------------------------------------------
|
-----
|vip|
-----
/ \
/ \
/ \
------------------- -------------------
| RESTful API -| | | RESTful API -| |
| | | | | |
| [ Active ] | | -> sync -> | [ Standby ] | |
| | | | | |
|----- | | |----- | |
| DB | <-------| | | DB | <-------| |
------------------- -------------------
vip : 192.168.33.100
DB : MariaDB v10.2
Turn off selinux
Turn off firewall
- power off <- handled by vrrp
- nic down <- detected by tracking script (then trigger keepalived process down)
- keepalived process down <- handled by vrrp
- api process down <- detected by tracking script (then trigger keepalived process down)
- db process down <- detected by tracking script (then trigger keepalived process down)
- active node :: power on - > every service on - > master state - > get vip
- standy node :: power on - > every service on - > backup state
- active node :: power off - - fail over - -> standby node
- power on back - > no preempt
- active node :: nic down - - fail over - -> standby node
- nic on back - > no preempt
- active node :: keepalived process down - - fail over - -> standby node
- keepalived process on back - > no preempt
- ap : active-standby
- ap unit : disabled
- svc unit : (i.e. keepalived + httpd + mysqld) : disabled
- m : maintenance
- ap unit : masked
- svc unit : masked
- s : standalone
- ap unit : enabled
- svc unit : disabled
(ap,ap) - - auto - - > (m,s)
^ v
| |
------ manually -----
- keepalived :: notification script :: master
- turn off db replication
- turn on db write permission
- keepalived :: notification script :: backup
- keepalived :: notification script :: fault
- enter m node
- keepalived :: notification script :: master
- turn off db replication
- turn on db write permission
- enter s node
- keepalived :: notification script :: backup
- turn on db replication
- turn off db write permission
- keepalived :: notification script :: fault
Launch a local mysql server instance for development
docker run --name mysqld -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:5.7.21
Populate db schema (via SQLAlchemy)
cd data/falcon_app/
bash init_model.sh
Insert a record (via SQLAlchemy)
cd data/falcon_app/
python add_record.sh
Workaround for keepalived failed to attach vip to nic after reboot
ExecStart=/bin/at now + 3 minutes -f /usr/local/bin/start-ap.sh
To test nic down, use ifconfig down rather than ifdown
To use nopreempt, both of nodes need specify it
Use unicast rather than multicast
codename
- AS-IS ap
- TO-BE ?
vip
- AS-IS 192.168.33.100
- TO-BE ?
host1 ip
- AS-IS 192.168.33.101
- TO-BE ?
host2 ip
- AS-IS 192.168.33.102
- TO-BE ?
host1 nic
- AS-IS enp0s8
- TO-BE ?
host2 nic
- AS-IS enp0s8
- TO-BE ?
mysql password
- AS-IS (empty)
- TO-BE ?
mode file
- AS-IS /opt/ap-mode
- TO-BE ?
manage script home
- AS-IS /usr/local/bin
- TO-BE ?
keepalived script home
- AS-IS /usr/local/bin
- TO-BE ?