Skip to content

Feature/#18850 Add internal virtual ips #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 47 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
27ab0b8
Fixing if service is webui add notify master and backup
rgomezborder Oct 7, 2024
5aa455d
Adding sync iface to internal virtual IPs insead of management
rgomezborder Oct 7, 2024
243eb0f
Adding iface_sync
rgomezborder Oct 8, 2024
e49afd5
There is no need to pass iface_sync
rgomezborder Oct 8, 2024
f149f94
Uploading postgres notify template
rgomezborder Oct 11, 2024
e661c73
Update notify_postgresql.erb
rgomezborder Oct 11, 2024
e91284f
rb_sync_from_master.sh added
rgomezborder Oct 14, 2024
404d20f
rb_keepalived_master_notify_postgresql.sh is exectued each time keepa…
rgomezborder Oct 14, 2024
c11d0d7
do not execute notify_master_postgresql if postgres ip is not registred
rgomezborder Oct 14, 2024
3b4da15
Fix linter
rgomezborder Oct 14, 2024
ee6d44c
Merge branch 'master' into feature/#18850_add_internal_virtual_ips
rgomezborder Oct 25, 2024
eed9100
Remove master.postgresql.service from hosts deregistering virtual IP
rgomezborder Oct 30, 2024
5541261
Fix linter
rgomezborder Oct 30, 2024
7bc354d
Keepalived wont remove posgresql from etc hots
rgomezborder Nov 16, 2024
284dcaa
Deregister postgresql from node to re add it in consul
rgomezborder Nov 18, 2024
7f89792
Update notify posgresql without serf tags
rgomezborder Nov 19, 2024
1ed16c0
Add logger file
rgomezborder Nov 21, 2024
042d464
Remove script execution
rgomezborder Nov 21, 2024
9d54894
Spliting scripts
rgomezborder Nov 25, 2024
dc09b5d
First stable version
rgomezborder Nov 25, 2024
8d10a18
Cleaning tmp file and save logs of rb_sync_from_master in tmp file
rgomezborder Nov 25, 2024
d37a58b
Remove setenforce
rgomezborder Nov 25, 2024
3ea70c4
set_keepalived_permissive if postgresql vrrp is registered
rgomezborder Nov 26, 2024
44fae98
Changing order of Cleaning tmp files fix.
rgomezborder Nov 27, 2024
82f5947
Fix linter
rgomezborder Nov 27, 2024
a7252aa
Directly accessing array elements
rgomezborder Nov 27, 2024
6eb997a
Do not pass master_node to master script
rgomezborder Nov 27, 2024
647375b
Using virtual ip as master
rgomezborder Nov 28, 2024
da255a6
Merge pull request #8 from redBorder/development
rgomezborder Nov 29, 2024
34b80d0
Merge branch 'master' into feature/#18850_add_internal_virtual_ips
rgomezborder Nov 29, 2024
558400e
Using serf tags to pass it to rb_sync_from_master
rgomezborder Nov 29, 2024
c78ddbb
Keeping same priority. Executing scripts in all nodes :)
rgomezborder Nov 30, 2024
c9d0764
Merge pull request #9 from redBorder/development
manegron Dec 8, 2024
e76d713
Merge branch 'master' into feature/#18850_add_internal_virtual_ips
rgomezborder Dec 9, 2024
c94d7e4
Refactor PostgreSQL promotion scripts to use virtual IPs
rgomezborder Jan 2, 2025
50d92f9
Enhance backup notification script to identify and update primary con…
rgomezborder Jan 3, 2025
cd37190
Refactor backup notification script to streamline primary connection …
rgomezborder Jan 7, 2025
525dfed
Merge pull request #11 from redBorder/development
rgomezborder Jan 9, 2025
ae97965
Merge branch 'master' into feature/#18850_add_internal_virtual_ips
rgomezborder Jan 9, 2025
eda657d
fix trigger file
davidredborder Feb 5, 2025
af4524d
Add permissive rules for keepalived service management
rgomezborder Feb 11, 2025
18c92f3
Restore PostgreSQL notification scripts in keepalived configuration
rgomezborder Feb 12, 2025
f0d3b2a
Revert changes
rgomezborder Feb 13, 2025
7489e53
Merge pull request #13 from redBorder/development
manegron Apr 21, 2025
5c49410
Merge branch 'master' into feature/#18850_add_internal_virtual_ips
rgomezborder Jun 19, 2025
2e7d717
Merge pull request #15 from redBorder/development
rgomezborder Jun 27, 2025
be84837
Merge branch 'master' into feature/#18850_add_internal_virtual_ips
rgomezborder Jul 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions resources/providers/config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,37 @@
end
end

unless virtual_ips['internal']['postgresql']['ip'].nil?
postgresql_vrrp = virtual_ips['internal']['postgresql']['ip']
postgresql_iface = virtual_ips['internal']['postgresql']['iface']

template '/usr/lib/redborder/bin/rb_keepalived_master_notify_postgresql.sh' do
cookbook 'keepalived'
source 'notify_master_postgresql.erb'
owner 'root'
group 'root'
mode '0755'
retries 2
variables(virtual_ip: postgresql_vrrp, iface: postgresql_iface)
end

template '/usr/lib/redborder/bin/rb_keepalived_backup_notify_postgresql.sh' do
cookbook 'keepalived'
source 'notify_backup_postgresql.erb'
owner 'root'
group 'root'
mode '0755'
retries 2
variables(virtual_ip: postgresql_vrrp, iface: postgresql_iface)
end

