一、虚拟主机安装
1.使用VMware虚拟机安装CentOS操作系统
操作系统环境
CentOS Linux release 7.2.1511 (Core)
- 软件选择 选择安装GNOME桌面
- 安装位置 选择自动分区
2.通过克隆的方式,生成主备两台主机。
192.168.238.132_master
192.168.238.133_slave
3.使用NAT网络方式
注意事项:
1) 开启服务,否则配置网络时,总是显示网线被拔出
2) DHCP方式自动获取IP
测试连接,存在失败的情况,注意是否已经关闭了防火墙
psql -h192.168.238.133 -dtest -Upostgres
psql: could not connect to server: 拒绝连接
Is the server running on host "192.168.238.133" and accepting
TCP/IP connections on port 5432?
3) 修改网卡自启动
vi /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=yes
二、数据库安装配置步骤
先在192.168.238.132_master和192.168.238.133_slave均安装PostgreSQL。
安装步骤见【PostgreSQL 10.0 源码安装】
主服务器
主服务器地址:192.168.238.132
先创建一个新目录:
mkdir /usr/local/pgsql/pg_archive/
1.首先需要创建一个数据库用户进行主从同步。创建用户replica,并赋予登录和复制的权限
postgres# CREATE ROLE replica login replication encrypted password 'replica'
2.修改pg_hba.conf,允许replica用户来同步
在pg_hba.conf里增加两行:
host all all 192.168.238.133/32 trust #允许133连接到主服务器
host replication replica 192.168.238.133/32 md5 #允许133使用replica用户来复制
这样,就设置了replica这个用户可以从192.168.238.133进行流复制请求。
注:
第二个字段必须要填replication
3.修改postgresql.conf
listen_addresses = '*' # 监听所有IP
archive_mode = on # 允许归档
archive_command = 'cp %p /opt/pgsql/pg_archive/%f' # 用该命令来归档logfile segment
wal_level = hot_standby
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 256 #设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
配置完两个文件后重启服务器。
pg_ctl restart
4.测试slave能否连接到master数据库。在slave上运行如下命令:
psql -h 192.168.238.133 -U postgres
如提示无法连接,请检查是否关闭了防火墙。
关闭防火墙
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
看看是否能进入数据库。若可以,则正常
2.2 从服务器
1.从主节点拷贝数据到从节点
su - postgres
rm -rf /usr/local/pgsql/data/* #先将data目录下的数据都清空
pg_basebackup -h 192.168.238.132 -U replica -D /usr/local/pgsql/data -X stream -P # 从master拷贝数据到slave(基础备份)
mkdir /usr/local/pgsql/pg_archive
2.配置recovery.conf
复制/usr/local/pgsql/share/recovery.conf.sample 到 /usr/local/pgsql/data/recovery.conf
cp /usr/local/pgsql/share/recovery.conf.sample /usr/local/pgsql/data/recovery.conf
修改recovery.conf
standby_mode = on # 说明该节点是从服务器
primary_conninfo = 'host=192.168.238.132 port=5432 user=replica password=replica' # 主服务器的信息以及连接的用户
recovery_target_timeline = 'latest'
3.配置postgresql.conf
wal_level = hot_standby
max_connections = 1000 #一般查多于写的应用从库的最大连接数要比较大
hot_standby = on #说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 10s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
2.3 验证是否部署成功
在主节点上执行:
select client_addr,sync_state from pg_stat_replication;
结果如下:
[postgres@localhost data]$ psql
psql (10.7)
Type "help" for help.
postgres=# select client_addr,sync_state from pg_stat_replication;
client_addr | sync_state
-----------------+------------
192.168.238.133 | async
(1 row)
postgres=#
说明192.168.238.133是从服务器,在接收流,而且是异步流复制。
此外,还可以分别在主、从节点上运行 ps aux | grep postgres 来查看进程:
主服务器上:
postgres 27480 2536 0 10:40 ? 00:00:00 postgres: wal sender process replica 192.168.238.133(55304) streaming 0/8000140
可以看到有一个 wal sender 进程。
从服务器上:
postgres 24721 24716 0 10:40 ? 00:00:00 postgres: wal receiver process streaming 0/8000140
可以看到有一个 wal receiver 进程。
至此,PostgreSQL主从流复制安装部署完成。
在主服务器上插入数据或删除数据,在从服务器上能看到相应的变化。从服务器上只能查询,不能插入或删除。