CentOS 安装Postgres集群(-还未配置完成)

框架环境

192.168.100.102                        --虚拟ip
172.18.5.23                        --主服务器
172.18.5.41                        -- 从服务器

 

安装PostgreSQL-主从结构中使用 

下载安装

  网页端地址:https://yum.postgresql.org/rpmchart/ 可以查看各个版本的pgsql,点击12版本进去,查看需要安装的内容:

  

  点击:PostgreSQL Database Server 12 PGDG 在此页面选择要下载的内容,点击进入二层菜单,下载特定版本的安装包,pgsql安装需要下载的安装包,如下:  

postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
postgresql12-contrib-12.4-1PGDG.rhel7.x86_64
postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm

   安装  

yum install -y postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
yum install -y postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
yum install -y postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm
yum install -y postgresql12-contrib-12.4-1PGDG.rhel7.x86_64.rpm

   安装出现下面的问题的时候:

  

      缺少依赖性 ,联网的情况下可以用:  yum install krb5-server 等进行安装。未联网的情况下,请参考下面的文章: 

  具体参考:离线安装:https://www.cnblogs.com/whitebai/p/12128037.html  在线安装:https://www.cnblogs.com/whitebai/p/12122240.html  安装依赖:https://www.cnblogs.com/whitebai/p/12128078.html  

创建目录

mkdir -p /app/pgsql/data && chown postgres:postgres /app/pgsql/data;                -- 数据目录
mkdir -p /app/pgsql/pg_archive && chown postgres:postgres /app/pgsql/pg_archive;    --用于归档的目录(主从复制时用)
cd /app/pgsql && chmod 700 data;                                                    --分配拥有者读写权限
cd /app/pgsql && chmod 700 pg_archive;                                              --分配拥有者读写权限

切换用户 

su - postgres                                             --切换回postgres 用户
/usr/pgsql-12/bin/initdb -D /app/pgsql/data/              --初始化数据库

修改数据库路径

   su 切换为root用户,以root身份 

vim /usr/lib/systemd/system/postgresql-12.service          --修改Service
Environment=PGDATA=/app/pgsql/data/                        --修改数据库路径 

自动启动

   su 切换为root用户,以root身份 

systemctl enable postgresql-12 
systemctl start postgresql-12 

  登录postgresql并设置密码,postgresql在安装时默认添加用户postgres 

su - postgres 
psql 
ALTER USER postgres WITH PASSWORD '123456'; 
q 

允许远程登录

修改pg_hba 指定数据库路径时:   

vi /app/pgsql/data/pg_hba.conf 
# IPv4 local connections: 下面添加
host all all 0.0.0.0/0 md5  

修改postgresql 指定路径时:修改时候去掉前面的# 注释 

vi /app/pgsql/data/postgresql.conf 
listen_addresses = '*'    

重启服务  

systemctl restart postgresql-12      
netstat -ltpn | grep 5432             --查看状态 ,可以不用执行

允许通过防火墙

firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload

主从配置  

主服务器

添加pg用于同步的用户名

su - postgres
psql
CREATE ROLE replica login replication encrypted password '123456';          -创建具有复制流操作的用户:replica

修改配置文件:pg_hba.conf,信任从服务器访问

vi /app/pgsql/data/pg_hba.conf   
#文件尾部添加信任的从服务器
# replica为postgres用户
# XX.XX.XX.XX为从节点的完整IP,如果为网段配置就不是32了,md5为允许密码验证,trust为免密
# TYPE DATABASE USER ADDRESS METHOD
host replication replica 172.18.5.41/32 trust

  

、允许10.1.1.0~10.1.1.255网段登录数据库:

1
host    all    all    10.1.1.0/24    md5

2、修改配置文件:postgresql.conf

vi /app/pgsql/data/postgresql.conf

# 新增或修改下列属性设置(使用命令“/”来查找,否则眼花)

listen_addresses = '*' # (修改)监听所有IP

max_connections = 100 # (修改)最大连接数,据说从机需要大于或等于该值

archive_mode = on # (修改)开启归档

archive_command = 'test ! -f /app/pgsql/pg_archive/%f && cp %p /app/pgsql/pg_archive/%f'

# 9.6开始没有hot_standby(热备模式)
wal_level = replica
#最多有2个流复制连接
max_wal_senders = 2   
wal_keep_segments = 16  
#流复制超时时间
wal_sender_timeout = 60s
# 最大连接数,据说从机需要大于或等于该值
max_connections = 100  

3、重启服务

systemctl restart postgresql-12

