Slony-I 之一 setup

os: centos 7.4.1708
db: postgresql 11.8
Slony-I: 2.2.8

Slony-I is a “master to multiple slaves” replication system for PostgreSQL supporting cascading (e.g. - a node can feed another node which feeds another node…) and failover.

個人猜測 Slony-I 是 postgresql stream replication 出現之前比較流行的複製工具。

查看官網時發現 Slony-I 有幾點優勢

  1. You need to interact between PostgreSQL versions. Slony (and similar systems like Londiste and Bucardo) can cope with having nodes running different versions of PostgreSQL.
    WAL-based replication requires that all databases use identical versions of PostgreSQL, running on identical architectures.

  2. You only want to replicate parts of the changes that are going on.
    WAL-based replication duplicates absolutely everything.

  3. You need for there to be extra behaviours taking place on subscribers, for instance, populating cache management information.
    WAL-based replication duplicates absolutely everything, and nothing extra that changes data can run on a WAL-based replica.

192.168.56.111  n1
192.168.56.112  n2
192.168.56.113  n3

這3個節點都需要安裝 postgresql 11 及 Slony-I

os

<<centos 7.x 安裝 postgresql 的優化設置>>

postgresql 11

<<centos 7.4 + yum/make + postgresql 11>>

版本

# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core) 
# 
# 
# yum list installed |grep -i postgresql
postgresql11.x86_64                11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-contrib.x86_64        11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-debuginfo.x86_64      11.5-1PGDG.rhel7                    @pgdg11  
postgresql11-devel.x86_64          11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-docs.x86_64           11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-libs.x86_64           11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-llvmjit.x86_64        11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-odbc.x86_64           12.01.0000-1PGDG.rhel7              @pgdg11  
postgresql11-plperl.x86_64         11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-plpython.x86_64       11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-pltcl.x86_64          11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-server.x86_64         11.8-1PGDG.rhel7                    @pgdg11  
postgresql11-tcl.x86_64            2.4.0-2.rhel7.1                     @pgdg11  
postgresql11-test.x86_64           11.8-1PGDG.rhel7                    @pgdg11

# su - postgres
Last login: Wed Jan 15 18:34:12 CST 2020 on pts/0
$
$
$ psql -c "select version();"
                                                 version                                                 
---------------------------------------------------------------------------------------------------------
 PostgreSQL 11.8 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)

slony

# export PGHOME=/usr/pgsql-11;
export PGDATA=/var/lib/pgsql/11/data;
export MANPATH=${PGHOME}/share/man:$MANPATH;
export LD_LIBRARY_PATH=${PGHOME}/lib;
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib;
export PATH=${PGHOME}/bin:$PATH;
export TEMP=/tmp;
export TMPDIR=/tmp;

# cd /opt
# rz
# tar -jxvf ./slony1-2.2.8.tar.bz2
# cd slony1-2.2.8

# ./configure \
 --with-pgconfigdir=/usr/pgsql-11/bin

# make all
# make install

參考:
http://slony.info/

https://www.slony.info/documentation/2.2/index.html

# make all

make[1]: Entering directory `/opt/slony1-2.2.8/src'
make[2]: Entering directory `/opt/slony1-2.2.8/src/parsestatements'
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I/usr/pgsql-11/include/ -c -o test-scanner.o test-scanner.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I/usr/pgsql-11/include/ -c -o scanner.o scanner.c
gcc -I/usr/pgsql-11/include/ -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -L/usr/pgsql-11/lib/ -lpq  -Wl,-rpath,/usr/pgsql-11/lib/ -o test-scanner test-scanner.c scanner.o
./test-scanner < /dev/null > emptytestresult.log
./test-scanner < ./test_sql.sql > test_sql.log
./test-scanner < ./cstylecomments.sql > cstylecomments.log
make[2]: Leaving directory `/opt/slony1-2.2.8/src/parsestatements'
make[2]: Entering directory `/opt/slony1-2.2.8/src/slon'
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o slon.o slon.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o runtime_config.o runtime_config.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o local_listen.o local_listen.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o remote_listen.o remote_listen.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o remote_worker.o remote_worker.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o sync_thread.o sync_thread.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o monitor_thread.o monitor_thread.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o cleanup_thread.o cleanup_thread.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o scheduler.o scheduler.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o dbutils.o dbutils.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o conf-file.o conf-file.c
conf-file.l: In function ‘ProcessConfigFile’:
conf-file.l:272:2: warning: label ‘cleanup_exit’ defined but not used [-Wunused-label]
  cleanup_exit:
  ^
