# enmotech-docker-mogdb **Repository Path**: xk_git_admin/enmotech-docker-mogdb ## Basic Information - **Project Name**: enmotech-docker-mogdb - **Description**: MogDB Docker - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: https://www.mogdb.io - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2022-08-17 - **Last Updated**: 2022-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 快速参考 - **维护者**: [Enmotech OpenSource Team](https://github.com/enmotech) - **哪里可以获取帮助**: [墨天轮-MogDB](https://www.modb.pro/MogDB) # 支持的tags - [`latest`]() - [`3.0.0`]() - [`2.1.0`]() - [`2.0.3`]() - [`2.0.1`]() - [`2.0.0`]() - [`1.1.0`]() - [`1.0.1`]() - [`1.0.0`]() # 关于MogDB MogDB是云和恩墨基于MogDB开源数据库进行定制、推出的企业发行版。它将围绕高可用、安全、自动化运维、数据库一体机和SQL审核优化等企业需求,解决企业用户落地。其核心价值是易用性、高性能、高可用等和全天候的企业支持。 MogDB官方网站:[https://mogdb.io/](https://mogdb.io/) ![logo](https://cdn-mogdb.enmotech.com/website/logo.png) # 云和恩墨MogDB镜像的特点 * 云和恩墨会最紧密跟踪MogDB的源码变化,第一时间发布镜像的新版本。 * 云和恩墨的云端数据库,虚拟机数据库以及容器版本数据库均会使用同样的初始化最佳实践配置,这样当您在应对各种不同需求时会有几乎相同的体验。 * 云和恩墨会持续发布不同CPU架构(x86或者ARM)之上,不同操作系统的各种镜像 * 云和恩墨MogDB 2.1容器版支持最新版的compat-tools和插件功能。 * [compat-tools详细介绍](https://docs.mogdb.io/zh/mogdb/v2.1/DBMS-RANDOM#compat-tools%E4%BB%8B%E7%BB%8D) * 插件详细介绍 * [dblink](https://docs.mogdb.io/zh/mogdb/v2.1/dblink-user-guide) * [orafce](https://docs.mogdb.io/zh/mogdb/v2.1/orafce-user-guide) * [pg_buikload](https://docs.mogdb.io/zh/mogdb/v2.1/pg_bulkload-user-guide) * [pg_prewarm](https://docs.mogdb.io/zh/mogdb/v2.1/pg_prewarm-user-guide) * [pg_repack](https://docs.mogdb.io/zh/mogdb/v2.1/pg_repack-user-guide) * [pg_trgm](https://docs.mogdb.io/zh/mogdb/v2.1/pg_trgm-user-guide) * [wal2json](https://docs.mogdb.io/zh/mogdb/v2.1/wal2json-user-guide) **目前已经支持x86-64和ARM64两种架构。** 从2.0版本开始(包括2.0版本) - x86-64架构的MogDB运行在[Ubuntu 18.04操作系统](https://ubuntu.com/)中 - ARM64架构的MogDB运行在[Debian 10 操作系统](https://www.debian.org/)中 在1.1.0版本之前(包括1.1.0版本) - x86-64架构的MogDB运行在[CentOS 7.6操作系统](https://www.centos.org/)中 - ARM64架构的MogDB运行在[openEuler 20.03 LTS操作系统](https://openeuler.org/zh/)中 # 如何使用本镜像 ## 启动MogDB实例 ```console $ docker run --name MogDB --privileged=true -d -e GS_PASSWORD=Enmo@123 swr.cn-north-4.myhuaweicloud.com/mogdb/mogdb:latest ``` ## 环境变量 为了更灵活的使用MogDB镜像,可以设置额外的参数。未来我们会扩充更多的可控制参数,当前版本支持以下变量的设定。 ### `GS_PASSWORD` 在你使用MogDB镜像的时候,必须设置该参数。该参数值不能为空或者不定义。该参数设置了MogDB数据库的超级用户omm以及测试用户gaussdb的密码。MogDB安装时默认会创建omm超级用户,该用户名暂时无法修改。测试用户gaussdb是在[entrypoint.sh](https://github.com/enmotech/enmotech-docker-MogDB/blob/master/1.0.1/entrypoint.sh)中自定义创建的用户。 MogDB镜像配置了本地信任机制,因此在容器内连接数据库无需密码,但是如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码。 **MogDB的密码有复杂度要求,需要:密码长度8个字符及以上,必须同时包含英文字母大小写,数字,以及特殊符号** ### `GS_NODENAME` 指定数据库节点名称 默认为gaussdb ### `GS_USERNAME` 指定数据库连接用户名 默认为gaussdb ### `GS_PORT` 指定数据库端口,默认为5432。 ## 从容器外部连接容器数据库 MogDB的默认监听启动在容器内的5432端口上,如果想要从容器外部访问数据库,则需要在`docker run`的时候指定`-p`参数。比如以下命令将允许使用15432端口访问容器数据库。 ```console $ docker run --name MogDB --privileged=true -d -e GS_PASSWORD=Secretpassword@123 -p 15432:5432 swr.cn-north-4.myhuaweicloud.com/mogdb/mogdb:latest ``` 在上述命令正常启动容器数据库之后,可以通过外部的gsql进行数据库访问。 ```console $ gsql -d postgres -U mogdb -W'Secretpassword@123' -h your-host-ip -p15432 ``` ## 持久化存储数据 容器一旦被删除,容器内的所有数据和配置也均会丢失,而从镜像重新运行一个容器的话,则所有数据又都是呈现在初始化状态,因此对于数据库容器来说,为了防止因为容器的消亡或者损坏导致的数据丢失,需要进行持久化存储数据的操作。通过在`docker run`的时候指定`-v`参数来实现。比如以下命令将会指定将MogDB的所有数据文件存储在宿主机的/enmotech/MogDB下。`-u root`参数用于指定容器启动的时候以root用户执行脚本,否则会遇到没有权限创建数据文件目录的问题。 注:如果使用podman,会有目标路径检查,需要预先创建宿主机目标路径。 ```console $ mkdir -p /enmotech/MogDB $ docker run --name MogDB --privileged=true -d -e GS_PASSWORD=Secretpassword@123 \ -v /enmotech/MogDB:/var/lib/MogDB -u root -p 15432:5432 \ swr.cn-north-4.myhuaweicloud.com/mogdb/mogdb:latest ``` ## Kubernetes 部署 (2.1.0版本以后支持) - x86 ```console $ kubectl apply -f https://gitee.com/enmotech/enmotech-docker-mogdb/raw/master/2.1.0/k8s_amd.yaml pod/mogdb created ``` - arm ```console $ kubectl apply -f https://gitee.com/enmotech/enmotech-docker-mogdb/raw/master/2.1.0/k8s_arm.yaml pod/mogdb created ``` **k8s连接pod** - 进入容器内gsql登录 ```console $ kubectl exec -it mogdb -- bash root@mogdb:/# su - omm omm@mogdb:~$ gsql -d postgres gsql ((MogDB 2.1.0 build 56189e20) compiled at 2022-01-07 18:47:53 commit 0 last mr ) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. MogDB=# ``` ## 创建主从复制的MogDB容器 1. 拉取容器镜像 2. 运行脚本[create_master_slave.sh](https://github.com/enmotech/enmotech-docker-MogDB/blob/master/create_master_slave.sh),按照提示输入所需参数,或者直接使用默认值,即可自动创建MogDB一主一备架构的两个容器。 上述脚本有多个自定义参数,以下为这些参数的参数名称(解释)[默认值]。 > OG_SUBNET (容器所在网段) [172.11.0.0/24] GS_PASSWORD (定义数据库密码)[Enmo@123] MASTER_IP (主库IP)[172.11.0.101] SLAVE_1_IP (备库IP)[172.11.0.102] MASTER_HOST_PORT (主库数据库服务端口)[5432] MASTER_LOCAL_PORT (主库通信端口)[5434] SLAVE_1_HOST_PORT (备库数据库服务端口)[6432] SLAVE_1_LOCAL_PORT (备库通信端口)[6434] MASTER_NODENAME (主节点名称)[MogDB_master] SLAVE_NODENAME (备节点名称)[MogDB_slave1] ### 使用示例 #### 拉取镜像 ```console # docker pull enmotech/MogDB:latest ``` #### 获取创建主备容器脚本并运行 ```console # wget https://raw.githubusercontent.com/enmotech/enmotech-docker-MogDB/master/create_master_slave.sh # chmod +x create_master_slave.sh # ./create_master_slave.sh Please input OG_SUBNET (容器所在网段) [172.11.0.0/24]: OG_SUBNET set 172.11.0.0/24 Please input GS_PASSWORD (定义数据库密码)[Enmo@123]: GS_PASSWORD set Enmo@123 Please input MASTER_IP (主库IP)[172.11.0.101]: MASTER_IP set 172.11.0.101 Please input SLAVE_1_IP (备库IP)[172.11.0.102]: SLAVE_1_IP set 172.11.0.102 Please input MASTER_HOST_PORT (主库数据库服务端口)[5432]: MASTER_HOST_PORT set 5432 Please input MASTER_LOCAL_PORT (主库通信端口)[5434]: MASTER_LOCAL_PORT set 5434 Please input SLAVE_1_HOST_PORT (备库数据库服务端口)[6432]: SLAVE_1_HOST_PORT set 6432 Please input SLAVE_1_LOCAL_PORT (备库通信端口)[6434]: SLAVE_1_LOCAL_PORT set 6434 Please input MASTER_NODENAME [MogDB_master]: MASTER_NODENAME set MogDB_master Please input SLAVE_NODENAME [MogDB_slave1]: SLAVE_NODENAME set MogDB_slave1 Please input MogDB VERSION [1.0.1]: MogDB VERSION set 1.0.1 starting a70b46c7b2ddd1b6959403a0ac5b6783cf3f4100404fa628b8f055352a3e8567 MogDB Database Network Created. e5430f16948639ac6a681e7f7db5ebbce8bf40c576e17ae412a3003f27b8ea14 MogDB Database Master Docker Container created. bcb688c551b15d34196c249fdf934e4b8140a9181d6dde809c957405ec1ed29a MogDB Database Slave1 Docker Container created. ``` #### 验证主从状态 ``` # docker exec -it MogDB_master /bin/bash # su - omm Last login: Thu Oct 1 23:19:49 UTC 2020 on pts/0 $ gs_ctl query -D /var/lib/MogDB/data/ [2020-10-01 23:21:27.685][316][][gs_ctl]: gs_ctl query ,datadir is -D "/var/lib/MogDB/data" HA state: local_role : Primary static_connections : 1 db_state : Normal detail_information : Normal Senders info: sender_pid : 258 local_role : Primary peer_role : Standby peer_state : Normal state : Streaming sender_sent_location : 0/3000550 sender_write_location : 0/3000550 sender_flush_location : 0/3000550 sender_replay_location : 0/3000550 receiver_received_location : 0/3000550 receiver_write_location : 0/3000550 receiver_flush_location : 0/3000550 receiver_replay_location : 0/3000550 sync_percent : 100% sync_state : Sync sync_priority : 1 sync_most_available : On channel : 172.11.0.101:5434-->172.11.0.102:53786 Receiver info: No information ``` # License Copyright (c) 2011-2021 Enmotech 许可证协议遵循GPL v3.0,你可以从下方获取协议的详细内容。 https://github.com/enmotech/enmotech-docker-MogDB/blob/master/LICENSE