1757 字
9 分钟
CentOS上使用docker部署openGauss数据库

CentOSCentOS上使用dockerdocker部署openGaussopenGauss数据库#

前言:#

笔者在使用openGaussopenGauss数据库时发现配置该数据库非常麻烦,每次配置都要划伤很久的时间,于是记录一下最近一次配置的过程,以防下次又不会配置了=.=

操作系统版本: CentOS Stream 9 64bit
CPU:2核 内存:4GB

建议使用带有管理员权限的rootroot用户配置。

此配置只是单节点配置。

1. 安装dockerdocker​环境#

使用CentOSCentOSyum直接安装即可。已安装dockerdocker就跳过这一步。

yum install docker

安装完毕后使用docker -v查看docker版本检验是否安装成功。

[root@VM-8-13-centos /]# docker -v
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 5.0.2

该版本可能和操作系统有关。

CentOS Stream 9似乎会安装podman-docker,不过不影响使用。

2. 使用DokerDoker安装OpenGaussOpenGauss#

在docker hub中直接搜索openGaussopenGauss​​,找到摩天轮发布的openGauss镜像。或者直接访问enmotech/opengauss - Docker Image | Docker Hub,此为openGauss镜像地址。

接着在docker中下载该镜像:

docker pull enmotech/opengauss

会要求选择一个容器:

[root@VM-8-13-centos /]# docker pull enmotech/opengauss
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
? Please select an image: 
 registry.access.redhat.com/enmotech/opengauss:latest
    registry.redhat.io/enmotech/opengauss:latest
    docker.io/enmotech/opengauss:latest

选择第三个即可。

使用docker image list命令查看当前的imageimage

[root@VM-8-13-centos /]# docker image list
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY                    TAG         IMAGE ID      CREATED       SIZE
docker.io/enmotech/opengauss  latest      6667e225e302  4 months ago  478 MB

已经pull成功了。

引用镜像地址中教程的一段:

容器一旦被删除,容器内的所有数据和配置也均会丢失,而从镜像重新运行一个容器的话,则所有数据又都是呈现在初始化状态,因此对于数据库容器来说,为了防止因为容器的消亡或者损坏导致的数据丢失,需要进行持久化存储数据的操作。通过在docker run的时候指定-v参数来实现。

因此此处选择在外部创建文件夹,进行持久化存储。[为演示,笔者的路径就为/docker/openGauss]

创建文件夹

[root@VM-8-13-centos /]# mkdir -p /docker/openGauss

docker运行

[root@VM-8-13-centos /]# docker run --name opengauss --privileged=true -d -e GS_PASSWORD=aAaaaaBBb@123 \
    -v /docker/openGauss:/var/lib/opengauss  -u root -p 15432:5432 \
    enmotech/opengauss:latest
TIP

-p 15432:5432把本地服务器的15432端口绑定到了容器的5432端口(默认工作端口),因此访问服务器的15432端口即可访问到docker中的openGaussopenGauss​。 -v /your/path指定持久化存储的目录

-e GS_PASSWORD=aAaaaaBBb@123指定默认的数据库账户的密码。

另外还可以指定数据库账户和数据库端口:

-e GS_USERNAME=yourusername指定数据库账户名

-e GS_USERNAME=5432指定数据在容器中的端口号

-u root建议和当前服务器的用户保持一致,以防出现一些不太妙的情况。。

该指令运行完成后,docker就会启动一个新的容器。并且会返回一个容器id:

[root@VM-8-13-centos /]# docker run --name opengauss --privileged=true -d -e GS_PASSWORD=aAaaaaBBb@123 \
    -v /docker/openGauss:/var/lib/opengauss  -u root -p 15432:5432 \
    enmotech/opengauss:latest
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
e18657154bcc9e5bafc9659af6a370a22db58e4c6a0c19d7c8bbe3b46a664acc

e18657154bcc9e5bafc9659af6a370a22db58e4c6a0c19d7c8bbe3b46a664acc就是容器idid​。

使用docer ps -a查看容器的状态:

[root@VM-8-13-centos /]# docker ps -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                                COMMAND     CREATED        STATUS        PORTS                    NAMES
e18657154bcc  docker.io/enmotech/opengauss:latest  gaussdb     4 minutes ago  Up 4 minutes  0.0.0.0:15432->5432/tcp  opengauss

openGauss容器正在运行~

3. 配置OpenGaussOpenGauss远程登录#

通过命令docer exec -it opengauss bash进入 opengauss容器的虚拟终端。

[root@VM-8-13-centos /]# docker exec -it opengauss bash

