Alexander Kukushkin
5a817fad0d
Store in etcd endpoint of restapi
...
In order to have backward compatibility connection url of restapi is
passed as application_name parameter in connection url of database.
Value in etcd will look like:
postgres://user:passwd@host:5432/postgres?application_name=http://host:8080/governor
Sure, this is a hack, but I guess it worth it.
2015-05-27 14:46:35 +02:00
Alexander Kukushkin
56a9f52a15
Replace os.system with subprocess.call
2015-05-27 11:16:16 +02:00
Alexander Kukushkin
56daec0d6c
Api: Bugfix for current_xlog_location in slaves.
2015-05-26 15:53:57 +02:00
Alexander Kukushkin
8cc0aa90b1
Fix typos when passing connection parameters to psycopg2.
2015-05-26 10:39:16 +02:00
Alexander Kukushkin
518ef68a53
Use connect_timeout=3s and statement_timeout=2s everywhere (even for local connections)
2015-05-26 09:19:20 +02:00
Alexander Kukushkin
faf295dcd0
Add initialize key into Cluster
2015-05-24 19:26:35 +02:00
Alexander Kukushkin
1096e04343
Bigfix, cursor.closed contains boolean value
2015-05-24 16:00:31 +02:00
Alexander Kukushkin
db34e1f458
Write get_postgresql_status exception into log file
2015-05-24 15:57:10 +02:00
Alexander Kukushkin
8dd99170bf
Refactor exceptions handling in etcd.py and ha.py
...
update_leader can throw EtcdError exception
unused HealthiestMemberError exception is removed
2015-05-24 15:40:36 +02:00
Alexander Kukushkin
188741de5a
Merge branch 'master' of github.com:CyberDem0n/governor into restapi
2015-05-24 09:02:42 +02:00
Alexander Kukushkin
ce267d9f1e
query method will retry only in case of communication error
2015-05-24 09:01:23 +02:00
Alexander Kukushkin
d202f72a42
Added simple web server which shows current state of postgres
...
Server always returns json which contains some status of postgres:
* instance type: master/slave
* xlog location for master
* xlog received_location, replayed_location
This server could be used by haproxy
GET / returns 200 if there is postgres master behind governor.
GET /slave returns 200 is there is postgres slave behind governor
In all other cases it returns 503
Currently server always listening on 0.0.0.0:8080, but it should be
configurable. In the next versions this rest api could also report some
status of etcd and could be used by is_healthiest_node method
2015-05-23 20:29:51 +02:00
Alexander Kukushkin
f53c369c69
Connect timeout 5 seconds for psycopg2
...
Refactored query and is_healthiest_node methods
query method wont retry more then 3 times if OperationalError raised
is_healthiest_node takes into account that one of the nodes could be
still a master
2015-05-23 20:21:13 +02:00
Alexander Kukushkin
34f9b666cf
Demote master when etcd is not accessible
2015-05-22 12:26:19 +02:00
Alexander Kukushkin
09163ac454
If there is no connect_address defined in yml file use address from listen as a fallback
2015-05-22 12:03:43 +02:00
Alexander Kukushkin
62d17d68de
Use "member_ttl" with default value=3600 for members
2015-05-22 12:00:07 +02:00
Alexander Kukushkin
bb884bac00
Move is_unlocked method from Ha into Cluster class
2015-05-22 11:45:09 +02:00
Alexander Kukushkin
4a4d9b85e5
Make sure that there is the new line at the end of pg_hba.con
2015-05-22 11:23:11 +02:00
Alexander Kukushkin
3533b790cb
Update list of success return codes for PUT and DELETE
2015-05-20 12:03:12 +02:00
Alexander Kukushkin
0d5bb48ead
Close connection when querying other members of cluster
2015-05-19 14:01:30 +02:00
Alexander Kukushkin
f7b6c8df40
Merge branch 'master' of github.com:CyberDem0n/governor
...
Conflicts:
helpers/postgresql.py
2015-05-18 15:58:38 +02:00
Alexander Kukushkin
e9ffcf9efe
Small refactoring of initdb call
2015-05-18 15:57:24 +02:00
Alexander Kukushkin
520de12232
Remove debug print
2015-05-18 14:39:14 +02:00
Alexander Kukushkin
422512880f
last_leader_operation is the propery of Cluster object and the value is set in get_cluster method
2015-05-18 13:43:14 +02:00
Alexander Kukushkin
b24fb0488c
last_leader_operation is the propery of Cluster object and the value is set in get_cluster method
2015-05-18 13:33:27 +02:00
Alexander Kukushkin
d221d1de1c
listen_address can have more then one value separated by comma. We will use the first one to connect
2015-05-18 10:53:27 +02:00
Alexander Kukushkin
348100752b
Open connection to self via listen address
2015-05-15 16:18:31 +02:00
Alexander Kukushkin
af9ebfa3b9
Use connect_address instead of listen when building connection_string
2015-05-15 12:20:24 +02:00
Alexander Kukushkin
75ff91d017
rename connection_address to connect_address
2015-05-15 12:13:05 +02:00
Alexander Kukushkin
08865512f8
Differentiate between connection address and listen address
...
For example you can listen on 0.0.0.0 but provide service on some
didicated ip. This should cover all possible use-cases when you are
running behind firewall, load balancer or inside for example docker.
2015-05-15 12:06:04 +02:00
Alexander Kukushkin
274bc14bfb
Do not check maximum_lag_on_failover if it is not defined in config file
2015-05-15 11:38:50 +02:00
Alexander Kukushkin
8e5beb5883
Small optimization
2015-05-15 11:25:26 +02:00
Alexander Kukushkin
9487aec842
Bugfix: get_client_path might get into infinite loop when response code is not 200
2015-05-15 11:23:02 +02:00
Alexander Kukushkin
e6e19359df
Bugfix, write state_handler.name into leader key
2015-05-13 18:04:27 +02:00
Alexander Kukushkin
0c040b8ce2
Merge branch 'master' of github.com:compose/governor
...
Conflicts:
governor.py
helpers/etcd.py
helpers/ha.py
helpers/postgresql.py
2015-05-13 18:01:01 +02:00
Alexander Kukushkin
40a4192504
Remove member and leader (is I was the master) keys from etcd on stop of governor
2015-05-13 17:12:17 +02:00
Alexander Kukushkin
d25ad17c32
Add support of python3
2015-05-13 14:53:23 +02:00
Christopher Winslett
2c69074652
move stale protection from is_healthy to is_healthiest to allow stale secondaries to rejoin cluster
2015-05-12 18:29:54 -07:00
Christopher Winslett
557bad37cd
ensure a stale Postgres does not become leader
2015-05-12 18:11:12 -07:00
Christopher Winslett
a1bc07db33
use TTLs with member listing to keep a current list of cluster members
2015-05-12 16:33:32 -07:00
Alexander Kukushkin
281b0b8455
Bugfix in has_lock: sometimes leader can be undefined
2015-05-12 11:07:52 +02:00
Alexander Kukushkin
9dcbc75fd2
Bugfix. It wasn't possible to start the old cluster if all its members were shutdown.
...
Basically this is rollback to the original decision tree with the small exception:
1 - If leader is defined and it's not me - then slave would be started immidiately
with the correct recovery conf.
2 - If leader is defined in and it's my host, then it will start instance in
readonly (but without primary_conninfo in recovery.conf)
3 - And the third case - if the leader is not defined - it also will start
instance in readonly, without primary_conninfo.
After performing 2 or 3 it will perform usual decision tree.
2015-05-12 10:19:45 +02:00
Alexander Kukushkin
be7677a1b8
Bugfix, hostname and address are not keys of dict but properties of Member object
2015-05-12 09:08:45 +02:00
Alexander Kukushkin
e2faf641d5
Start slave with the correct recovery.conf on governor start
...
Also governor is able to pick up already running master and slave
instances without restarting them.
In case is you have a lock and postgres is not running behaviour remains
the same: it will start master in read only mode and then promote if it
still has the lock.
2015-05-11 16:50:21 +02:00
Alexander Kukushkin
eb1721f65f
Minimize amount of requests to etcd
2015-05-11 15:15:08 +02:00
Alexander Kukushkin
6d17d39776
Backport from compose/governor: compare xlog positions based on bytes since 0/000000 based on feedback
2015-05-11 10:06:18 +02:00
Alexander Kukushkin
2e3eb333cb
Shutdown fast
2015-05-11 09:48:59 +02:00
Alexander Kukushkin
0b288a7f3e
Track list of already existing physical replication slots
...
Drop replication slot when it was removed from etcd.
Execute pg_create_physical_replication_slot only when something new appeared in etcd.
2015-05-11 09:48:15 +02:00
Alexander Kukushkin
8cfbdcfcd4
Track list of already existing physical replication slots
...
Drop replication slot when it was removed from etcd.
Execute pg_create_physical_replication_slot only when something new appeared in etcd.
2015-05-11 09:44:57 +02:00
Alexander Kukushkin
588c951a86
Return True after success call of update_leader and check return code
2015-05-11 08:48:51 +02:00