基于docker的postgresql主从集群搭建

本文详细描述了如何在Ubuntu20.04环境下安装Docker,创建基于Ubuntu的基础镜像,并构建一主一从的PostgreSQL集群,用于测试,但提醒注意生产环境使用需谨慎。包括安装PostgreSQL、配置Docker、制作镜像、设置集群和数据同步等内容。
摘要由CSDN通过智能技术生成

概述

        在ubuntu20.4的环境中,安装docker服务,创建postgresql的docker编译基础镜像,创建基于docker的一主一从的集群。只用于测试搭建,生产环境使用需谨慎。

名称版本功能
ubuntu20.04宿主机系统
docker未记录
masterpostgresql14.6主节点
slavepostgresql14.6从节点
navicat15数据库连接客户端软件

下载postgresql

sudo su
cd /home/yt/
mkdir -p software/pg
cd /home/yt/software/pg
apt install wget -y
wget https://ftp.postgresql.org/pub/source/v14.6/postgresql-14.6.tar.gz

安装docker

apt install curl -y

apt-get remove docker docker-engine docker.io containerd runc

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
	
	
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
  $(lsb_release -cs) \
  stable"
  
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io

制作postgresql编译源镜像

sudo su

##首次搭建docker的pgsql的初始镜像
###前提是设备已经安装了docker软件

docker --version
docker pull ubuntu:20.04

cd /home/yt/software/pg
cat > Dockerfile <<EOF
FROM ubuntu:20.04
ENV LANG C.UTF-8
EOF
docker build -t ubuntu:20.04_utf8   .
docker images

docker run -itd --name pg u20:utf8 /bin/bash
docker cp postgresql-14.6.tar.gz pg:/root
docker exec -it pg bash
cd
apt update
apt install gcc build-essential libreadline-dev zlib1g zlib1g-dev  -y

tar -xf postgresql-14.6.tar.gz
cd postgresql-14.6
./configure

make 
make install


#创建postgres用户,输入2次密码
adduser postgres


cd /usr/local/pgsql
mkdir data
chown -R postgres /usr/local/pgsql/data
chmod -R 0700  /usr/local/pgsql/data
exit

打包pg镜像创建集群数据目录

#退出容器打包此容器
docker stop pg
docker commit pg pg:my

##创建宿主机的数据目录用于后面mpg和s1pg挂载使用
mkdir -p /usr/local/pg_data/mpg/data
mkdir -p /usr/local/pg_data/s1pg/data


## tips
1、master创建后,slave1也需要紧跟创建
2、有多少个节点,就需要写多少个/etc/hosts,地址以及ip根据情况来
3、集群创建成功,到master的命令行执行修改postgres密码,之后连接到navicat操作

master节点配置

#基于pg:my镜像创建mpg容器作为master
docker run -d --name mpg -p 51010:5432 -v  /usr/local/pg_data/mpg/data:/usr/local/pgsql/data pg:my /bin/bash


#进入mpg
docker exec -it mpg bash

#设置数据库目录权限
chown -R postgres:postgres /usr/local/pgsql/data
chmod -R 0700  /usr/local/pgsql/data


#安装vim修改hosts
apt update
apt install vim -y
vim /etc/hosts


#切换到postgres用户初始化数据库
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data


#配置远程连接
vim /usr/local/pgsql/data/postgresql.conf
...
listen_addresses = '*'
port = 5432                #postgresql默认端口为5432
max_connections = 1000

#添加一条IP授权记录,可以对一个网段授权
vim /usr/local/pgsql/data/pg_hba.conf
host all all 172.17.0.0/24 md5
host all all 192.168.1.0/24 md5
...
host    replication     repuser             213e2454c441            md5

#重启数据库服务
/usr/local/pgsql/bin/pg_ctl restart -D /usr/local/pgsql/data



#登录数据库创建repuser用户
cd /usr/local/pgsql/bin
./psql -p 55432
CREATE USER repuser replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD 'Arepuser123';

\q

#重启数据库
/usr/local/pgsql/bin/pg_ctl restart -D /usr/local/pgsql/data


#登录数据库查看配置
cd /usr/local/pgsql/bin
./psql
select pg_is_in_recovery();   ##验证主节点是否配置完成

select * from pg_stat_replication;  ##验证从节点是否配置完成

\q

slave节点配置

#基于pg:my镜像创建s1pg容器
docker run -d --name s1pg -p 51011:5432 -v  /usr/local/pg_data/s1pg/data:/usr/local/pgsql/data pg:my /bin/bash


#进入容器
docker exec -it s1pg bash

#数据库目录用户授权
chown -R postgres:postgres /usr/local/pgsql/data
chmod -R 0700  /usr/local/pgsql/data


#安装vim和修改hosts
apt update
apt install vim -y

vim /etc/hosts


#切换到postgres用户

su - postgres

cd /usr/local/pgsql/bin
./pg_basebackup -h 172.17.0.2 -p 5432 -U repuser -D /usr/local/pgsql/data -Fp -Xs -R -P -v    ##密码 Arepuser123
##这里的host的ip根据自己的master地址来改

cat /usr/local/pgsql/data/postgresql.auto.conf 


#启动postgresql服务
/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data

测试

  • navicat测试

    • 登录上master和slave

    • 在master上执行写操作,查看slave是否也写进去了

    • 在slave上写,看是否报错

    • 其他测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值