【postgreSQL】环境部署进阶之自动化部署

在通过手动熟悉安装创建postgreSQL的基础上,我们试图继续解放我们的双手,实现整个部署过程的无干涉全自动过程。实现过程如下:

  1. 创建一个自动化安装的脚本,一个自动初始化和创建第一个用户数据库的自动化脚本
  2. 执行脚本,完成安装部署
  3. 验证结果

下面我们就展示一下这个自动化过程的具体过程:

在正式开始前,先介绍一下演示环境的具体配置:

一台操作系统为Ubuntu20的虚拟机,可以连接外网,内存2G,虚拟硬盘10G。把下面两个脚本文件上传至该服务器某个临时目录。所有操作都是用root用户进行。

脚本1:install_pg.sh

功能介绍:这个脚本主要完成数据库软件的安装过程自动化。有以下几个参数可以选择定制:

  1. 数据库版本号:必选,目前12以上是试过可以的
  2. 数据库名称:可选,默认值 db1
  3. 用户表空间名称:可选,默认值tbs1
  4. 数据库共享内存:可选,默认值2G, 格式:数字+MB|GB,推荐物理内存的25%
  5. 临时段内存:可选,默认64MB, 格式:数字+MB|GB
  6. 会话内存:可选,默认16MB,格式:数字+MB|GB,这是单个会话分配内存,实际使用内存会因为会话数的增加成倍增加

软件安装完成后会调用createdb_pg.sh脚本进行数据库的初始化。操作系统用户新增postgres

#!/bin/bash
PGVERSION=$1
DBNAME=$2
TBSNAME=$3
SHARE_MEM=$4
TEMP_MEM=$5
WORK_MEM=$6

if [ -z $PGVERSION ]; then
	echo "Unknown version."
	exit
fi
su - postgres -c "psql --version"
if [ $? -eq 0 ]; then
        echo "postgresql has already installed."
else
        sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
        if [ $? -ne 0 ]; then
               exit 1
        fi
        wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
        if [ $? -ne 0 ]; then
                exit 1
        fi
        sudo apt-get update
        if [ $? -ne 0 ]; then
                exit 1
        fi
        sudo apt-get -y install postgresql-$PGVERSION
        if [ $? -ne 0 ]; then
                exit 1
        fi
	echo "set OS user [postgres] password:"
        passwd postgres
fi
echo `chmod +x createdb_pg.sh`
if [ $? -ne 0 ]; then
        exit 1
fi
echo `chown -R postgres:postgres createdb_pg.sh`
if [ $? -ne 0 ]; then
        exit 1
fi
echo `cp createdb_pg.sh /var/lib/postgresql/createdb_pg.sh`
if [ $? -ne 0 ]; then
        exit 1
fi
echo "Start create database"$DBNAME
echo `su - postgres -s /bin/bash /var/lib/postgresql/createdb_pg.sh $PGVERSION $DBNAME $TBSNAME $SHARE_MEM $TEMP_MEM $WORK_MEM`
if [ $? -eq 0 ]; then
        echo `systemctl restart postgresql`
        echo `systemctl status postgresql`
        echo "PostgreSQL-"$PGVERSION" install complete."
else
        echo "PostgreSQL-"$PGVERSION" install not complete."
fi

脚本2:createdb_pg.sh

功能介绍:这个脚本主要进行数据库的典型参数的初始化和用户自定义数据库的创建,运行这个脚本有如下几个参数可定制:

  1. 数据库版本号:必选,目前12以上是试过可以的
  2. 数据库名称:可选,默认值 db1
  3. 用户表空间名称:可选,默认值tbs1
  4. 数据库共享内存:可选,默认值2G, 格式:数字+MB|GB,推荐物理内存的25%
  5. 临时段内存:可选,默认64MB, 格式:数字+MB|GB
  6. 会话内存:可选,默认16MB,格式:数字+MB|GB,这是单个会话分配内存,实际使用内存会因为会话数的增加成倍增加

主要初始化项目如下:

初始化超级用户postgres的口令为postgres

生成用户数据库:db1(缺省)

生成用户表空间:tbs1(缺省)

生成用户数据库的管理员及口令:admin/app

配置pg_hba.conf:外网访问数据库权限放开,加密方式采用:scram-sha-256

配置数据库参数:

listen_addresses = '*'
shared_buffers = '2G'(缺省)
temp_buffers = '64MB'(缺省)
work_mem = '16MB'(缺省)
max_connections=500
password_encryption=scram-sha-256

