Postgre+pgpool实现HA.docx
- 文档编号:26910930
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:33
- 大小:354.91KB
Postgre+pgpool实现HA.docx
《Postgre+pgpool实现HA.docx》由会员分享,可在线阅读,更多相关《Postgre+pgpool实现HA.docx(33页珍藏版)》请在冰豆网上搜索。
Postgre+pgpool实现HA
PostgreSQLHA方案
1.架构图
1.1.方案架构图
1.2.postgres故障切换图
1.3.pgpool故障切换图
1.4.pgpool+postgres故障切换图
2.安装资源信息
操作系统的安装就不在这里介绍,主机名和IP地址如下所示
操作系统:
RHEL6.5
数据库:
PostgreSQL9.4.4
虚拟机两台:
主节点node1(IP192.168.1.231)
备节点node2(IP192.168.1.232)
pgpool:
pgpool-II-3.4.3
VIP:
192.168.1.233
3.资源调整(master/standby)
3.1.前期准备
创建安装文件夹
#mkdir/opt/soft//用于放置源码安装文件
#mkdir/opt/pgdata//postgres数据库目录
#mkdir/opt/pgsql//postgres安装目录
#mkdir/opt/pgpool//pgpool安装目录
修改文件夹权限
#chownpostgres:
postgres/opt/soft
#chownpostgres:
postgres/opt/pgsql
#chownpostgres:
postgres/opt/pgdata
#chownpostgres:
postgres/opt/pgpool
复制以下安装文件到/opt/soft,并且配置权限
pgpool-II-3.4.3.tar.gz
postgresql-9.4.4.tar.gz
配置安装文件所属人和所属组为postgres
3.2.关闭防火墙
#chkconfigiptablesoff
#serviceiptablesstop
3.3.关闭SElinux
修改SELinux配置文件
#vim/etc/sysconfig/selinux
把SELINUX=enforcing修改为SELINUX=disabled
3.4.配置hosts文件
在hosts文件中增加以下内容
#vim/etc/hosts
192.168.1.231pgpool-node01
192.168.1.232pgpool-node02
3.5.创建postgres用户并设置密码
安装之前要先检查系统中是否有postgres系统账号
#cat/etc/passwd|greppostgres
如果没有postgres账号,需要新增postgres账号
#groupadd-g26postgres
#useradd-d/var/lib/pgsql–gpostgres–u26postgres
给postgres配置密码
#passwdpostgres
3.6.主备节点时钟同步
#/usr/sbin/ntpdateasia.pool.ntp.org&&/sbin/hwclock–systohc
3.7.配置sysctl
#vi/etc/sysctl.conf
kernel.shmmni=4096
kernel.sem=5010064128000501001280
fs.file-max=7672460
net.ipv4.ip_local_port_range=900065000
net.core.rmem_default=1048576
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_max_syn_backlog=4096
dev_max_backlog=10000
vm.overcommit_memory=0
net.ipv4.ip_conntrack_max=655360
fs.aio-max-nr=1048576
net.ipv4.tcp_timestamps=0
使文件修改生效
#sysctl–p
3.8.limit资源分配
#vi/etc/security/limits.conf
*softnofile131072
*hardnofile131072
*softnproc131072
*hardnproc131072
*softcoreunlimited
*hardcoreunlimited
*softmemlock50000000
*hardmemlock50000000
4.postgreSQL流复制环境安装配置
4.1.配置SSH免登陆
Onmaster:
#su–postgres
$ssh-keygen-trsa-P''
$ssh-copy-id-i~/.ssh/id_rsa.pubpostgres@192.168.1.232
$sshpostgres@node2
Onstandby:
#su–postgres
$ssh-keygen-trsa-P''
$ssh-copy-id-i~/.ssh/id_rsa.pubpostgres@192.168.1.231
$sshpostgres@node1
4.2.安装依赖包
使用yum自动安装以下软件
#yum-yinstallreadline-develzlibzlib-developensslopenssl-develpam-devellibxml2-devellibxslt-develpython-develtcl-develgcc
或者是手动安装以下软件
gcc
libxml2-devel
libxslt-devel
openssl-devel
pam-devel
python-devel
readline-devel
tcl-devel
zlib-devel
cloog-ppl
cpp
keyutils-libs-devel
krb5-devel
libcom_err-devel
libgcrypt-devel
libgpg-error-devel
libselinux-devel
libsepol-devel
mpfr
ncurses-devel
ppl
tcl
4.3.解压和安装
$cd/opt/soft/
$tar-zxvfpostgresql-9.3.5.tar.gz
$cdpostgresql-9.3.5
$./configure--prefix=/opt/pgsql--with-pgport=5432--with-perl--with-tcl
--with-python--with-openssl--with-pam--without-ldap--with-libxml
--with-libxslt--with-blocksize=8
$gmake
$gmakeinstall
4.4.设置环境变量
编辑环境变量配置文件,增加以下内容
$vim~/.bash_profile
exportPGPORT=5432
exportPGDATA=/opt/pgdata
exportPGHOME=/opt/pgsql
exportPATH=.:
$PGHOME/bin:
$PATH
使环境变量配置立即生效
$source~/.bash_profile
4.5.初始化数据库(master)
初始化数据库
$initdb-D$PGDATA
4.6.修改配置文件(master)
主配置文件postgresql.conf参数调整(master)
找到以下参数内容,调整参数值
$cd$PGDATA
$vimpostgresql.conf
listen_addresses='*'
port=5432
max_connections=500
wal_level=hot_standby
archive_mode=on
archive_command='/bin/date'
max_wal_senders=6
hot_standby=on
访问控制文件pg_hba.conf配置(master)
增加以下访问控制内容
$cd$PGDATA
$vimpg_hba.conf
hostallall192.168.1.231/32trust
hostallall192.168.1.232/32trust
hostreplicationreplica192.168.1.232/32trust
hostreplicationreplica192.168.1.231/32trust
标志文件recovery.done配置(master)
新增一个recovery.done文件
$touch/opt/pgdata/recovery.done
在文件中输入以下内容
$vim/opt/pgdata/recovery.done
standby_mode=on
recovery_target_timeline=‘latest’
primary_conninfo=’host=192.168.1.232port=5432user=replicapassword=replica’
trigger_file=‘/opt/pgdata/trigger_file’
4.7.启动主库服务(master)
$pg_ctl-D$PGDATA-l$PGDATA/logfilerestart
4.8.配置流复制用户(master)
创建流复制用户
$psql-Upostgres
postgres#CREATEROLEreplicaloginreplicationencryptedpassword'replica';
4.9.备库实例生成(standby)
从主库复制实例到备库
#su–postgres
$pg_basebackup–D$PGDATA–Fp–Xs–v–P–hnode1–Ureplica
修改备库标识文件
$mv/opt/pgdata/recovery.done/opt/pgdata/recovery.conf
$vim/opt/pgdata/recovery.conf
standby_mode=on
recovery_target_timeline=’latest’
primary_conninfo=‘host=192.168.1.231port=5432user=replica’
trigger_file=‘/opt/pgdata/trigger_file’
4.10.启动备库服务(standby)
$pg_ctl–D$PGDATA-l$PGDATA/logfilestart
4.11.检查运行情况
查看备库进程
ps–ef|greppostgres
查看主库进程
ps–ef|greppostgres
4.12.测试
OnMaster:
postgres=#createtabletest(idint,namevarchar(10));
postgres=#createtabletest(idint,namevarchar(10));
postgres=#selecttable_namefrominformation_schema.tableswheretable_schema='public';
table_name
------------
test
(1row)
OnStandby:
postgres=#selecttable_namefrominformation_schema.tableswheretable_schema='public';
table_name
------------
test
(1row)
新增的数据已经传输过去,并且standby端的会话是只读的。
5.pgpool-II安装配置
5.1.安装
解压和安装(master/standby)
#su-postgres
$mkdir/opt/pgpool
$tarzxvfpgpool-II-3.4.3.tar.gz
$cdpgpool-II-3.4.3
$./configure--prefix=/opt/pgpool--with-pgsql=/opt/pgsql--with-openssl
$make
$makeinstall
安装相关函数(master)
安装pgpool-regclass,pgpool-recovery函数
[postgres@node1~]$cd/opt/soft/pgpool-II-3.4.3/src/sql/pgpool-regclass
[postgres@node1pgpool-regclass]$make
[postgres@node1pgpool-regclass]$makeinstall
[postgres@node1pgpool-regclass]$psql-fpgpool-regclass.sqltemplate1
[postgres@node1pgpool-regclass]$cd../pgpool-recovery
[postgres@node1pgpool-recovery]$make
[postgres@node1pgpool-recovery]$makeinstall
[postgres@node1pgpool-recovery]$psql-fpgpool-recovery.sqltemplate1
安装完以后/opt/pgsql/share/extension/目录下应该有如下文件
pgpool_recovery--1.1.sql
pgpool_recovery.control
pgpool-recovery.sql
pgpool_regclass--1.0.sql
pgpool_regclass.control
pgpool-regclass.sql
备注:
备节点不需要创建pgpool_regclass,pgpool_recovery)
查看新增加的函数
[postgres@node1~]$psql-Upostgrestemplate1
template1=#\df
5.2.配置环境变量(master/standby)
#su-postgres
$vim~/.bash_profile
exportPGPOOL=/opt/pgpool
exportPATH=.:
$PGPOOL/bin:
$PATH
使环境变量立即生效
$source~/.bash_profile
5.3.配置ifconfig,arping执行权限(master/standby)
配置sudo权限
#vim/etc/sudoers
postgresALL=(ALL)NOPASSWD:
/sbin/ifconfig
postgresALL=(ALL)NOPASSWD:
/sbin/ifup
postgresALL=(ALL)NOPASSWD:
/sbin/ifdown
postgresALL=(ALL)NOPASSWD:
/sbin/arping
配置s权限
#chmodu+s/sbin/ifconfig
#chmodu+s/usr/sbin/arping
5.4.开启日志(master/standby)
在日志/etc/rsyslog.conf加入以下行
#vim/etc/rsyslog.conf
local0*/var/log/pgpool/pgpool.log
重启rsyslog服务
#/etc/init.d/rsyslogrestart
pgpool.conf配置以下行
#vim/opt/pgpool/etc/pgpool.conf
log_destination=’syslog’
5.5.主库修改配置文件(master)
主配置文件pgpool.conf参数调整
[postgres@node1~]$cd/opt/pgpool/etc
[postgres@node1etc]$cppgpool.conf.samplepgpool.conf
[postgres@node1etc]$vimpgpool.conf
主节点的pgpool.conf(配置文件中的用户名和配置能用postgres用户就用postgres用户,尽量减少用户)
#CONNECTIONS
#-pgpoolConnectionSettings-
listen_addresses='*'
port=9999
socket_dir='/opt/pgpool'
#-pgpoolCommunicationManagerConnectionSettings–
pcp_listen_addresses='*'
pcp_port=9898
pcp_socket_dir='/opt/pgpool'
#-BackendConnectionSettings-
backend_hostname0='node1'##配置数据节点node1
backend_port0=5432
backend_weight0=1
backend_data_directory0='/opt/pgdata'
backend_flag0='ALLOW_TO_FAILOVER'
backend_hostname1='node2'##配置数据节点node2
backend_port1=5432
backend_weight1=1
backend_data_directory1='/opt/pgdata'
backend_flag1='ALLOW_TO_FAILOVER'
#-Authentication-
enable_pool_hba=on
pool_passwd='pool_passwd'
authentication_timeout=60
#LOGS
#-Wheretolog-
log_destination='syslog'
#-Whattolog-
print_timestamp=on
log_connections=on
log_hostname=on
log_statement=on
log_per_node_statement=off
log_standby_delay='none'
#FILELOCATIONS
pid_file_name='/opt/pgpool/pgpool.pid'
logdir='/var/log/pgpool'
#CONNECTIONPOOLING
#CONNECTIONPOOLING
connection_cache=on
reset_query_list='ABORT;DISCARDALL'
#REPLICATIONMODE
replication_mode=off
replicate_select=off
insert_lock=on
lobj_lock_table=''
#LOADBALANCINGMODE
load_balance_mode=on
ignore_leading_white_space=on
white_function_list=''
black_function_list='nextval,setval,nextval,setval'
#MASTER/SLAVEMODE
master_slave_mode=on#设置流复制模式
master_slave_sub_mode='stream'#设置流复制模式
#-Streaming-
sr_check_period=5
sr_check_user='replica'
sr_check_password='replica'
delay_threshold=16000
#-Specialcommands-
follow_master_command=''
parallel_mode=off
pgpool2_hostname=''
system_db_hostname='localhost'
system_db_port=5432
system_db_dbname='pgpool'
system_db_schema='pgpool_catalog'
system_db_user='pgpool'
system_db_password=''
#HEALTHCHECK
health_check_period=5
health_check_timeout=20
health_check_user='replica'
health_check_password='replcia'
health_check_max_retries=3
health_check_retry_delay=1
#FAILOVERANDFAILBACK
failover_command='/opt/pgpool/failover_stream.sh%d%H/opt/pgdata/trigger_file'
failback_command=''
fail_over_on_backend_error=on
search_primary_node_timeout=10
#ONLINERECOVERY
recovery_user='nobody'
recovery_password=''
recovery_1st_stage_command=''
recovery_2nd_stage_command=''
recovery_timeout=90
client_idle_limit_in_recovery=0
#WATCHDOG
use_watchdog=on
#-Connectiontoupstreams
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Postgre pgpool 实现 HA