切换到能够登录数据库的omm用户

root@e18657154bcc:/# su - omm
omm@e18657154bcc:~$ 

此时就可以使用gsql(连接数据库),gs_ctl等命令了。

使用gsql连接数据库

omm@e18657154bcc:~$ gsql
gsql ((openGauss 5.1.0 build b5a8d5b0) compiled at 2023-09-28 00:39:45 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

omm=# 

就可以对数据库进行操作了,比如创建数据库,创建用户。

创建一个名为wwd的用户,且密码为wwdLDG@123

omm=# create user wwd with PASSWORD 'wwdLDG@123';
NOTICE:  The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE

wwd用户赋予管理员权限。

omm=# alter user wwd sysadmin;
ALTER ROLE

详细地操作请查阅: openGauss 开发者指南.pdf

要想退出数据库连接,使用命令\q

omm=# \q
omm@e18657154bcc:~$ 

接着只需要连续使用exit命令就可以回到服务器本身的终端。

omm@e18657154bcc:~$ exit
logout
root@e18657154bcc:/# exit
exit
[root@VM-8-13-centos /]# 

最后以配置远程登录结束。

**实际上,由于远程连接是的操作是通过服务器的15432端口转发到docker容器的5432端口,以下配置改和不改都是可以的。**不过以后可能有不是dockerdocker部署的情况,也记录一下。

切换到用于持久化存储数据库文件的文件夹,之前docker run-v参数的文件夹下的data文件夹

[root@VM-8-13-centos openGauss]# cd /docker/openGauss/data
[root@VM-8-13-centos data]# ls
base           global           gswlm_userinfo.cfg  pg_audit  pg_csnlog    pg_errorinfo  pg_ident.conf  pg_location  pg_logical    pg_notify    pg_serial     pg_stat_tmp  pg_twophase  pg_xlog          postgresql.conf.lock  postmaster.pid       undo
gaussdb.state  gs_gazelle.conf  mot.conf            pg_clog   pg_ctl.lock  pg_hba.conf   pg_llog        pg_log       pg_multixact  pg_replslot  pg_snapshots  pg_tblspc    PG_VERSION   postgresql.conf  postmaster.opts       postmaster.pid.lock

这就是opengauss容器的数据文件夹。

修改其中的postgresql.conf文件:

[root@VM-8-13-centos data]# vim postgresql.conf

找到以下几行配置:

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#local_bind_address = '0.0.0.0'
#port = 5432

取消注释掉它们。并且把监听地址listen_address设置为0.0.0.00.0.0.0(任意地址)

修改其中的pg_hba.conf文件:

vim pg_hba.conf

找到这几行配置:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

这里偷懒,把能访问的数据库和用户都设置为all,所有用户都可以访问所有的数据库,地址也设置为0.0.0.0/0表示连接的源地址可以是任何地址。使用md5校验。

于是添加一条记录

host all all 0.0.0.0/0 md5

注意这条记录可能本来也存在于该配置文件中,可以往下滑一下看看,最终配置文件可以是这样的:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     omm                                trust
#host    replication     omm        127.0.0.1/32            trust
#host    replication     omm        ::1/128                 trust

host all all 0.0.0.0/0 md5

使用docker restart opengauss命令重启一下数据库:

[root@VM-8-13-centos data]# docker restart opengauss
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
opengauss

配置工作就完成了!

4. 远程连接数据库#

使用data studio软件远程连接,当然也可以使用pythonpython,或者是nodejsnodejs连接(推荐使用pgpgpoolpg和pg-pool)

TIP

dockerdocker默认创建的数据库名为postgrespostgres,如果自己创建了数据库也可以连接到该数据库。

使用JavascriptJavascriptpgpg包连接数据库:

const pg = require('pg');

var config = {
    user:'gaussdb',
    database:'postgres',
    password:'Secretpassword@123',      // 账户密码,数据库
    host:'xx.xx.xx.xx', // 服务器IP
    port:'15432'        //端口
};
var pool = new pg.Pool(config);  //创建查询池
pool.query(sql,(err,result) => {			//使用sql语句查询
    if(err){
        console.log(err);
        return;
    }
    console.log(result);
    // 处理result
});

5. 后记#

欢迎访问AHU-WWDLDG二手交易平台,一个基于openGauss数据库的项目~

项目地址: Fragmentszz/AHU-WWDLDG (github.com)

CentOS上使用docker部署openGauss数据库
http://blog.fragments.work/posts/blogs/opengauss/
作者
Lixin WANG
发布于
2024-03-17
许可协议
CC BY-NC-SA 4.0