#!/bin/bash
PGVERSION=$1
DBNAME=$2
TBSNAME=$3
SHARE_MEM=$4
TEMP_MEM=$5
WORK_MEM=$6
MAX_CONNECTS=500
PASS_ENCRYPTION='scram-sha-256'
PG_ADMIN=admin
PG_ADMIN_PWD=app

# default value
if [ -z $PGVERSION ]; then
	PGVERSION=12
fi
if [ -z $DBNAME ]; then
	DBNAME=db1
fi
if [ -z $TBSNAME ]; then
	TBSNAME=tbs1
fi
if [ -z $SHARE_MEM ]; then
	SHARE_MEM=2GB
fi
if [ -z $TEMP_MEM ]; then
	TEMP_MEM=64MB
fi
if [ -z $WORK_MEM ]; then
	WORK_MEM=16MB
fi

PG_DATA=/var/lib/postgresql/$PGVERSION/main
PG_DUMP=/var/lib/postgresql/pdump
PG_CONFIG=/etc/postgresql/$PGVERSION/main


if [ -z $PGDATA ]; then
	echo "export PGDATA="$PG_DATA >> ~/.bash_login
fi
if [ -z $PGDUMP ]; then
	echo "export PGDUMP="$PG_DUMP >> ~/.bash_login
fi
if [ -z $PGCONFIG ]; then
	echo "export PGCONFIG="$PG_CONFIG >> ~/.bash_login
fi
echo `source ~/.bash_login`
if [ $? -ne 0 ]; then
	exit 1
fi
if [ ! -e $PGDATA ];then
	echo "Directory path[$PGDATA] is not exists."
	exit 1
fi
if [ ! -e $PGDUMP ];then
	echo "Create "$PGDUMP
	mkdir $PGDUMP
fi
if [ ! -e $PGCONFIG ];then
	echo "Directory path[$PGCONFIG] is not exists."
	exit 1
fi

if [ ! -e $PGDATA"/"$TBSNAME ]; then
	mkdir $PGDATA"/"$TBSNAME
fi
if [ $? -ne 0 ]; then
	exit 1
fi
echo "host all all 0.0.0.0/0 scram-sha-256" >> $PGCONFIG/pg_hba.conf
if [ $? -ne 0 ]; then
	exit 1
fi
psql<<EOF
alter user postgres password 'postgres';
alter system set listen_addresses = '*';
alter system set shared_buffers = '$SHARE_MEM';
alter system set temp_buffers = '$TEMP_MEM';
alter system set work_mem = '$WORK_MEM';
alter system set max_connections=$MAX_CONNECTS;
alter system set password_encryption='$PASS_ENCRYPTION';
CREATE ROLE "$PG_ADMIN" SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN PASSWORD '$PG_ADMIN_PWD';
CREATE TABLESPACE $TBSNAME OWNER $PG_ADMIN LOCATION '$PGDATA/$TBSNAME';
create database $DBNAME owner $PG_ADMIN TABLESPACE $TBSNAME;
GRANT ALL PRIVILEGES ON DATABASE $DBNAME  TO $PG_ADMIN;
\q
EOF
if [ $? -eq 0 ]; then
	echo "PostgreSQL-"$PGVERSION" install successful!"
	echo "Database name:"$DBNAME 
	echo "Admin username/password:"$PG_ADMIN/$PG_ADMIN_PWD
	echo "PGDATA="$PGDATA
	echo "PGDUMP="$PGDUMP
	echo "PGCONFIG="$PGCONFIG
	echo "SHARE_MEMERY="$SHARE_MEM									
	echo "TEMP_MEMERY="$TEMP_MEM										
	echo "WORK_MEMERY="$WORK_MEM
	echo "********create database $DBNAME complete!********"
	echo "You can use this comman to confirm new database: su postgres -c \"psql -U $PG_ADMIN -d $DBNAME -c 'select 1;'"
else
	echo "PostgreSQL-"$PGVERSION" install not complete."
fi

自动化部署步骤

  • 进入脚本文件所在目录/home/temp,并授执行权限
cd /home/temp
chmod +x install_pg.sh
  • 执行脚本,这里安装14版本
. install_pg.sh 14
  • 检查结果
su - postgres -c "psql -U postgres -d postgres -c'select 1 as n;'"
n
----------
         1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值