侧边栏壁纸
博主头像
AI研究僧

hycj89@163.com

  • 累计撰写 1,899 篇文章
  • 累计创建 179 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

在centos7上安装postgresql并设置主从配置

AI研究僧
2021-04-03 / 0 评论 / 0 点赞 / 399 阅读 / 1,438 字

环境说明

系统:centos7.7 64位 两台,假设两台服务器的ip尾数分别是 93和95,93为主,95为从

postgresql版本:10.16

postgresql安装

yum源更新

在93和95服务器上均执行更新命令

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

安装

在93和95服务器上均执行安装命令
yum install -y postgresql10-server 执行命令安装pgsql10,过程略慢,等待一会

初始化数据库目录(主服务上执行)

该过程仅在主服务器93上执行,95上不要执行

  • PostgreSQL默认安装目录是/usr/pgsql-10,而PostgreSQL的数据目录默认是/var/lib/pgsql/10,如果需要修改数据目录执行以下内容1、2、3内容,否则无需执行

1、创建自定义数据目录

mkdir -p /home/pgdata/10/data # 使用该目录为数据目录
chown -R postgres:postgres /home/pgdata/10/data # 安装postgresql后,自动创建的用户及用户组

2、编辑postgresql-10.service
执行命令systemctl edit postgresql-10.service,添加以下内容

[Service]
Environment=PGDATA=/home/pgdata/10/data

保存退出,创建的文件是 /etc/systemd/system/postgresql-10.service.d/override.conf,可以检查一下上述内容是否写入成功

3、重载 systemd
systemctl daemon-reload 执行即可

4、初始化,如果没有修改数据目录,直接执行这里即可
/usr/pgsql-10/bin/postgresql-10-setup initdb 执行初始化操作
初始化之后,进入/home/pgdata/10/data,就会看到如下内容
在这里插入图片描述

启动数据库、设置开机自启

systemctl enable postgresql-10  # 开机自启,主从均设置
systemctl start postgresql-10  # 开启服务
systemctl stop postgresql-10  # 关闭服务
systemctl restart postgresql-10  # 重启服务

设置postgres用户密码(主服务)

执行命令su - postgres , 切换postgres用户

然后输入 psql命令
在这里插入图片描述
进入了执行sql的窗口

执行命令ALTER USER postgres WITH PASSWORD 'postgres';
在这里插入图片描述
完成
常用命令

退出: \q
 列出所有库 \l
 列出所有用户 \du
 列出库下所有表 \d

配置远程登录

进入/home/pgdata/10/data ,修改配置文件 pg_hba.conf 打开后,拉到最后,修改增添内容为如下所示

# "local" is for Unix domain socket connections only
local   all             all                                    md5
# IPv4 local connections:
host    all             all             127.0.0.1/32           md5
host    all             all             0.0.0.0/0             md5
# IPv6 local connections:
host    all             all             ::1/128                md5
# Allow replication connections from localhost, by a user with the
# replication privilege. 以下是主从配置一并改了,其中的 repl 是一个pg的用户,目前还没创建该用户,稍后会创建
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
host    replication     repl             192.168.3.93/24            md5
host    replication     repl             192.168.3.95/24            md5

修改配置文件 postgresql.conf,修改
在这里插入图片描述
保存退出

重启pgsql

systemctl restart postgresql-10

通过navicat进行连接测试
在这里插入图片描述

主从配置

主库配置

1、修改postgresql.conf

wal_level = replica 
archive_mode = on 
archive_command = 'cp %p /home/pgsql/archive/archive/%f '
max_wal_senders= 10  
wal_keep_segments=1024
hot_standby = on

参数说明:

listen_address:  按需设置,本次测试配置为所有主机均可以访问,生产环境可以按需配置网段或IP等
wal_level:  设置流复制模式至少设置为replica
archive_mode:  本次启用归档
archive_command:WAL日志归档命令,生产环境可以将归档拷贝到对应目录或其他机器上,本次测试配置为归档到本机的另一个目录下
max_wal_senders: 最大WAL发送进程数,此数量需大于等于从库个数且比max_connections小。
wal_keep_segments: pg_wal目录下保留WAL日志的个数,每个WAL文件默认16M,为保障从库能在应用归档落后时依旧能追上主库,此值建议设置较大一点。
hot_standby: 此参数控制在恢复归档期间是否支持只读操作,设置为ON后从库为只读模式。

/home/pgsql/archive/ 该路径需要手动创建,自行创建,且权限应为postgres用户及组

2、创建复制账号
create user repl REPLICATION LOGIN ENCRYPTED PASSWORD '123456';

3、修改配置文件pg_hba.conf
在配置远程访问时已设置

主库重启 systemctl restart postgresql-10

从库配置(以下在从库进行操作)

1、备份数据
切换用户su - postgres,否则备份过来的数据权限root,还需要进行权限更改

从库的数据目录没有修改,在默认位置/var/lib/pgsql/10/data
进入该目录查看是否有文件,如果则清空

然后执行命令从93将数据拷贝过来,命令如下:
/usr/pgsql-10/bin/pg_basebackup -h 192.168.3.93 -U repl -X stream -P -D /var/lib/pgsql/10/data/ -l postgres32
提示输入密码,是上一步骤中创建的repl用户的密码123456
在这里插入图片描述
2、修改recovery.conf
进入/usr/pgsql-10/sharecp /usr/pgsql-10/share/recovery.conf.sample /home/pgdata/10/data/recovery.conf 注意这里的路径,一定不要弄错了,将文件放在了data目录下,少了该文件,就无法进行数据同步。参考的文章中要么没写,要么写错,导致很久无法找到问题所在
在这里插入图片描述

修改recovery.conf

standby_mode = 'on'
primary_conninfo = 'user=repl password=123456 host=192.168.3.93 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any'
## 添加如下信息
recovery_target_timeline = 'latest'

3、启动从库
systemctl start postgresql-10
启动成功后,在从机可见独立进程如下
在这里插入图片描述
主机可见
在这里插入图片描述
成功

博主关闭了所有页面的评论