diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 1718fb31..9edb2120 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -93,7 +93,7 @@ etcd: ttl: *ttl host: ${ETCD_CLUSTER} postgresql: - name: postgresql_${DOCKER_IP//./_} ## Replication slots do not allow dots in their name + name: ${HOSTNAME} scope: *scope listen: 0.0.0.0:5432 connect_address: ${DOCKER_IP}:5432 @@ -119,7 +119,8 @@ postgresql: archive_command: 'true' max_wal_senders: 20 listen_addresses: 0.0.0.0 - wal_keep_segments: 8 + checkpoint_segments: 64 + wal_keep_segments: 64 archive_timeout: 1800s max_replication_slots: 20 hot_standby: "on" diff --git a/patroni/ctl.py b/patroni/ctl.py index a3c8aa73..7950fab2 100644 --- a/patroni/ctl.py +++ b/patroni/ctl.py @@ -111,7 +111,7 @@ def post_patroni(member, endpoint, content, headers={'Content-Type': 'applicatio url = urlparse(member.api_url) logging.debug(url) return requests.post('{}://{}/{}'.format(url.scheme, url.netloc, endpoint), headers=headers, - data=json.dumps(content), timeout=5) + data=json.dumps(content), timeout=30) def print_output(columns, rows=[], alignment=None, format='pretty', header=True, delimiter='\t'): @@ -506,7 +506,7 @@ def failover(config_file, cluster_name, master, candidate, force, dcs): t_started = time.time() r = None try: - r = post_patroni(cluster.leader.member, 'failover', {'leader': master, 'candidate': candidate or ''}) + r = post_patroni(cluster.leader.member, 'failover', {'leader': master, 'member': candidate or ''}) if r.status_code == 200: logging.debug(r) logging.debug(r.text) @@ -540,6 +540,8 @@ def output_members(cluster, name=None, format='pretty'): if cluster.leader: leader_name = cluster.leader.member.name + xlog_location_cluster = cluster.last_leader_operation or 0 + # Mainly for consistent pretty printing and watching we sort the output cluster.members.sort(key=lambda x: x.name) for m in cluster.members: @@ -552,9 +554,10 @@ def output_members(cluster, name=None, format='pretty'): host = build_connect_parameters(m.conn_url)['host'] xlog_location = m.data.get('xlog_location') - lag = '' - if xlog_location is not None: - lag = round(((cluster.last_leader_operation or 0) - m.data.get('xlog_location', 0)) / 1024 / 1024) + if xlog_location is None or (xlog_location_cluster < xlog_location): + lag = '' + else: + lag = round((xlog_location_cluster - xlog_location)/1024/1024) rows.append([ name, @@ -562,7 +565,7 @@ def output_members(cluster, name=None, format='pretty'): host, leader, m.data.get('state', ''), - lag, + lag ]) columns = [ @@ -573,7 +576,7 @@ def output_members(cluster, name=None, format='pretty'): 'State', 'Lag in MB', ] - alignment = {'Cluster': 'l', 'Member': 'l', 'Host': 'l'} + alignment = {'Cluster': 'l', 'Member': 'l', 'Host': 'l', 'Lag in MB': 'r'} print_output(columns, rows, alignment, format)