1. 安裝配置
配置表信息:node
主機名:linux
IP地址ios |
Hosts Namec++ |
VIPsql |
192.168.1.15bash |
P1服務器 |
192.168.1.24app |
192.168.1.16dom |
P2ssh |
192.168.1.24 |
192.168.1.17 |
P3 |
- |
192.168.1.18 |
P4 |
- |
192.168.1.19 |
P5 |
- |
192.168.1.20 |
P6 |
- |
192.168.1.23 |
P7 |
- |
192.168.1.24 |
P0 |
- |
環境:
CentOS 6 x64
Postgres-XL 9.5r1.5
Keepalived v1.2.17
2. 修改HOSTS
全部節點上都須要增長腳本以下:
# vi /etc/hosts
192.168.1.24 P0 P0.db 192.168.1.15 P1 P1.db 192.168.1.16 P2 P2.db 192.168.1.17 P3 P3.db 192.168.1.18 P4 P4.db 192.168.1.19 P5 P5.db 192.168.1.20 P6 P6.db 192.168.1.23 P7 P7.db
3. 建立用戶
每一個節點都創建用戶postgres,而且創建.ssh目錄,並配置相應的權限:
# useradd postgres # passwd postgres # su - postgres # mkdir ~/.ssh # chmod 700 ~/.ssh
4. 關閉防火牆
# chkconfig iptables off # service iptable stop
### 檢查是否已經關閉
# chkconfig --list | grep ip iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
5. 關閉SELINUX
selinux設置:
# vi /etc/selinux/config
設置SELINUX=disabled,保存退出。
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection.
6. 安裝依賴包
# yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl # yum install -y gcc gcc-c++ automake autoconf libtool make # yum install -y jadetex.noarch docbook* # yum -y install openssl-*
監控用命令安裝(iostat):
# yum install -y sysstat
7. ssh免密碼登陸
7.1. P1
GTM上生成Key:
# su - postgres $ ssh-keygen -t rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys
GTM上的Key複製到其餘節點
$ scp ~/.ssh/authorized_keys postgres@P2:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P3:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P4:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P5:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P6:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P7:~/.ssh/
7.2. P2
GTM Sandby生成Key:
# su - postgres $ ssh-keygen -t rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys
GTM Sandby上的Key複製到其餘節點
$ scp ~/.ssh/authorized_keys postgres@P1:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P3:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P4:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P5:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P6:~/.ssh/ $ scp ~/.ssh/authorized_keys postgres@P7:~/.ssh/
8. Keepalived
8.1. 安裝
### 在P1和P2兩臺上進行安裝
# tar xvf keepalived-1.2.17.tar.gz # ./configure --prefix=/app/keepalived/ # make # make install # cp /app/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ # cp /app/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ # mkdir /etc/keepalived # cp /app/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ # cp /app/keepalived/sbin/keepalived /usr/sbin/
8.2. P1
### 修改P1上的keepalive配置文件
# vi /etc/keepalived/keepalived.conf
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.24/24 dev eth1 } } virtual_server 192.168.1.24 6666 { delay_loop 3 nat_mask 255.255.255.0 persistence_timeout 30 protocol TCP real_server 192.168.1.15 6666{ weight 3 notify_down /etc/keepalived/keepalived.sh TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 6666 } } }
# vi /etc/keepalived/keepalived.sh
#!/bin/bash pkill keepalived
# chmod +x /etc/keepalived/keepalived.sh
8.3. P2
### 修改P1上的keepalive配置文件
# vi /etc/keepalived/keepalived.conf
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.24/24 dev eth1 } notify_master /etc/keepalived/keepalived2.sh } virtual_server 192.168.1.24 6666 { delay_loop 3 # lb_algo wrr # lb_kind DR nat_mask 255.255.255.0 persistence_timeout 30 protocol TCP real_server 192.168.1.16 6666{ weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 6666 } } }
# vi /etc/keepalived/keepalived2.sh
#!/bin/bash ssh P2 "gtm_ctl promote -Z gtm -D /db/gtmSandby" ssh P2 "gtm_ctl reconnect -Z gtm_proxy -D /db/gtmProxy1 -o \"-s 192.168.1.24 -t 6666\"" ssh P3 "gtm_ctl reconnect -Z gtm_proxy -D /db/gtmProxy2 -o \"-s 192.168.1.24 -t 6666\""
# chmod +x /etc/keepalived/keepalived2.sh
9. 下載安裝包及編譯
# wget http://files.postgres-xl.org/postgres-xl-9.5r1.4.tar.gz ### 編譯及安裝pgxl及子項目contrib # tar xvf postgres-xl-9.5r1.5.tar.gz # cd postgres-xl-9.5r1.5 # ./configure --prefix=/db/pgxl # make # make install ### cortrib中有不少postgres很牛的工具,通常要裝上。如ltree,uuid,postgres_fdw等等。 # cd contrib/ # make all # make install
10. 配置環境變量
### 各節點都須要配置
# su - postgres $ vi + .bashrc
export PGHOME=/db/pgxl export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH export PATH=$PGHOME/bin:$PATH export MANPATH=$PGHOME/share/man:$MANPATH
$ source .bashrc
# yum install ntpdate -y # vi /etc/ntp.conf
# 加入下面的指定同步時間的服務器IP server 192.168.1.253
# rpm -qa | grep ntp #查詢一下是否已經安裝# 啓動ntpd服務 # chkconfig --list | grep ntp #看下服務狀況 # chkconifg ntpd on # service ntpd start 或 /etc/init.d/ntpd start
11. Postgres-XL組件配置
11.1. 建立數據目錄
各節點分別按上面的表進行目錄建立:
11.1.1. P1
# mkdir /db/gtm # mkdir /db/coord1 # mkdir /db/tablespace # chown -R postgres.postgres /db
11.1.2. P2
# mkdir /db/gtmProxy1 # mkdir /db/gtmSandby # mkdir /db/coord2 # mkdir /db/tablespace # chown -R postgres.postgres /db
11.1.3. P3
# mkdir /db/gtmProxy2 # mkdir /db/coord3 # mkdir /db/tablespace # chown -R postgres.postgres /db
11.1.4. P4
# mkdir /db/datan1 # mkdir /db/tablespace # mkdir /db/datan5 # chown -R postgres.postgres /db
11.1.5. P5
# mkdir /db/datan2 # mkdir /db/tablespace # mkdir /db/datan6 # chown -R postgres.postgres /db
11.1.6. P6
# mkdir /db/datan3 # mkdir /db/tablespace # mkdir /db/datan7 # chown -R postgres.postgres /db
11.1.7. P7
# mkdir /db/datan4 # mkdir /db/tablespace # mkdir /db/datan8 # chown -R postgres.postgres /db
11.2. 初始化各節點
11.2.1. P1
11.2.1.1. GTM
# su - postgres $ initgtm -Z gtm -D /db/gtm $ vi /db/gtm/gtm.conf
nodename = 'gtm' #節點名稱,任意指定,不能與其餘節點重複 listen_addresses = '*' #GTM監聽的ip地址,*表明監聽全部的集羣ip port =6666 #gtm監控的端口號 startup = ACT #act表明gtm是主庫,若是是standy,設置爲'STANDBY' keepalives_idle = 120 keepalives_interval = 10 keepalives_count = 10
11.2.1.2. Coordinators1
初始化Coordinator1
$ initdb -D /db/coord1 --nodename coord1 -E UTF8 --locale=C -U postgres -W $ vi /db/coord1/postgresql.conf
# - Connection Settings - listen_addresses = '*' port = 5432 max_connections = 200 tcp_keepalives_idle = 600 tcp_keepalives_interval = 15 tcp_keepalives_count = 5 max_prepared_transactions = 200 shared_buffers = 512MB # CLIENT CONNECTION DEFAULTS statement_timeout = 600000 # in milliseconds, 0 is disabled lock_timeout = 600000 # in milliseconds, 0 is disabled # DATA NODES AND CONNECTION POOLING #---------------------------------- pooler_port = 6543 max_pool_size = 200 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 # GTM CONNECTION #-------------------------- gtm_host = 'P0' #gtm所在的主機地址 gtm_port = 6666 #gtm配置中,gtm端口號配置爲6666 pgxc_node_name = 'coord1' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 6MB # QUERY TUNING #---------------------- effective_cache_size = 1GB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
修改pg_hba.conf
$ vi + /db/coord1/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.2. P2
11.2.2.1. GTM Sandby
# su - postgres $ initgtm -Z gtm -D /db/gtmSandby $ vi /db/gtmSandby/gtm.conf
nodename = 'gtms' #節點名稱,任意指定,不能與其餘節點重複 listen_addresses = '*' #GTM監聽的ip地址,*表明監聽全部的集羣ip port =6666 #gtm監控的端口號 startup = STANDBY #act表明gtm是主庫,若是是standy,設置爲'STANDBY' active_host = 'P1' active_port = 6666 keepalives_idle = 120 keepalives_interval = 10 keepalives_count = 10
11.2.2.2. GTM Proxy1
# su - postgres $ initgtm -Z gtm_proxy -D /db/gtmProxy1 $ vi /db/gtmProxy1/gtm_proxy.conf
### 設置以下:
nodename='gtmProxy1' listen_addresses = '*' port=6667 worker_threads = 11 #按節點數進行設置 gtm_host='P0' gtm_port=6666 keepalives_idle = 120 keepalives_interval = 10 keepalives_count = 10
11.2.2.3. Coordinators2
$ initdb -D /db/coord2 --nodename coord2 -E UTF8 --locale=C -U postgres -W $ vi /db/coord2/postgresql.conf
# - Connection Settings - listen_addresses = '*' port = 5432 max_connections = 200 tcp_keepalives_idle = 600 tcp_keepalives_interval = 15 tcp_keepalives_count = 5 max_prepared_transactions = 200 shared_buffers = 512MB # CLIENT CONNECTION DEFAULTS statement_timeout = 600000 # in milliseconds, 0 is disabled lock_timeout = 600000 # in milliseconds, 0 is disabled # DATA NODES AND CONNECTION POOLING #---------------------------------- pooler_port = 6543 max_pool_size = 200 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 # GTM CONNECTION #-------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm配置中,gtm端口號配置爲6666 pgxc_node_name = 'coord2' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 6MB # QUERY TUNING #---------------------- effective_cache_size = 1GB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/coord2/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.3. P3
11.2.3.1. GTM Proxy2
# su - postgres $ initgtm -Z gtm_proxy -D /db/gtmProxy2 $ vi /db/gtmProxy2/gtm_proxy.conf
nodename='gtmProxy2' listen_addresses = '*' port=6667 worker_threads = 11 #按節點數進行設置 gtm_host='P0' gtm_port=6666 keepalives_idle = 120 keepalives_interval = 10 keepalives_count = 10
11.2.3.2. Coordinators3
$ initdb -D /db/coord3 --nodename coord3 -E UTF8 --locale=C -U postgres -W $ vi /db/coord3/postgresql.conf
# - Connection Settings - listen_addresses = '*' port = 5432 max_connections = 200 tcp_keepalives_idle = 600 tcp_keepalives_interval = 15 tcp_keepalives_count = 5 max_prepared_transactions = 200 shared_buffers = 512MB # CLIENT CONNECTION DEFAULTS statement_timeout = 600000 # in milliseconds, 0 is disabled lock_timeout = 600000 # in milliseconds, 0 is disabled # DATA NODES AND CONNECTION POOLING #---------------------------------- pooler_port = 6543 max_pool_size = 200 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 # GTM CONNECTION #-------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm配置中,gtm端口號配置爲6666 pgxc_node_name = 'coord3' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 6MB # QUERY TUNING #---------------------- effective_cache_size = 1GB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/coord3/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.4. P4
11.2.4.1. Datanode1
$ initdb -D /db/datan1 --nodename datan1 -E UTF8 --locale=C -U postgres -W $ vi /db/datan1/postgresql.conf
# - CONNECTIONS AND AUTHENTICATION #------------------------------------ listen_addresses = '*' port = 5551 max_connections = 700 # DATA NODES AND CONNECTION POOLING #---------------------------------------------- pooler_port = 5561 max_pool_size = 700 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 max_prepared_transactions = 700 shared_buffers = 512MB # GTM CONNECTION #----------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm端口號 pgxc_node_name = 'datan1' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 1MB # QUERY TUNING #---------------------- effective_cache_size = 512MB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/datan1/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.4.2. Datanode5
$ initdb -D /db/datan5 --nodename datan5 -E UTF8 --locale=C -U postgres -W $ vi /db/datan5/postgresql.conf
# - CONNECTIONS AND AUTHENTICATION #------------------------------------ listen_addresses = '*' port = 5552 max_connections = 700 # DATA NODES AND CONNECTION POOLING #---------------------------------------------- pooler_port = 5562 max_pool_size = 700 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 max_prepared_transactions = 700 shared_buffers = 512MB # GTM CONNECTION #----------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm端口號 pgxc_node_name = 'datan5' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 1MB # QUERY TUNING #---------------------- effective_cache_size = 512MB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/datan5/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.5. P5
11.2.5.1. Datanode2
$ initdb -D /db/datan2 --nodename datan2 -E UTF8 --locale=C -U postgres -W $ vi /db/datan2/postgresql.conf
# - CONNECTIONS AND AUTHENTICATION #------------------------------------ listen_addresses = '*' port = 5552 max_connections = 700 # DATA NODES AND CONNECTION POOLING #---------------------------------------------- pooler_port = 5562 max_pool_size = 700 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 max_prepared_transactions = 700 shared_buffers = 512MB # GTM CONNECTION #----------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm端口號 pgxc_node_name = 'datan2' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 1MB # QUERY TUNING #---------------------- effective_cache_size = 512MB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/datan2/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.5.2. Datanode6
$ initdb -D /db/datan6 --nodename datan6 -E UTF8 --locale=C -U postgres -W $ vi /db/datan6/postgresql.conf
# - CONNECTIONS AND AUTHENTICATION #------------------------------------ listen_addresses = '*' port = 5552 max_connections = 700 # DATA NODES AND CONNECTION POOLING #---------------------------------------------- pooler_port = 5562 max_pool_size = 700 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 max_prepared_transactions = 700 shared_buffers = 512MB # GTM CONNECTION #----------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm端口號 pgxc_node_name = 'datan6' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 1MB # QUERY TUNING #---------------------- effective_cache_size = 512MB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/datan6/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.6. P6
11.2.6.1. Datanode3
$ initdb -D /db/datan3 --nodename datan3 -E UTF8 --locale=C -U postgres -W $ vi /db/datan3/postgresql.conf
# - CONNECTIONS AND AUTHENTICATION #------------------------------------ listen_addresses = '*' port = 5551 max_connections = 700 # DATA NODES AND CONNECTION POOLING #---------------------------------------------- pooler_port = 5561 max_pool_size = 700 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 max_prepared_transactions = 700 shared_buffers = 512MB # GTM CONNECTION #----------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm端口號 pgxc_node_name = 'datan3' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 1MB # QUERY TUNING #---------------------- effective_cache_size = 512MB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/datan3/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.6.2. Datanode7
$ initdb -D /db/datan7 --nodename datan7 -E UTF8 --locale=C -U postgres -W $ vi /db/datan7/postgresql.conf
# - CONNECTIONS AND AUTHENTICATION #------------------------------------ listen_addresses = '*' port = 5552 max_connections = 700 # DATA NODES AND CONNECTION POOLING #---------------------------------------------- pooler_port = 5562 max_pool_size = 700 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 max_prepared_transactions = 700 shared_buffers = 512MB # GTM CONNECTION #----------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm端口號 pgxc_node_name = 'datan7' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 1MB # QUERY TUNING #---------------------- effective_cache_size = 512MB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/datan7/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.7. P7
11.2.7.1. Datanode4
$ initdb -D /db/datan4 --nodename datan4 -E UTF8 --locale=C -U postgres -W $ vi /db/datan4/postgresql.conf
# - CONNECTIONS AND AUTHENTICATION #------------------------------------ listen_addresses = '*' port = 5551 max_connections = 700 # DATA NODES AND CONNECTION POOLING #---------------------------------------------- pooler_port = 5561 max_pool_size = 700 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 max_prepared_transactions = 700 shared_buffers = 512MB # GTM CONNECTION #----------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm端口號 pgxc_node_name = 'datan4' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 1MB # QUERY TUNING #---------------------- effective_cache_size = 512MB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/datan4/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.7.2. Datanode8
$ initdb -D /db/datan8 --nodename datan8 -E UTF8 --locale=C -U postgres -W $ vi /db/datan8/postgresql.conf
# - CONNECTIONS AND AUTHENTICATION #------------------------------------ listen_addresses = '*' port = 5552 max_connections = 700 # DATA NODES AND CONNECTION POOLING #---------------------------------------------- pooler_port = 5562 max_pool_size = 700 pool_conn_keepalive = 600 pool_maintenance_timeout = 30 max_prepared_transactions = 700 shared_buffers = 512MB # GTM CONNECTION #----------------------------- gtm_host = 'P0' #gtm所在的主機地址,有sandby時爲虛擬IP地址 gtm_port = 6666 #gtm端口號 pgxc_node_name = 'datan8' # RESOURCE USAGE (except WAL) #----------------------------- work_mem = 1MB # QUERY TUNING #---------------------- effective_cache_size = 512MB # CLIENT CONNECTION DEFAULTS #-------------------------- datestyle = 'iso, ymd' timezone = 'Asia/Shanghai'
$ vi + /db/datan8/pg_hba.conf
# "local" is for Unix domain socket connections only host all all 192.168.1.15/32 trust host all all 192.168.1.16/32 trust host all all 192.168.1.17/32 trust host all all 192.168.1.18/32 trust host all all 192.168.1.19/32 trust host all all 192.168.1.20/32 trust host all all 192.168.1.23/32 trust # IPv4 local connections: host all all 0.0.0.0/0 md5
11.2.8. 覈對各節點配置
11.2.8.1. 覈對端口
$ find /db -name postgresql.conf | xargs grep "port = "
11.2.8.2. 覈對GTM參數
$ find /db -name postgresql.conf | xargs grep "gtm_"
11.2.8.3. 覈對節點內存
$ find /db -name postgresql.conf | xargs grep shared_buffers
11.2.8.4. 覈對節點名
$ find /db -name postgresql.conf | xargs grep pgxc_node_name
11.2.8.5. 覈對節點最大鏈接數
$ find /db -name postgresql.conf | xargs grep max_connections
11.2.8.6. 覈對節點最大可鏈接數
$ find /db -name postgresql.conf | xargs grep max_prepared_transactions
11.2.8.7. 覈對節點work_mem
$ find /db -name postgresql.conf | xargs grep work_mem
11.2.8.8. 覈對節點effective_cache_size
$ find /db -name postgresql.conf | xargs grep effective_cache_size
12. 配置集羣啓動與中止
該操做在P1服務器上執行。
12.1. 生成pgxc_ctl配置文件
$ pgxc_ctl /bin/bash Installing pgxc_ctl_bash script as /home/postgres/pgxc_ctl/pgxc_ctl_bash. ERROR: File "/home/postgres/pgxc_ctl/pgxc_ctl.conf" not found or not a regular file. No such file or directory Installing pgxc_ctl_bash script as /home/postgres/pgxc_ctl/pgxc_ctl_bash. Reading configuration using /home/postgres/pgxc_ctl/pgxc_ctl_bash --home /home/postgres/pgxc_ctl --configuration /home/postgres/pgxc_ctl/pgxc_ctl.conf Finished reading configuration. ******** PGXC_CTL START *************** Current directory: /home/postgres/pgxc_ctl PGXC prepare ---執行該命令將會生成一份配置文件模板 PGXC ^C ---按ctrl c退出
12.2. 編輯pgxc_ctl.conf配置文件
$ vi /home/postgres/pgxc_ctl/pgxc_ctl.conf
### 修改配置文件內的對應內容,內容與安裝配置表一致
pgxcInstallDir=$PGHOME pgxlDATA=/db # 自定義,用於下面的其餘配置 pgxcOwner=postgres #---- GTM Master ----------------------------------------- gtmName=gtm gtmMasterServer=P1 gtmMasterPort=6666 gtmMasterDir=$pgxlDATA/gtm #---- GTM Slave ----------------------------------------------- gtmSlave=y gtmSlaveName=gtms gtmSlaveServer=P2 gtmSlavePort=6666 gtmSlaveDir=$pgxlDATA/gtmSandby #---- GTM-Proxy Master ------- gtmProxyDir=$pgxlDATA gtmProxy=y gtmProxyNames=(gtmProxy1 gtmProxy2) gtmProxyServers=(P2 P3) gtmProxyPorts=(6667 6667) gtmProxyDirs=$gtmProxyDir/gtmProxy1 $gtmProxyDir/gtmProxy2 gtmPxyExtraConfig=none gtmPxySpecificExtraConfig=(none none) #---- Coordinators --------- coordMasterDir=$pgxlDATA coordSlaveDir=$pgxlDATA/coord_slave coordArchLogDir=$pgxlDATA/coord_archlog coordNames=(coord1 coord2 coord3) coordPorts=(5432 5432 5432) poolerPorts=(6543 6543 6543) coordPgHbaEntries=(0.0.0.0/0) coordMasterServers=(P1 P2 P3) coordMasterDirs=($coordMasterDir/coord1 $coordMasterDir/coord2 $coordMasterDir/coord3) coordMaxWALsernder=0 #沒設置備份節點,設置爲0 coordMaxWALSenders=($coordMaxWALsernder $coordMaxWALsernder $coordMaxWALsernder) #數量保持和coordMasterServers一致 coordSlave=n coordSpecificExtraConfig=(none none none) coordSpecificExtraPgHba=(none none none) #---- Datanodes ---------- datanodeMasterDir=$pgxlDATA datanodeSlaveDir=$pgxlDATA/dn_slave datanodeArchLogDir=$pgxlDATA/datanode_archlog primaryDatanode=datan1 # 主數據節點 datanodeNames=(datan1 datan2 datan3 datan4 datan5 datan6 datan7 datan8) datanodePorts=(5551 5551 5551 5551 5552 5552 5552 5552) datanodePoolerPorts=(5561 5561 5561 5561 5562 5562 5562 5562) datanodePgHbaEntries=(0.0.0.0/0) datanodeMasterServers=(P4 P5 P6 P7 P4 P5 P6 P7) datanodeMasterDirs=($datanodeMasterDir/datan1 $datanodeMasterDir/datan2 $datanodeMasterDir/datan3 $datanodeMasterDir/datan4 $datanodeMasterDir/datan5 $datanodeMasterDir/datan6 $datanodeMasterDir/datan7 $datanodeMasterDir/datan8) datanodeMaxWalSender=0 datanodeMaxWALSenders=($datanodeMaxWalSender $datanodeMaxWalSender $datanodeMaxWalSender $datanodeMaxWalSender $datanodeMaxWalSender $datanodeMaxWalSender $datanodeMaxWalSender $datanodeMaxWalSender) datanodeSlave=n
12.3.啓動
啓動順序爲Postgres-XL → keepalived
12.3.1.P1
$ pgxc_ctl -c /db/pgxc_ctl.conf start all $ su - # /etc/init.d/keepalived start
12.3.2.P2
# /etc/init.d/keepalived start
12.4.中止
中止順序爲Postgres-XL → keepalived
12.4.1.P1
$ pgxc_ctl -c /db/pgxc_ctl.conf stop all $ su - # /etc/init.d/keepalived stop
12.4.2.P2
# /etc/init.d/keepalived stop
14. 註冊節點
查詢節點註冊狀況的SQL:
postgres=# select * from pgxc_node;
14.1. Coordinators
14.1.1. P1
$ psql -p 5432 -Upostgres
create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); alter node coord1 with (type=coordinator,host='P1', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552);
14.1.2. P2
$ psql -p 5432 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); alter node coord2 with (type=coordinator,host='P2', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552);
14.1.3. P3
$ psql -p 5432 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); alter node coord3 with (type=coordinator,host='P3', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552);
14.2. Datanodes
14.2.1. P4
14.2.1.1. Datanode1
$ psql -p 5551 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552); alter node datan1 with (type=datanode, host='P4',port=5551,primary,preferred);
14.2.1.2. Datanode5
$ psql -p 5552 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552); alter node datan5 with (type=datanode, host='P4',port=5552);
14.2.2. P5
14.2.2.1. Datanode2
$ psql -p 5551 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552); alter node datan2 with (type=datanode, host='P5',port=5551);
14.2.2.2. Datanode6
$ psql -p 5552 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552); alter node datan6 with (type=datanode, host='P5',port=5552);
14.2.3. P6
14.2.3.1. Datanode3
$ psql -p 5551 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552); alter node datan3 with (type=datanode, host='P6',port=5551);
14.2.3.2. Datanode7
$ psql -p 5552 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan8 with (type=datanode, host='P7',port=5552); alter node datan7 with (type=datanode, host='P6',port=5552);
14.2.4. P7
14.2.4.1. Datanode4
$ psql -p 5551 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); create node datan8 with (type=datanode, host='P7',port=5552); alter node datan4 with (type=datanode, host='P7',port=5551);
14.2.4.2. Datanode8
$ psql -p 5552 -Upostgres
create node coord1 with (type=coordinator,host='P1', port=5432); create node coord2 with (type=coordinator,host='P2', port=5432); create node coord3 with (type=coordinator,host='P3', port=5432); create node datan1 with (type=datanode, host='P4',port=5551,primary,preferred); create node datan2 with (type=datanode, host='P5',port=5551); create node datan3 with (type=datanode, host='P6',port=5551); create node datan4 with (type=datanode, host='P7',port=5551); create node datan5 with (type=datanode, host='P4',port=5552); create node datan6 with (type=datanode, host='P5',port=5552); create node datan7 with (type=datanode, host='P6',port=5552); alter node datan8 with (type=datanode, host='P7',port=5552);
14.2.5. 覈對各節點註冊信息
14.2.5.1. Coordinators
$ psql -p 5432 -Upostgres -c"select * from pgxc_node order by node_host, node_port;"
14.2.5.2. Datanodes
$ psql -p 5551 -Upostgres -c"select * from pgxc_node order by node_host, node_port;" $ psql -p 5552 -Upostgres -c"select * from pgxc_node order by node_host, node_port;"