概述
在ubuntu20.4的环境中,安装docker服务,创建postgresql的docker编译基础镜像,创建基于docker的一主一从的集群。只用于测试搭建,生产环境使用需谨慎。
名称 | 版本 | 功能 |
---|---|---|
ubuntu | 20.04 | 宿主机系统 |
docker | 未记录 | |
master | postgresql14.6 | 主节点 |
slave | postgresql14.6 | 从节点 |
navicat | 15 | 数据库连接客户端软件 |
下载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上写,看是否报错
-
其他测试
-