Difference between revisions of "Posgres Server Configuration"

From edegan.com
Jump to navigation Jump to search
imported>Ed
(New page: ==Mount Bear== Mounting Bear makes data transfer for the build easier... mkdir /mnt/ed mount -t cifs //bear/ed_egan/ /mnt/ed -o user=haas\\ed_egan ==Check the spec== Run some basic ...)
 
 
(14 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
[[category:McNair Admin]]
 +
 +
See also:
 +
*[[Working with PostgreSQL]]
 +
*[[Haas PhD Server Configuration]]
 +
 +
Note that the server is now on 128.32.204.203 (having been moved to the new colo)
  
 
==Mount Bear==
 
==Mount Bear==
Line 28: Line 35:
 
  python -v
 
  python -v
 
   (ctrl-D) to get out if it works
 
   (ctrl-D) to get out if it works
+
 
 
==Build Postgres==
 
==Build Postgres==
  
Line 37: Line 44:
 
  tar xf postgresql-9.1.2.tar
 
  tar xf postgresql-9.1.2.tar
 
  cd postgresql-9.1.2
 
  cd postgresql-9.1.2
+
 
 
Update missing packages needed for the build
 
Update missing packages needed for the build
  
 
  yum install gcc gcc-c++ autoconf automake
 
  yum install gcc gcc-c++ autoconf automake
 
  yum install readline-devel zlib-devel python-devel
 
  yum install readline-devel zlib-devel python-devel
+
 
+
 
 
Now do the actual install ([http://www.postgresql.org/docs/9.1/interactive/install-procedure.html Official Instructions]):
 
Now do the actual install ([http://www.postgresql.org/docs/9.1/interactive/install-procedure.html Official Instructions]):
  
Line 53: Line 60:
 
  gmake world
 
  gmake world
 
   PostgreSQL, contrib and HTML documentation successfully made. Ready to install.
 
   PostgreSQL, contrib and HTML documentation successfully made. Ready to install.
+
 
 
As root edit /etc/profile to include (before 'export PATH'):
 
As root edit /etc/profile to include (before 'export PATH'):
  
Line 65: Line 72:
 
  mkdir /usr/local/pgsql/data
 
  mkdir /usr/local/pgsql/data
 
  chown postgres /usr/local/pgsql/data
 
  chown postgres /usr/local/pgsql/data
  su - postgres
+
  su postgres
 
  /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
 
  /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
 
  /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
 
  /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
 
  /usr/local/pgsql/bin/createdb test
 
  /usr/local/pgsql/bin/createdb test
 
  /usr/local/pgsql/bin/psql test
 
  /usr/local/pgsql/bin/psql test
+
 
 
Make a database user:
 
Make a database user:
 
   
 
   
Line 84: Line 91:
  
 
  /etc/init.d/iptables restart
 
  /etc/init.d/iptables restart
+
 
+
 
 
Change postgres.conf:
 
Change postgres.conf:
  
Line 95: Line 102:
 
  maintenance_work_mem = 512MB
 
  maintenance_work_mem = 512MB
 
  effective_cache_size = 14GB  
 
  effective_cache_size = 14GB  
+
 
 
Add access permissions to pg_hba.conf
 
Add access permissions to pg_hba.conf
  
Line 102: Line 109:
 
  host    all        all        128.32.67.0/24        trust
 
  host    all        all        128.32.67.0/24        trust
 
  host    all        all        10.136.0.0/23        trust
 
  host    all        all        10.136.0.0/23        trust
+
 
 
Add to /etc/rc.local
 
Add to /etc/rc.local
  /usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data
+
  su -c '/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l >/usr/local/pgsql/data/serverlog' postgres
 
 
   
 
   
Start postgres with (if you've fixed the path then abbrev the first part)
+
Start postgres with one the following commands as the postgres user (if you've fixed the path then abbrev the first part)
  
 
  /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
 
  /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
   or
+
   (runs the server with output on the terminal)
  /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start &
+
  /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >/usr/local/pgsql/data/logfile 2>&1 &
+
  (runs the server with output in the logfile - note the path is needed for the logfile)
Note that the second command may fail silently if there is something wrong with the config, and the first uses the terminal unless you add the &.
+
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/logfile start &
 +
  (same as above but using the pg_ctl wrapper)
 
   
 
   
 
Check postgres is listening on 5432:
 
Check postgres is listening on 5432:
  
 
  netstat -tulpn
 
  netstat -tulpn
+
 
 
==Test==
 
==Test==
  
 
Test by connecting remotely using a psql client on your desktop. Then enjoy!
 
Test by connecting remotely using a psql client on your desktop. Then enjoy!
 +
 +
psql -h 128.32.252.201 -U ed_egan test
 +
 +
==Adding Users==
 +
 +
===Adding Root Accounts to the box===
 +
 +
Assuming that you have root, you can create user accounts on the box and give them root too. This isn't necessary for regular users - they just need a Postgres user account (see below). To add users to the box, the process is:
 +
 +
First great the users group, checking the last group number (5xx is the next one):
 +
cat /etc/group
 +
/usr/sbin/groupadd -g 5xx username
 +
 +
Then add the user (it doesn't matter what you put for -p, it is going to be overwritten):
 +
/usr/sbin/useradd -g username -G root -s /bin/bash -p xxxx -d /home/username -m username
 +
      where g is the primary group, G is other groups, p sets a password,
 +
      d declares a home directory and m makes the directory
 +
 +
Change the user's password:
 +
passwd username
 +
 +
And add the user to the sudoers file
 +
echo 'username ALL=(ALL) ALL' >> /etc/sudoers
 +
 +
====Deleting a user====
 +
 +
To delete a user:
 +
/usr/sbin/userdel -r roger
 +
where r removes the home directory
 +
 +
And to remove their group
 +
/usr/sbin/groupdel username
 +
 +
And remove their entry from the sudoers file too if they had root.
 +
 +
===Adding Postgres Accounts===
 +
 +
Log on to the box as root then:
 +
su postgres
 +
 +
To work as the postgres account.
 +
 +
Now add the user using:
 +
/usr/local/pgsql/bin/createuser username
 +
(Answer y or n to whether you want the new role to be superuser - generally y)
 +
 +
If the user doesn't have an account on the box, then you'll need to add a database for them (use DBname of 'firstname_data' as a default):
 +
/usr/local/pgsql/bin/createdb -O username DBname
 +
 +
==Size, Backup & Restore==
 +
 +
===Find the sizes of databases on our postgres server===
 +
 +
*Connect to the dbase server (poss. with an admin account)
 +
*psql postgres
 +
*run the following query:
 +
 +
SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
 +
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
 +
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
 +
        ELSE 'No Access'
 +
    END AS SIZE
 +
FROM pg_catalog.pg_database d
 +
    ORDER BY
 +
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
 +
        THEN pg_catalog.pg_database_size(d.datname)
 +
        ELSE NULL
 +
    END DESC -- nulls first
 +
    LIMIT 20;
 +
 +
To see the disk space use on all drives use:
 +
df -h
 +
 +
===Backing up a dbase===
 +
 +
pg_dump dbase > dbase.dump
 +
or
 +
pg_dump -Fc dbase > dbase_fc.dump (which uses compression)
 +
 +
Note: Use top or ps -aux to see memory/CPU usage.
 +
 +
We can also manually compress/decompress using:
 +
 +
gzip filename
 +
gzip -d filename.gz
 +
 +
When done, we can drop the database:
 +
dropdb dbase
 +
 +
===Restoring a dbase===
 +
 +
pg_restore -d newdb dbase.dump
 +
 +
[[admin_classification::IT Build| ]]

Latest revision as of 12:20, 14 July 2018


See also:

Note that the server is now on 128.32.204.203 (having been moved to the new colo)

Mount Bear

Mounting Bear makes data transfer for the build easier...

mkdir /mnt/ed
mount -t cifs //bear/ed_egan/ /mnt/ed -o user=haas\\ed_egan

Check the spec

Run some basic commands to check the spec of the box

uname -a
 Linux PhD-postgres2 2.6.18-274.12.1.el5 #1 SMP Tue Nov 29 13:37:46 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

cat /etc/issue
 CentOS release 5.7 (Final)

cat /proc/version
 Linux version 2.6.18-274.12.1.el5 

gmake --version
 GNU Make 3.81 (need >3.8)

perl -V
 check for: usemultiplicity=define

python -v
 (ctrl-D) to get out if it works

Build Postgres

Download a copy of Postgres 9.1.2 and put it in /home/ed/ (not on the mount - have it local) Then:

gunzip postgresql-9.1.2.tar.gz
tar xf postgresql-9.1.2.tar
cd postgresql-9.1.2

Update missing packages needed for the build

yum install gcc gcc-c++ autoconf automake
yum install readline-devel zlib-devel python-devel


Now do the actual install (Official Instructions):

./configure --with-perl --with-python --with-segsize=16 --with-blocksize=32

gmake
 All of PostgreSQL is successfully made. Ready to install.

gmake world
 PostgreSQL, contrib and HTML documentation successfully made. Ready to install.

As root edit /etc/profile to include (before 'export PATH'):

PATH=/usr/local/pgsql/bin:$PATH

Configure the server

Add the postgres user and get her running:

adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test

Make a database user:

CREATE USER ed_egan WITH PASSWORD 'whatever';

Edit /etc/sysconfig/iptables to include:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 128.32.66.0/24 --dport 5432 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 128.32.67.0/24 --dport 5432 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 128.32.74.0/24 --dport 5432 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 10.136.0.0/23 --dport 5432 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 136.152.208.0/22 --dport 5432 -j ACCEPT
/etc/init.d/iptables restart


Change postgres.conf:

listen_addresses = '*'
port = 5432		
max_connections = 100	
shared_buffers = 4GB	
work_mem = 512MB	
maintenance_work_mem = 512MB
effective_cache_size = 14GB 

Add access permissions to pg_hba.conf

host    all         all         128.32.74.0/24        trust
host    all         all         128.32.66.0/24        trust
host    all         all         128.32.67.0/24        trust
host    all         all         10.136.0.0/23         trust

Add to /etc/rc.local

su -c '/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l >/usr/local/pgsql/data/serverlog' postgres

Start postgres with one the following commands as the postgres user (if you've fixed the path then abbrev the first part)

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
 (runs the server with output on the terminal)
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >/usr/local/pgsql/data/logfile 2>&1 &
 (runs the server with output in the logfile - note the path is needed for the logfile)
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/logfile start &
 (same as above but using the pg_ctl wrapper)

Check postgres is listening on 5432:

netstat -tulpn

Test

Test by connecting remotely using a psql client on your desktop. Then enjoy!

psql -h 128.32.252.201 -U ed_egan test

Adding Users

Adding Root Accounts to the box

Assuming that you have root, you can create user accounts on the box and give them root too. This isn't necessary for regular users - they just need a Postgres user account (see below). To add users to the box, the process is:

First great the users group, checking the last group number (5xx is the next one):

cat /etc/group
/usr/sbin/groupadd -g 5xx username 

Then add the user (it doesn't matter what you put for -p, it is going to be overwritten):

/usr/sbin/useradd -g username -G root -s /bin/bash -p xxxx -d /home/username -m username
      where g is the primary group, G is other groups, p sets a password, 
      d declares a home directory and m makes the directory

Change the user's password:

passwd username

And add the user to the sudoers file

echo 'username ALL=(ALL) ALL' >> /etc/sudoers

Deleting a user

To delete a user:

/usr/sbin/userdel -r roger 
where r removes the home directory

And to remove their group

/usr/sbin/groupdel username

And remove their entry from the sudoers file too if they had root.

Adding Postgres Accounts

Log on to the box as root then:

su postgres

To work as the postgres account.

Now add the user using:

/usr/local/pgsql/bin/createuser username
(Answer y or n to whether you want the new role to be superuser - generally y)

If the user doesn't have an account on the box, then you'll need to add a database for them (use DBname of 'firstname_data' as a default):

/usr/local/pgsql/bin/createdb -O username DBname

Size, Backup & Restore

Find the sizes of databases on our postgres server

  • Connect to the dbase server (poss. with an admin account)
  • psql postgres
  • run the following query:
SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
        ELSE 'No Access'
    END AS SIZE
FROM pg_catalog.pg_database d
    ORDER BY
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(d.datname)
        ELSE NULL
    END DESC -- nulls first
   LIMIT 20;

To see the disk space use on all drives use:

df -h

Backing up a dbase

pg_dump dbase > dbase.dump
or 
pg_dump -Fc dbase > dbase_fc.dump (which uses compression)

Note: Use top or ps -aux to see memory/CPU usage.

We can also manually compress/decompress using:

gzip filename 
gzip -d filename.gz

When done, we can drop the database:

dropdb dbase

Restoring a dbase

pg_restore -d newdb dbase.dump