CentOS7双机热备pgpool+replication.docx
《CentOS7双机热备pgpool+replication.docx》由会员分享,可在线阅读,更多相关《CentOS7双机热备pgpool+replication.docx(15页珍藏版)》请在冰豆网上搜索。
CentOS7双机热备pgpool+replication
1.环境信息2
2.postgresql2
1.依赖包2
2.调整内核2
3.服务配置3
4.创建用户3
5.创建目录3
6.建立ssh信任3
7.环境变量4
8.编译安装4
9.初始化实例5
10.运行参数5
11.启动实例7
12.复制备机7
13.注册服务7
3.pgpool8
1.创建用户8
2.开放权限8
3.环境变量8
4.建立ssh信任8
5.编译安装9
6.加载extension9
7.配置pgpool.conf9
8.配置pool_hba.conf10
9.配置pcp.conf11
10.启动pgpool11
11.状态检查11
1.环境信息
操作系统:
CentOS7
数据库:
Postgresql9.3.5
中间层:
Pgpool-II-3.4.0
Primary:
172.15.0.11
Standby:
172.15.0.12
VirtualIP:
172.15.0.10
2.postgresql
1.依赖包
[root主/备]
通过yum安装,需要联网
#yum-yinstallgcc
#yum-yinstallpython-devel
#yum-yinstallncurses-devel
#yum-yinstallreadline-devel
#yum-yinstallzlib-devel
#yum-yinstalllibxml2-devel
#yum-yinstalllibxslt-devel
#yum-yinstallsendmail
2.调整内核
[root主/备]
修改内核
#vi/etc/sysctl.conf
kernel.shmmax=68719476736
kernel.shmall=4294967296
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
生效参数
#/sbin/sysctl-p
3.服务配置
[root主/备]
关闭防火墙(也可以设置协议规则,不关闭防火墙)
#systemctlstopfirewalld.service
#systemctldisablefirewalld.service
添加主机名称(方便后续配置和管理)
#vi/etc/hosts
172.15.0.11DBServer01
172.15.0.12DBServer02
4.创建用户
[root主/备]
创建用户组
#groupaddpostgres
创建用户
#useradd-d/opt/postgres-s/bin/bash-gpostgres-mpostgres
#passwdpostgres
5.创建目录
[postgres主/备]
修改权限(pgpool用户需要读取pg的环境变量)
#chmod750~
添加目录(源码上传路径)
#mkdir~/src
添加目录(辅助脚本路径)
#mkdir~/script
6.建立ssh信任
[postgres主/备]
生成sshkey(密码设置为空)
#ssh-keygen
设置对端postgres信任,hostname根据实际情况修改
#ssh-copy-idpostgres@DBServer02
7.环境变量
[postgres主/备]
修改profile
#vi~/.bash_profile
exportPGHOME=/opt/postgres
exportPATH=$PATH:
$PGHOME/bin
exportLD_LIBRARY_PATH=$PGHOME/lib
exportLANG=zh_CN.UTF8
exportPGUSER=postgres
exportPGDATA=$PGHOME/data
exportPGLOG=$PGHOME/log
exportPGSCRIPT=$PGHOME/script
生效profile
#source~/.bash_profile
8.编译安装
[postgres主/备]
ftp上传postgresql-9.3.5.tar.gz至/opt/postgres/src
#cd~/src
#tar-zxvfpostgresql-9.3.5.tar.gz
#cdpostgresql-9.3.5
#./configure--prefix=/opt/postgres--with-python--with-blocksize=16--enable-debug--with-libxml--with-libxslt
#makeworld
#makeinstall-world
ftp上传pg_main.sh和pg_main.ini至/opt/postgres/script
#chmod750~/script/*
配置pg_main.ini
#vipg_main.ini
#脚本的日志路径
log=$PGLOG
#物理备份路径
base=$PGHOME/backup/base
#WAL日志归档路径
archive=$PGHOME/backup/archive
#备份保存天数的阈值
keepdays=3
#主备机的hostname列表
nodes="DBServer01|DBServer02"
9.初始化实例
[postgres主]
初始化实例
#initdb-D$PGDATA--encoding=UTF8-W
10.运行参数
[postgres主]
配置postgresql.conf
#vi~/data/postgresql.conf
#监听所有地址
listen_addresses='*'
#监听端口
port=5432
#WAL日志级别,复制流必须打开
wal_level=hot_standby
#归档模式,复制流必须打开
archive_mode=on
#归档脚本,可按照实际情况配置
archive_command='sh$PGSCRIPT/pg_main.sharchive%p%f'
#复制流WAL日志发送进程数
max_wal_senders=3
#WAL日志段数量
wal_keep_segments=16
#热备模式
hot_standby=on
#系统日志设置为标准输出
log_destination='stderr'
#系统日志转储进程
logging_collector=on
#系统日志目录
log_directory='/opt/postgres/log'
#系统日志格式
log_filename='postgresql-%Y%m%d.log'
配置pg_hba.conf(红字部分按实际情况配置)
#vi~/data/pg_hba.conf
hostallall0.0.0.0/0md5
hostreplicationpostgres172.15.0.12/32trust
配置recovery.conf(红字部分按实际情况配置)
#cp~/share/recovery.conf.sample~/data/recovery.done
#vi~/data/recovery.done
#备机恢复timeline
recovery_target_timeline='latest'
#备机模式
standby_mode=on
#主机的信息
primary_conninfo='host=DBServer02'
#备机提升为主机的触发文件
trigger_file='/opt/postgres/postgres.trigger'
11.启动实例
[postgres主]
启动实例
#pg_ctlstart
12.复制备机
[postgres备]
从主机复制(红字部分按实际情况配置)
#pg_basebackup-D$PGDATA-Fp-Xs-v-P-hDBServer01-Upostgres
修改recovery.conf(红字部分按实际情况配置)
#mv~/data/recovery.done~/data/recovery.conf
#vi~/data/recovery.conf
primary_conninfo='host=DBServer01'
修改pg_hba.conf(红字部分按实际情况配置)
#vi~/data/pg_hba.conf
hostreplicationpostgres172.15.0.11/32trust
启动实例
#pg_ctlstart
检查进程
#ps-ef|grepreceiver
postgres2152721521020:
01?
00:
00:
00postgres:
walreceiverprocess
13.注册服务
[root主/备]
ftp上传postgres至/etc/init.d
(可以从/opt/postgres/src/postgresql-9.3.5/contrib/start-scripts/linux拷贝修改)
#chkconfig--addpostgres
#chkconfigpostgreson
3.pgpool
1.创建用户
[root主/备]
#useradd-d/opt/pgpool-s/bin/bash-gpostgres-mpgpool
#passwdpgpool
2.开放权限
[root主/备]
生成虚拟ip用到
#chmodu+s/sbin/ifconfig
#chmodu+s/sbin/arping
3.环境变量
[pgpool主/备]
修改profile
#vi~/.bash_profile
./opt/postgres/.bash_profile
exportPATH=$PATH:
$HOME/bin
生效profile
#source~/.bash_profile
4.建立ssh信任
生成sshkey(密码设置为空)
#ssh-keygen
本机postgres信任
#ssh-copy-idpostgres@`hostname`
5.编译安装
[pgpool主/备]
添加目录
#mkdir~/src
解压编译
ftp上传pgpool-II-3.4.0.tar.gz至/opt/pgpool/src
#cd~/src
#tar-zxvfpgpool-II-3.4.0.tar.gz
#cd~/src/pgpool-II-3.4.0
#./configure--prefix=/opt/pgpool--with-pgsql=/opt/postgres
#make
#makeinstall
#cd~/src/pgpool-II-3.4.0/src/sql
#make
#makeinstall
6.加载extension
[pgpool主]
备机会自动复制操作,template1是pg创建database的默认模板
#psql-hDBServer01-Upostgres-dtemplate1-c"createextensionpgpool_regclass;"
#psql-hDBServer01-Upostgres-dtemplate1-c"createextensionpgpool_recovery;"
7.配置pgpool.conf
[pgpool主/备]
以sample-stream为模板,以下列出的是需要更改的配置(红字部分按实际情况配置)
#cp~/etc/pgpool.conf.sample-stream~/etc/pgpool.conf
#vi~/etc/pgpool.conf
#监听地址
listen_addresses='*'
#节点信息
backend_hostname0='DBServer01'
backend_port0=5432
backend_weight0=1
backend_data_directory0='/opt/postgres/data'
backend_flag0='ALLOW_TO_FAILOVER'
backend_hostname1='DBServer02'
backend_port1=5432
backend_weight1=1
backend_data_directory1='/opt/postgres/data'
backend_flag1='ALLOW_TO_FAILOVER'
#认证方式
enable_pool_hba=on
#日志模式
log_connections=on
log_hostname=on
log_statement=on
log_per_node_statement=on
pid_file_name='/opt/pgpool/pgpool.pid'
#状态检查
sr_check_user='postgres'
sr_check_password='postgres'
health_check_period=1
health_check_user='postgres'
health_check_password='postgres'
#切换脚本
failover_command='sshpostgres@DBServer02"$PGSCRIPT/pg_main.shpromote%H"'
#看门狗(避免单点故障)
use_watchdog=on
wd_hostname='DBServer01'
delegate_IP='172.15.0.10'
heartbeat_destination0='DBServer02'
heartbeat_device0='eth0'
other_pgpool_hostname0='DBServer02'
other_pgpool_port0=9999
other_wd_port0=9000
8.配置pool_hba.conf
[pgpool主/备]
认证文件
#cp~/etc/pool_hba.conf.sample~/etc/pool_hba.conf
#vi~/etc/pool_hba.conf
hostallall0.0.0.0/0md5
密码文件(pgsql中所有user需要在此配置,密码需要一致)
#pg_md5-p-upostgres
9.配置pcp.conf
[pgpool主/备]
执行pcp命令时的用户认证(红字部分密码可以任意修改)
#cp~/etc/pcp.conf.sample~/etc/pcp.conf
#echo"postgres:
"`pg_md5postgres`>>~/etc/pcp.conf
10.启动pgpool
[pgpool主/备]
先启动的pgpool节点会为master状态,后启动的为normal状态
#pgpool-n>/opt/pgpool/pgpool.log2>&1&
11.状态检查
[pgpool主]
使用pgpool的pcp命令,检查watchdog的状态
#pcp_watchdog_info5DBServer019898postgrespostgres
node1999990003
#pcp_watchdog_info5DBServer029898postgrespostgres
Node2999990002
watchdog状态说明:
0
1
2
3
4
End
Init
Normal
Master
Down
使用通过vip查看据库状态
#psql-h172.15.0.10-p9999-Upostgres-c"showpool_nodes;"
node_id|hostname|port|status|lb_weight|role
---------+----------+------+--------+-----------+---------
0|node1|5432|2|0.500000|primary
1|node2|5432|2|0.500000|standby
database状态说明:
0
1
2
3
初始化,从不显示
已启动,未连接
已启动,连接缓冲
节点关闭
当主机宕掉,然后重新启动为备机时,需要把节点信息更新一下,pgpool无法自动检测宕掉后重新恢复的节点。
pcp_attach_node[-d]timeouthostnameport#usernamepasswordnodeID