环境说明
系统: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
pg安装
在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、重载 systemdsystemctl 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/share
,cp /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
启动成功后,在从机可见独立进程如下
主机可见
成功
参考链接
https://www.jianshu.com/p/fbff38241729
http://www.odoodev.cn/project-16/doc-77/
https://cloud.tencent.com/developer/article/1504650
https://cloud.tencent.com/developer/article/1514174