conf-file.l: At top level:
conf-file.c:1219:16: warning: ‘input’ defined but not used [-Wunused-function]
     static int input  (void)
                ^
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o confoptions.o confoptions.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -I/usr/pgsql-11/include/ -c -o misc.o misc.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -I../.. -I../../src/slon -o slon slon.o runtime_config.o local_listen.o remote_listen.o remote_worker.o sync_thread.o monitor_thread.o cleanup_thread.o scheduler.o dbutils.o conf-file.o confoptions.o misc.o ../parsestatements/scanner.o -pthread -L/usr/pgsql-11/lib/ -lpq  -Wl,-rpath,/usr/pgsql-11/lib/  
make[2]: Leaving directory `/opt/slony1-2.2.8/src/slon'
make[2]: Entering directory `/opt/slony1-2.2.8/src/slonik'
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o slonik.o slonik.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o dbutil.o dbutil.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o parser.o parser.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o scan.o scan.c
scan.c:2066:16: warning: ‘input’ defined but not used [-Wunused-function]
     static int input  (void)
                ^
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  slonik.o dbutil.o parser.o  ../parsestatements/scanner.o scan.o -L/usr/pgsql-11/lib/ -lpq  -Wl,-rpath,/usr/pgsql-11/lib/ -o slonik
make[2]: Leaving directory `/opt/slony1-2.2.8/src/slonik'
make[2]: Entering directory `/opt/slony1-2.2.8/src/backend'
cp ../misc/avl_tree.c avl_tree.c
cp ../misc/avl_tree.h avl_tree.h
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -fpic -I/usr/pgsql-11/include/server/ -I. -c -o slony1_funcs.o slony1_funcs.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -fpic -L/usr/pgsql-11/lib/ -lpq  -Wl,-rpath,/usr/pgsql-11/lib/  -shared -o slony1_funcs.2.2.8.so slony1_funcs.o
make[2]: Leaving directory `/opt/slony1-2.2.8/src/backend'
make[2]: Entering directory `/opt/slony1-2.2.8/src/ducttape'
make[2]: Leaving directory `/opt/slony1-2.2.8/src/ducttape'
make[2]: Entering directory `/opt/slony1-2.2.8/src/slony_logshipper'
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o slony_logshipper.o slony_logshipper.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o dbutil.o dbutil.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o ipcutil.o ipcutil.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o parser.o parser.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  -I/usr/pgsql-11/include/ -c -o scan.o scan.c
gcc -g -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I../.. -DPGSHARE="\"/usr/pgsql-11/share/\""  slony_logshipper.o dbutil.o ipcutil.o parser.o  ../parsestatements/scanner.o scan.o -L/usr/pgsql-11/lib/ -lpq  -Wl,-rpath,/usr/pgsql-11/lib/ -o slony_logshipper
make[2]: Leaving directory `/opt/slony1-2.2.8/src/slony_logshipper'
make[1]: Leaving directory `/opt/slony1-2.2.8/src'
make[1]: Entering directory `/opt/slony1-2.2.8/tools'
for subdir in altperl ; do \
          make -C $subdir all || exit; \
        done
make[2]: Entering directory `/opt/slony1-2.2.8/tools/altperl'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/opt/slony1-2.2.8/tools/altperl'
make[1]: Leaving directory `/opt/slony1-2.2.8/tools'
All of Slony-I is successfully made. Ready to install

# make install
make[1]: Entering directory `/opt/slony1-2.2.8/src'
make[2]: Entering directory `/opt/slony1-2.2.8/src/parsestatements'
make[2]: Nothing to be done for `install'.
make[2]: Leaving directory `/opt/slony1-2.2.8/src/parsestatements'
make[2]: Entering directory `/opt/slony1-2.2.8/src/slon'
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs /usr/pgsql-11/bin/
/bin/sh /opt/slony1-2.2.8/config/install-sh -c -m 755 slon /usr/pgsql-11/bin/
make[2]: Leaving directory `/opt/slony1-2.2.8/src/slon'
make[2]: Entering directory `/opt/slony1-2.2.8/src/slonik'
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs /usr/pgsql-11/bin/
/bin/sh /opt/slony1-2.2.8/config/install-sh -c -m 755 slonik /usr/pgsql-11/bin/
make[2]: Leaving directory `/opt/slony1-2.2.8/src/slonik'
make[2]: Entering directory `/opt/slony1-2.2.8/src/backend'
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs /usr/pgsql-11/lib/
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs /usr/pgsql-11/share/
/bin/sh /opt/slony1-2.2.8/config/install-sh -c -m 755 slony1_funcs.2.2.8.so /usr/pgsql-11/lib/
for file in slony1_base.sql slony1_funcs.sql slony1_base.v83.sql slony1_base.v84.sql slony1_funcs.v83.sql slony1_funcs.v84.sql; do \
  /bin/sh /opt/slony1-2.2.8/config/install-sh -c -m 644 $file /usr/pgsql-11/share//`basename $file .sql`.2.2.8.sql || exit ; \
done
make[2]: Leaving directory `/opt/slony1-2.2.8/src/backend'
make[2]: Entering directory `/opt/slony1-2.2.8/src/ducttape'
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs 
make[2]: Leaving directory `/opt/slony1-2.2.8/src/ducttape'
make[2]: Entering directory `/opt/slony1-2.2.8/src/slony_logshipper'
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs /usr/pgsql-11/bin/
/bin/sh /opt/slony1-2.2.8/config/install-sh -c -m 755 slony_logshipper /usr/pgsql-11/bin/
make[2]: Leaving directory `/opt/slony1-2.2.8/src/slony_logshipper'
make[1]: Leaving directory `/opt/slony1-2.2.8/src'
make[1]: Entering directory `/opt/slony1-2.2.8/tools'
for subdir in altperl ; do \
          make -C $subdir install || exit; \
        done
make[2]: Entering directory `/opt/slony1-2.2.8/tools/altperl'
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs /usr/local/etc
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs /usr/pgsql-11/lib/
/bin/sh /opt/slony1-2.2.8/config/mkinstalldirs 
The altperl tools won't be installed unless --with-perltools is specified in configure
make[2]: Leaving directory `/opt/slony1-2.2.8/tools/altperl'
make[1]: Leaving directory `/opt/slony1-2.2.8/tools'
All of Slony-I is successfully installed

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章