3.3 KiB
intervention 20231027
Troubleshoot
My first action was check the shared drive where archive_commad
is supposed to be sending WAL files (archivelog): \\10.6.1.3\archivelog
.
That share does not exist anymore.
I check both servers for the existance of such drive and noone of them has that share.
first solution implementation
Then I look for a place to write archivelogs, I saw that servers have a R:\
drive with plenty of space.
So I decided to use a cross copy between both servers, that is:
- Primary will copy to backup as:
\\10.6.1.3\R$\postgresql
- Backup will copy to primary as:
\\10.6.0.3\R$\postgresql
Using that approach it's a best practice to get archived from each other, and solve switchover/failover issues in the future.
Then I tried adding a network drive, mapping the shared R:\
in to Z:\
as:
- primary's
Z:\
as:\\10.6.1.3\R$\postgresql
- backup's
Z:\
as :\\10.6.0.3\R$\postgresql
My idea at that stage was have a unique postgresql.conf
because archive_command
will be the same for both servers:
archive_command = 'copy "%p" "Z:\\archivelog\\%f"'
This setting also create a good configuration, We will not care about switchover/failover in terms of config changes.
The problem
I perform all my tests on the backup server.
Summary: No matter which command I set on postgresql.conf->archive_command
, postgresql report Permission Denied .
I try all the options I can imagine:
- My prefered solution using
Z:\
- Direct copy to
\\10.6.0.3\R$
- Add a new shared drive on the primary, for example I shared
\\10.6.0.3\postgresql
- Grant permissions to
network service
windows "user" - Grant permissions to
Everyone
windows group. - Combinations of the above options
Until I run out of options.
Of course when I copied the file via powershell with the Admin user, it worked. All the time.
So I'm sure the problem comes from the user which runs PostgreSQL service, I had faced similar problems in the past.
The problem is that I'm not a windows admin, my knowledge is limited here, I tried everything I could think, but maybe a windows sysadmin will know how to solve that permission problem.
Current config
It was late for me so I decide to do a temporary solution.
What I did was creaete a local folder on both servers:
R:\postgresql\local\archivelog
And use:
archive_command = 'copy "%p" "R:\\postgresql\\local\\archivelog\\%f"'
I modified postgresql.conf so archivecommand is: archive_command = 'copy "%p" "Z:\archivelog%f
#archive_command = 'copy "%p" "\\\\10.6.1.3\\\archivelog\\%f"' # command to use to archive a logfile segment
archive_command = 'copy "%p" "\\\\10.6.1.3\\\R\$\\postgresql\\archivelog\\%f"'
#archive_command = 'copy "%p" "Z:\\archivelog\\%f"'
#archive_command = 'copy "%p" "R:\\postgresql\\local\\archivelog\\%f"'
I tried many options but nothing works, it was related to windows permissions. I tried copying from the powershell with admin user and the copy from one server to the other worked. I tried adding permissions (as much as I could remember) but nothing worked.
So At the end I decided to archive locally on "R:"
So both server are archiving into "R:\postgresql\local\archivelog"
I restarted the master instance of postgresql because of this, to apply the new setup.