OpenGauss主从复制在容器环境下的高效实现【华为开发者空间】
前言
华为开发者空间是华为云专为全球开发者设计的开发平台,集成了昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等核心技术资源及工具。它致力于每位开发者都能轻松获取专属云主机,通过预装直观可视化操作系统、CodeArts IDE及多种编程语言插件,解决了本地开发环境的复杂性和稳定性问题,提供强大、安全、高效的开发体验。开发者每月可享受15小时云主机使用、5GB个人存储空间及3小时场景化沙箱资源,且云主机内置便捷通道直达技术社区与学习资源,打造出一个即开即用、可持续发展的个人工作空间,既是项目开发的舞台,也是学习成长的笔记簿和个人智慧的宝库。
接下来随我一起走进华为开发者空间,领取云主机,并部署OpenGauss主从复制数据库。
环境规划
主机类型 | 操作系统 | Docker | OpenGauss |
---|---|---|---|
华为云开发者空间云主机 | openEuler 22.03 LTS | 27.1.1 | 3.0.0 |
领取云主机
- 进入开发者空间,领取云主机
华为云开发者空间:https://developer.huaweicloud.com/space/devportal/desktop
- 选择云主机对应的规格,点击创建(可根据自身需求选择预装JAVA或者Python等相应的工具)
- 进入云主机,点击在浏览器中打开
正在连接中,需要等待3-5分钟,方可连接成功
Docker介绍
Docker
是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成轻量级的、可移植的容器。这些容器可以在任何支持Docker的操作系统上运行,无需进行额外的配置。Docker
提供了强大的隔离性和一致性,使得应用程序的部署、管理和扩展变得更加简单和高效。
安装Docker
下载docker-ce.repo
本实例我们选择 华为开源镜像站 的
docker-ce.repo
文件
# 设置稳定的docker仓库(本实例我们选择华为云的docker仓库)
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
--2024-11-18 14:04:30-- https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
?????? mirrors.huaweicloud.com (mirrors.huaweicloud.com)... 123.249.118.101, 124.70.61.162, 1.92.76.132, ...
???? mirrors.huaweicloud.com (mirrors.huaweicloud.com)|123.249.118.101|:443... ????
??? HTTP ?????????... 200 OK
???1919 (1.9K) [application/octet-stream]
?????: ?/etc/yum.repos.d/docker-ce.repo?
/etc/yum.repos.d/docker-ce.repo 100%[=========================================================================>] 1.87K --.-KB/s ?? 0s
2024-11-18 14:04:30 (123 MB/s) - ??? ?/etc/yum.repos.d/docker-ce.repo? [1919/1919])
# 查看所下载的repo文件
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ ls /etc/yum.repos.d/
docker-ce.repo openEuler.repo openEuler.repo.rpmnew
因为我们的系统是
OpenEuler 22.03
,没有对应的镜像仓库,我们基于提供的centos
仓库进行修改
# 将docker-ce.repo中的$releasever 替换为具体的版本号,例如:9.9
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo vim /etc/yum.repos.d/docker-ce.repo
# 清理缓存
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo yum clean all
Warning: failed loading '/etc/yum.repos.d/docker-ce.repo', skipping.
54 files removed
# 构建缓存
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo yum makecache
至此docker仓库配置成功
安装docker软件包
不指定版本默认安装最新版,安装之前确保主机没有安装
docker
# 查看docker版本
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo yum list docker-ce --showduplicates | sort -r
# 安装docker,默认最新版
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo yum install -y docker-ce
启动docker服务
# 查看docker版本
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker -v
Docker version 27.1.1, build 6312585
# 启动docker服务,并设置开机自启
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo systemctl start docker.service
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo systemctl enable docker.service
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
# 运行正常(显示的是active)
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2024-08-31 21:38:14 CST; 12h ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 178445 (dockerd)
Tasks: 13
Memory: 177.9M
CGroup: /system.slice/docker.service
└─ 178445 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
........................
配置镜像加速器
本实例我们选择华为云镜像加速器,也可根据自身需求配置相应的镜像加速器
# 创建指定文件夹docker
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo mkdir -p /etc/docker
# 创建并配置文件
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo vim /etc/docker/daemon.json
# 查看配置文件
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo cat /etc/docker/daemon.json
{
"registry-mirrors": [ "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com" ]
}
# 重新加载配置文件
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo systemctl daemon-reload
# 重新启动docker服务
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo systemctl restart docker.service
# 查看修改镜像加速
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker info
.................................
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com/
Live Restore Enabled: false
补充:因为镜像源的问题可能会导致镜像拉取超时,导致拉取失败,可以配置多个镜像仓库进行拉取镜像测试
# 配置镜像仓库
[root@docekr ~]# cd /etc/docker/
[root@docekr docker]# vim daemon.json
[root@docekr docker]# cat daemon.json
{
"registry-mirrors": [
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://your_preferred_mirror",
"https://dockerhub.icu",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
opengauss介绍
openGauss
是一款全面友好开放的企业级开源关系型数据库管理系统,它深度融合华为在数据库领域的研发经验,提供面向多核架构的极致性能、全链路业务与数据安全、基于AI的调优和高效运维能力,支持标准的SQL规范,具有高性能、高可用、高安全、易运维、全开放的特点,并允许任何人免费使用、修改和分发,采用木兰宽松许可证协议。
容器化部署opengauss
单节点部署
- 拉取镜像
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker pull enmotech/opengauss:3.0.0
- 创建单节点容器进行测试
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker run --name opengauss -d --restart always --privileged=true -e GS_PASSWORD=Admin@123456 -v /data/opengauss/mysql:/var/lib/opengauss -u root -p 15432:5432 enmotech/opengauss:3.0.0
- 查看容器状态
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6afd18c82f9c enmotech/opengauss:3.0.0 "entrypoint.sh gauss…" 32 seconds ago Up 31 sec onds 0.0.0.0:15432->5432/tcp, [::]:15432->5432/tcp opengauss
- 进入容器,并进行基本操作
# 进入容器
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker exec -it opengauss /bin/bash
# 切换用户
root@6afd18c82f9c:/# su - omm
# 进入数据库
omm@6afd18c82f9c:~$ gsql
# 查看表
omm=# \db
List of tablespaces
Name | Owner | Location
------------+-------+----------
pg_default | omm |
pg_global | omm |
(2 rows)
# 退出数据库
omm=# \q
主从复制部署
openGauss
主从复制是一种数据备份和冗余技术,通过该技术可以实现主数据库与从数据库之间的数据同步,当主数据库发生故障时,可以快速切换到从数据库,以保证数据库的高可用性和业务连续性。
- 下载运行脚本,OpenGauss官方为我们提供了脚本文件,我们只需要下载修改即可快速部署出主从复制结构的OpenGauss数据库
脚本参数解析:
OG_SUBNET [172.11.0.0/24] 容器所在网段 GS_PASSWORD [Enmo@123] 定义数据库密码 MASTER_IP [172.11.0.101] 主数据库IP地址 SLAVE_1_IP [172.11.0.102] 备数据库IP地址 MASTER_HOST_PORT [5432] 主库数据库服务端口 MASTER_LOCAL_PORT [5434] 主库通信端口 SLAVE_1_HOST_PORT [6432] 备库数据库服务端口 SLAVE_1_LOCAL_PORT [6434] 备库通信端口 MASTER_NODENAME [opengauss_master] 主节点名称 SLAVE_NODENAME [opengauss_slave1] 备节点名称
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo wget https://raw.githubusercontent.com/enmotech/enmotech-docker-opengauss/master/create_master_slave.sh
- 执行脚本,输入对应信息,创建容器
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo sh create_master_slave.sh
Please input OG_SUBNET (容器所在网段) [172.11.0.0/24]: 172.11.0.0/24
OG_SUBNET set 172.11.0.0/24
Please input GS_PASSWORD (定义数据库密码)[Enmo@123]: Enmo@123
GS_PASSWORD set Enmo@123
Please input MASTER_IP (主库IP)[172.11.0.101]: 172.11.0.101
MASTER_IP set 172.11.0.101
Please input SLAVE_1_IP (备库IP)[172.11.0.102]: 172.11.0.102
SLAVE_1_IP set 172.11.0.102
Please input MASTER_HOST_PORT (主库数据库服务端口)[5432]: 5432
MASTER_HOST_PORT set 5432
Please input MASTER_LOCAL_PORT (主库通信端口)[5434]: 5434
MASTER_LOCAL_PORT set 5434
Please input SLAVE_1_HOST_PORT (备库数据库服务端口)[6432]: 6432
SLAVE_1_HOST_PORT set 6432
Please input SLAVE_1_LOCAL_PORT (备库通信端口)[6434]: 6434
SLAVE_1_LOCAL_PORT set 6434
Please input MASTER_NODENAME [opengauss_master]: opengauss_master
MASTER_NODENAME set opengauss_master
Please input SLAVE_NODENAME [opengauss_slave1]: opengauss_slave1
SLAVE_NODENAME set opengauss_slave1
Please input openGauss VERSION [3.0.0]: 3.0.0
openGauss VERSION set 3.0.0
starting
88f3e3511a545bd0c4f0ca73e76bf1f9188e6eb88f0a7e9518d5aad397b224e6
OpenGauss Database Network Created.
498061349ff1dff265df6aa07f8dddd6f5f9959b99de20983f9c1e84925acf71
OpenGauss Database Master Docker Container created.
260943f39f238bb6d3b521c31504da91d5c9fdf6336b039b906a3d506a3e1a4d
OpenGauss Database Slave1 Docker Container created.
- 查询容器运行状态
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
260943f39f23 enmotech/opengauss:3.0.0 "entrypoint.sh -M st…" 48 seconds ago Up 47 seconds 5432/tcp, 0.0.0.0:6432->6432/tcp, :::6432->6432/tcp opengauss_slave1
498061349ff1 enmotech/opengauss:3.0.0 "entrypoint.sh -M pr…" About a minute ago Up About a minute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp opengauss_master
- 查看主从复制状态
# 进入到master节点
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker exec -it opengauss_master /bin/bash
root@opengauss_master:/# su - omm
# 数据库运行状态,可以看到主从端都正常
omm@opengauss_master:~$ gs_ctl query -D /var/lib/opengauss/data/
[2024-11-15 12:18:31.467][338][][gs_ctl]: gs_ctl query ,datadir is /var/lib/opengauss/data
HA state:
local_role : Primary
static_connections : 1
db_state : Normal
detail_information : Normal
Senders info:
sender_pid : 311
local_role : Primary
peer_role : Standby
peer_state : Normal
state : Streaming
sender_sent_location : 0/40002E8
sender_write_location : 0/40002E8
sender_flush_location : 0/40002E8
sender_replay_location : 0/40002E8
receiver_received_location : 0/40002E8
receiver_write_location : 0/40002E8
receiver_flush_location : 0/40002E8
receiver_replay_location : 0/40002E8
sync_percent : 100%
sync_state : Sync
sync_priority : 1
sync_most_available : On
channel : 172.11.0.101:5434-->172.11.0.102:45076
Receiver info:
No information
- 验证主从复制
# 数据同步验证,在主库建个用户和表,去从库进行查看
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker exec -it opengauss_master /bin/bash
root@opengauss_master:/# su - omm
omm@opengauss_master:~$ gsql -r
gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:34 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
# 创建用户
omm=# create user wzs with password "hello@1234";
NOTICE: The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE
# 创建表
omm=# create table test1(id int,name varchar(20));
CREATE TABLE
# 插入数据
omm=# insert into test1 values (1,'zhangsan');
INSERT 0 1
# 查看表内容
omm=# select * from test1;
id | name
----+----------
1 | zhangsan
(1 row)
# 退出数据库
omm=# \q
# 退出容器
omm@opengauss_master:~$ exit
logout
root@opengauss_master:/# exit
exit
去从数据库进行查看
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo docker exec -it opengauss_slave1 /bin/bash
root@opengauss_slave1:/# su - omm
# 指定端口号,gsql默认指定的是5432
omm@opengauss_slave1:~$ gsql -r -p 6432
gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:34 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
omm=# \d
List of relations
Schema | Name | Type | Owner | Storage
--------+-------+-------+-------+----------------------------------
public | test1 | table | omm | {orientation=row,compression=no}
(1 row)
omm=# select * from test1;
id | name
----+----------
1 | zhangsan
(1 row)
# 查看用户(可以看到我们创建的用户)
omm=# select * from pg_user;
usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd |
valbegin | valuntil | respool | parent | spacelimit | useconfig | nodegroup
| tempspacelimit | spillspacelimit | usemonitoradmin | useoperatoradmin | usepo
licyadmin
---------+----------+-------------+----------+-----------+---------+----------+-
---------+----------+--------------+--------+------------+-----------+----------
-+----------------+-----------------+-----------------+------------------+------
----------
omm | 10 | t | t | t | t | ******** |
| | default_pool | 0 | | |
| | | t | t | t
gaussdb | 16385 | f | f | f | f | ******** |
| | default_pool | 0 | | |
| | | f | f | f
repuser | 16389 | f | f | f | t | ******** |
| | default_pool | 0 | | |
| | | f | f | f
wzs | 16393 | f | f | f | f | ******** |
| | default_pool | 0 | | |
| | | f | f | f
(4 rows)
omm=# \q
omm@opengauss_slave1:~$ exit
logout
root@opengauss_slave1:/# exit
exit
至此,主从复制数据库部署成功
补充(gsql)
果有需要可以自行安装
opengauss
客户端工具gsql
,进行连接数据库(本篇文章只针对测试环境,生产环境需要根据自身业务需求安装对应工具)客户端工具下载地址:https://support.huaweicloud.com/tg-dws/dws_07_0002.html
安装客户端工具
# 创建文件夹
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo mkdir /gsql && cd /gsql
# 安装解压命令
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo yum install -y unzip
# 下载软件包并放到指定目录
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo ls
unzip dws_client_8.2.x_redhat_x64.zip
# 解压软件包
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo unzip dws_client_8.2.x_redhat_x64.zip
# 设置环境变量
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo vim ~/.bashrc
# 这以下数据加载文件末尾
................................
export PATH=/gsql/bin:$PATH
export LD_LIBRARY_PATH=/gsql/lib:$LD_LIBRARY_PATH
# 重新加载配置文件,使其生效
[developer@cdb4db8f96f64111a397468a6b8bc33b ~]$ sudo source ~/.bashrc
# 连接数据库测试
[root@openEuler ~]# gsql -d postgres -U gaussdb -W'Admin@123456' -h 10.4.60.183 -p15432
gsql ((GaussDB 8.2.0 build f062e27d) compiled at 2023-01-28 17:53:03 commit 3629 last mr 5138 release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
postgres=> \q
写在最后
在华为开发者空间的云主机这一强大平台上,我通过
Docker
成功部署了OpenGauss主从复制数据库。这次实践不仅让我深刻体验到了技术的可行性与高效性,更让我对云主机在提供稳定、灵活且可扩展的计算资源方面的能力赞不绝口。通过这一过程,我亲眼见证了云计算与容器化技术如何大幅提升数据库的可用性、可靠性和扩展性,同时也对华为开发者空间云主机在支持复杂数据库架构、优化性能及保障数据安全方面的卓越表现有了更深的认识。
我正在参加【有奖征集 第34期】华为开发者空间一行代码快速上云,参与视频、文章投稿赢2000元开发者礼包
链接: https://bbs.huaweicloud.com/blogs/438987
- 点赞
- 收藏
- 关注作者
评论(0)