4、在从节点上验证访问

psql -h 172.18.5.23 -U postgres

FATAL: no pg_hba.conf entry for host “XXX” user “”xxx“”

# 如果发现不知道密码或密码不正确,修改postgres用户密码(数据库)

ALTER USER postgres WITH PASSWORD '你的密码';

三、从服务器

1、停止服务

systemctl stop postgresql-12

2、切换用户(一定要)

su - postgres

3、清空数据文件夹(是这样的,没错)

rm -rf /app/pgsql/data/*

cd /app/pgsql/data

4、从主节点获取数据

# 使用replica用户,从主节点获取备份数据(这条命令建议照抄,有兴趣在深究内部参数)

pg_basebackup -h 172.18.5.23 -p 5432 -U replica -Fp -Xs -Pv -R -D /app/pgsql/data

5、编辑standby.signal文件(就在数据文件夹内,以此标识从节点,当从节点提升为主节点后会自动删除)

# 添加

standby_mode = 'on'

6、修改postgresql.conf文件

vi /app/pgsql/data/postgresql.conf

primary_conninfo = 'host=172.18.5.23 port=5432 user=replica password=123456'

recovery_target_timeline = latest # 默认

max_connections = 120 # 大于等于主节点,正式环境应当重新考虑此值的大小

hot_standby = on

max_standby_streaming_delay = 30s

wal_receiver_status_interval = 10s

hot_standby_feedback = on

7、重新启动从节点

systemctl start postgresql-12

四、验证主从

方法一:

登录主节点数据库执行如下命令

su postgres

psql

select client_addr,sync_state from pg_stat_replication;

结果如下:

postgres=# select client_addr,sync_state from pg_stat_replication;

client_addr | sync_state

---------------+------------

172.18.5.41 | async

(1 row)

说明104服务器是从节点,在接收流,而且是异步流复制

方法二:

在主节点与从节点分别执行如下命令

ps -ef | grep postgres

可以看到主节点有wal receiver进程

postgres 2638 2606 0 17:12 ? 00:00:00 postgres: walsender replica 172.18.5.41(51504) streaming 0/7000660

可以看到从节点有wal receiver进程

postgres 1960 1953 0 17:12 ? 00:00:02 postgres: walreceiver streaming 0/7000660

五、主备切换(主库出现故障时)

当主库出现故障时,我们需要将备库提升为主库进行读写操作。

0、在pg12之前我们一般使用2种方式:

1)pg_ctl 方式: 在备库主机执行 pg_ctl promote shell 脚本

2)触发器文件方式: 备库配置 recovery.conf 文件的 trigger_file 参数,之后在备库主机上创建触发器文件

1、pg12开始新增了一个pg_promote()函数,让我们可以通过SQL命令激活备库。

pg_promote()语法:

pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60)

两个参数:

wait: 表示是否等待备库的 promotion 完成或者 wait_seconds 秒之后返回成功,默认值为 true。

wait_seconds: 等待时间,单位秒,默认 60

2、切换举例:

1)主库操作:关闭主库,模拟主库故障:

systemctl stop postgresql-12

2)备库操作:激活备库:

su postgres

psql

select pg_promote(true,60);

4、验证:

/usr/pgsql-12/bin/pg_controldata /app/pgsql/data

主备库英文显示如下:

Database cluster state: in production

Database cluster state: in archive recovery

主备库中文显示如下:

数据库簇状态: 在运行中

数据库簇状态: 正在归档恢复

六、原主库修复后降为备库(其实大部分操作与建立备库时一样,只是修改几个IP地址)

1、新主库(104):

# vi /app/pgsql/data/pg_hba.conf

host replication replica 172.18.5.23/32 trust

# systemctl restart postgresql-12

2、新备库(103)

# systemctl stop postgresql-12

# su - postgres

# rm -rf /app/pgsql/data/*

# cd /app/pgsql/data

# pg_basebackup -h 172.18.5.41 -p 5432 -U replica -Fp -Xs -Pv -R -D /app/pgsql/data

# vi standby.signal

# 添加

standby_mode = 'on'

vi /app/pgsql/data/postgresql.conf

primary_conninfo = 'host=172.18.5.41 port=5432 user=replica password=123456'

# systemctl start postgresql-12

七、再次将老主库切回主库

1、当前备库:

> 停止服务

> 删除“/app/pgsql/data/standby.signal”文件

> 启动服务

2、当前主库:

> 停止服务

> 以“postgres”用户创建“/app/pgsql/data/standby.signal”文件,添加内容:standby_mode = 'on'

> 启动服务

 https://blog.csdn.net/luxingjyp/article/details/104637798     https://www.cnblogs.com/VicLiu/p/12993542.html

pgPool 负载均衡搭建

服务器环境

172.18.5.23   master    
172.18.5.41   slave 
172.18.5.42   vip        -虚拟ip

.host 添加配置

vi  /etc/hosts

/etc/init.d/network restart --修改完成后刷新

 使用yum下载rpm包安装pgpool-II,注意下载的安装包须与PG的版本一致。安装包目录详见https://www.pgpool.net/yum/rpms/4.1/redhat/rhel-8-x86_64/

yum install https://www.pgpool.net/yum/rpms/4.1/redhat/rhel-7-x86_64/pgpool-II-release-4.1-2.noarch.rpm
yum install pgpool-II-pg12
yum install pgpool-II-pg12-debuginfo
yum install pgpool-II-pg12-devel
yum install pgpool-II-pg12-extensions

服务开机启动  

systemctl enable pgpool.service

启动停止服务

systemctl start pgpool.service 
systemctl stop pgpool.service

目录/相关命令授权

因为pgpool-ii 配置中会以 postgres 用户执行一些系统权限命令, 需要使用设置普通用户授权:

chmod u+x /usr/sbin/ip
chmod u+s /usr/sbin/arping
chmod u+s /sbin/ip
chmod u+s /sbin/ifconfig

配置中相关的日志目录,pid 目录权限:

chown -R postgres.postgres /etc/pgpool-II       --给postgres 用户权限
mkdir /var/run/pgpool/                             
chown postgres.postgres /var/run/pgpool/
mkdir -p /var/log/pgpool/
touch /var/log/pgpool/pgpool_status
chown -R postgres.postgres /var/log/pgpool/

  

配置程序运行的用户和组为 postgres  一般10以上,postgres 就在postgres 组下面,没有的话,可以搜索如何创建组

 修改pgpool运行用户和组为postgres

vi /usr/lib/systemd/system/pgpool.service            --10如果采取默认的基本不需要修改 

User=postgres

Group=postgres

 服务器SSH免密设置

# 主机/备机操作
su - postgres
ssh-keygen
# 一直enter

 继续在postgres用户下执行

ssh-copy-id -i .ssh/id_rsa.pub master
ssh-copy-id -i .ssh/id_rsa.pub slave

如果提示输入postgres密码的时候,请输入postgres  用户的密码(非postgres数据库的密码),如果没有设置,可以切换回root用户 sudo -u postgres passwd设置密码

 

 以上操作主机、备机都要执行

 pgpool-ii 相关配置(/etc/pgpool-II/)

pool_hba.conf (主备相同)

 pool_hba.conf 是配置用户链接时的验证策略, 和postgresqlpg_hba.conf保持一致,要么都是trust,要么都是md5验证方式,这里采用了md5验证方式如下设置

su - postgres
cd /etc/pgpool-II/
vim pool_hba.conf

编辑内容如下(这里和postgressql设置一样, trust/md5保持一致)

 

配置pg_hba.conf,认证方式保持一致

  修改 vi  /app/pgsql/data/pg_hba.conf   与上面保持一致

 非必要可选步骤,为了集群可扩展性,可以将复制的认证条件放宽

pcp.conf / pool_passwd (主备相同)

这个文件是pgpool管理器自己的用户名和密码,用于管理集群的.

 在  /etc/pgpool-II/ 目录下

pg_md5 postgres
e8a48653851e28c69d0506508fb27fc5
vi pcp.conf
--添加
#USERID:MD5PASSWD
postgres:e8a48653851e28c69d0506508fb27fc5

pg_md5 -p -m -u postgres pool_passwd
#数据库登录用户是postgres,这里输入登录密码,不能出错
#输入密码后,在/etc/pgpoll-II目录下会生成一个pool_passwd文件

   

 pgpool.conf (重点)

这里我们配置主节点的,然后备节点直接拷贝过去

su - postgres
cd  /etc/pgpool-II/
touch failover_stream.sh
chmod u+x failover_stream.sh
vim  failover_stream.sh

-- 键入一下内容

#! /bin/sh
# Failover command for streaming replication.
# Arguments: $1: new master hostname.

new_master=$1
trigger_command="/usr/pgsql-12/bin/pg_ctl promote -D /app/pgsql/data"

# Prompte standby database.
/usr/bin/ssh -T $new_master $trigger_command

exit 0;

 

原文地址:https://www.cnblogs.com/whitebai/p/13637905.html