execute 'set_keepalived_permissive' do
command 'semanage permissive -a keepalived_t'
action :run
not_if { shell_out('semanage permissive -l').stdout.include?('keepalived_t') }
end
end

template '/etc/keepalived/keepalived.conf' do
cookbook 'keepalived'
source 'keepalived.conf.erb'
Expand Down Expand Up @@ -153,6 +184,11 @@

action :remove do
begin
execute 'remove_keepalived_permissive' do
command 'semanage permissive -d keepalived_t'
action :run
only_if { shell_out('semanage permissive -l').stdout.include?('keepalived_t') }
end

service 'keepalived' do
supports stop: true
Expand Down
8 changes: 8 additions & 0 deletions resources/templates/default/keepalived.conf.erb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ vrrp_sync_group vg_<%= ip %>_<%= tmp.join("_") %> {
group {
vi_<%= ip %>
}
<% if services.detect { |x| x["service"] == "postgresql" } %>
notify_master "/usr/lib/redborder/bin/rb_keepalived_master_notify_postgresql.sh"
notify_backup "/usr/lib/redborder/bin/rb_keepalived_backup_notify_postgresql.sh"
<% end %>
}
<% end %>
<% end %>
Expand All @@ -44,7 +48,11 @@ vrrp_instance vi_<%= ip %> {
state BACKUP
interface <%= iface %>
virtual_router_id <%= ((@start_id.nil? ? 111 : @start_id.to_i) + index).to_s %>
<% if services.detect { |x| x["service"] == "postgresql" } %>
priority 100
<% else %>
priority <%= 50+@managers.size-@managers.index { |m| m.name == node.name } %>
<% end %>
advert_int 1
nopreempt
<% if !node["redborder"].nil? and !node["redborder"]["dmidecode"].nil? and !node["redborder"]["dmidecode"]["manufacturer"].nil? and node["redborder"]["dmidecode"]["manufacturer"].to_s.downcase == "xen" %>
Expand Down
43 changes: 43 additions & 0 deletions resources/templates/default/notify_backup_postgresql.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/bin/bash

VIRTUAL_IP=<%= @virtual_ip %>
IFACE=<%= @iface %>
NAME=postgresql
CURRENT_NODE=$(hostname -s)
LOG_FILE=/tmp/rb_notify_postgresql_backup.log

# Cleaning tmp files
rm -f /tmp/postgresql.trigger
rm -f /tmp/rb_notify_postgresql*

date >> "$LOG_FILE"
echo "Executing rb_notify_backup_postgresql" >> "$LOG_FILE"

grep vrrp_sync_group /etc/keepalived/keepalived.conf | grep -q $NAME
if [ $? -ne 0 ]; then
echo "$NAME has no virtual ip on this node" >> "$LOG_FILE"
exit 0
fi

# If the VIP is still up, then something is wrong
found=0
sleep 5 # wait 5 seconds to converge keepalived successfully

for i in $(seq 0 2); do
ip addr show dev $IFACE | grep "inet " | awk '{print $2}' | sed 's/\/.*//' | grep -q "^$VIRTUAL_IP$"
if [ $? -eq 0 ]; then
# found virtual ip address
found=1
break
fi
sleep 1
done

if [ $found -eq 1 ]; then
echo "found virtual ip $VIRTUAL_IP, doing nothing" >> "$LOG_FILE"
exit 0
fi

# Promoting to slave
echo "Promoting to slave $CURRENT_NODE with IP: $VIRTUAL_IP" >> "$LOG_FILE"
/usr/lib/redborder/bin/rb_sync_from_master.sh $VIRTUAL_IP >> "$LOG_FILE"
46 changes: 46 additions & 0 deletions resources/templates/default/notify_master_postgresql.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/bin/bash

VIRTUAL_IP=<%= @virtual_ip %>
IFACE=<%= @iface %>
NAME=postgresql
CURRENT_NODE=$(hostname -s)
LOG_FILE=/tmp/rb_notify_postgresql_master.log

# Cleaning tmp files
rm -f /tmp/postgresql.trigger
rm -f /tmp/rb_notify_postgresql*

date >> "$LOG_FILE"
echo "Executing rb_notify_master_postgresql" >> "$LOG_FILE"

grep vrrp_sync_group /etc/keepalived/keepalived.conf | grep -q $NAME
if [ $? -ne 0 ]; then
echo "$NAME has no virtual ip on this node" >> "$LOG_FILE"
exit 0
fi

# If the VIP is not up, then something is wrong
found=0
sleep 5 # wait 5 seconds to converge keepalived successfully

for i in $(seq 0 2); do
ip addr show dev $IFACE | grep "inet " | awk '{print $2}' | sed 's/\/.*//' | grep -q "^$VIRTUAL_IP$"
if [ $? -eq 0 ]; then
# found virtual ip address
found=1
break
fi
sleep 1
done

if [ $found -eq 0 ]; then
echo "error: virtual ip $VIRTUAL_IP not found, exiting" >> "$LOG_FILE"
exit 0
fi

# Promoting to master
echo "Promoting to master $CURRENT_NODE" >> "$LOG_FILE"
#rm -f /var/lib/pgsql/data/standby.signal
touch /tmp/postgresql.trigger
sed -i '/^primary_conninfo/d' /var/lib/pgsql/data/postgresql.conf
sed -i '/^promote_trigger_file/d' /var/lib/pgsql/data/postgresql.conf