postgresql16.4 配置 数据库主从
我用的版本是16.4 安装目录是 /usr/local/postgresql
原理:两台先单独安装,都安装成功之后,删除从库的data文件,在从库执行命令将主库的data文件同步过来。
一、前期准备
1、修改内核参数
sudo vim /etc/sysctl.conf
kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536 # 系统最大打开文件描述符数net.ipv4.ip_local_port_range = 1024 65000net.core.rmem_default = 1048576net.core.rmem_max = 1048576net.core.wmem_default = 262144net.core.wmem_max = 262144
sudo sysctl -p
我用的是两台麒麟 163作为主 133从
cat >>/etc/hosts<<EOF
192.168.1.133 pgmaster
192.168.1.163 pgslave
EOF
在两台上都执行。
我用的是postgresql 16.4 安装
下载地址 PostgreSQL: File Browser
wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz
下载并解压,我的目录是/opt
安装依赖
yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel
单独安装下
yum install libicu-devel python3-devel -y
二、编译安装 (两台都执行,现在还不主从,单独的两台都安装好,再配置)
我的安装目录是 /usr/local/postgresql
useradd postgresqlmkdir -p /usr/local/postgresql/datachown -R postgresql:postgresql /usr/local/postgresql
./configure --prefix=/usr/local/postgresql --with-python --with-libxml --with-libxslt
make && make install 多核的可以 make -j32 && make install -j32
三、 打开profile文件,添加环境变量
直接追加
tee -a /etc/profile << EOF
export PGHOME=/usr/local/postgresql
export PGDATA=/usr/local/postgresql/data/
export PATH=/usr/local/postgresql/bin:\$PATH
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$PGHOME/lib/
export PATH=\$PGHOME/bin:\$PATH:\$HOME/bin
EOF
重新加载环境变量 source /etc/profile
再次确认目录所属组
chown -R postgresql:postgresql /usr/local/postgresql
四、数据初始化
切换成postgresql用户
su postgresql
./bin/initdb 或 /usr/local/postgresql/bin/initdb
五、配置启动文件
添加启动文件:cp /opt/tool/postgresql-16.4/contrib/start-scripts/linux /etc/init.d/postgresql
修改/etc/init.d/postgresql文件的
三个变量 路径和用户 postgresql
六、添加开机启动
chmod +x /etc/init.d/postgresql
chkconfig --add postgresql
启动 /etc/init.d/postgresql start
查看 netstat -antp|grep 5432 或 ps -ef | grep postgres
进入data目录 vim postgresql.conf 配置文件
vim postgresql.conf#修改允许访问的ip地址
listen_addresses = '*'
#端口
port = 5432
#内存大小。可以使用默认值
max_wal_size = 1GB
min_wal_size = 80MB
两个都配置完之后。
七、主pg上配置用户
进入主服务器配置需要同步的用户
进入的安装bin目录,切换到 su postgresql
./psql postgres
CREATE USER repuser replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD 'repuser';
\du 查看用户, \l 查看数据库 \q 退出
host replication repuser pgslave md5
重启master主节点
6、验证主节点是否已完成 select pg_is_in_recovery();
pg_is_in_recovery显示为f,代表着我们的主节点设置完毕了,下面我们开始进行从节点的设置。
八、从配置pg上配置 删除从库的data文件
1、在slave节点中备份master的数据目录
slave节点,需要删除$PGDATA目录的操作,让其重新根据master备份过来
rm -rf $PGDATA
pg_basebackup -Fp --progress -D /opt/data/ -R -h 192.168.1.133 -p5432 -U repuser --passwor
pg_basebackup被用于获得一个正在运行的PostgreSQL数据库集簇的基础备份。
-D directory
将输出写到哪个目录。如果必要,pg_basebackup将创建该目录及任何父目录。
-Fp
把输出写成平面文件,使用和当前数据目录和表空间相同的布局。
-X stream
在备份被创建时通过流复制传送预写式日志。这将开启一个到服务器的第二连接并且在运行备份时并行开始流传输预写式日志。
-R
--write-recovery-conf
在输出目录中(或者当使用 tar 格式时在基础归档文件中)建立 standby.signal 并附加连接设置到postgresql.auto.conf 来简化设置一个后备服务器。postgresql.auto.conf文件将记录连接设置(如果有)以及pg_basebackup所使用的复制槽,这样流复制后面就会使用相同的设置。
-P
--progress
启用进度报告。
-v
--verbose
启用冗长模式,可以理解为输出备份过程数据。
执行完会 查看postgresql.auto.conf配置文件,检查是否包含了以下配置信息:
刚才用的root同步的,查看权限,权限不队的话, 赋予权限
chown -R postgresql:postgresql ./
重启 进入从库
主的查看 SELECT * FROM pg_stat_replication;
可以看到,已经有从库信息