-
Notifications
You must be signed in to change notification settings - Fork 488
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
polardb shared storage file-dio:///var/polardb/shared_datadir is unavailable #503
Comments
Hi @qwe123520 ~ Thanks for opening this issue! 🎉 Please make sure you have provided enough information for subsequent discussion. We will get back to you as soon as possible. ❤️ |
错误日志如下: |
@qwe123520 What is your docker startup command? |
使用的这个镜像”polardb/polardb_pg_local_instance“,没有配置额外的启动命令。 |
@qwe123520 跟镜像没有关系,跟从镜像上启动容器的方式有关系。所以我在询问启动容器的命令是什么?用下面的命令启动容器呢? docker pull polardb/polardb_pg_local_instance
docker run -it --rm polardb/polardb_pg_local_instance psql |
docker run -d --name polardb -v /data/polardb/:/var/polardb/ polardb/polardb_pg_local_instance使用的这个命令启动的。 |
docker run -it --rm polardb/polardb_pg_local_instance psql我只要-v使用本机目录就不行 |
本机目录上 |
是的,它存在并且非空 |
需要用一个存在且空白的目录来启动容器,这样容器启动脚本发现目录为空就会在这个目录中 initdb 创建数据目录;如果启动脚本发现目录不为空,就会按启动脚本中指定好的数据目录拉起数据库,如果目录中已有内容是一些别的文件就有问题。 |
这个目录是之前启动的时候创建出来的,然后修改了postgres.conf然后就起不来了 |
@mrdrivingduck 快来回答问题啦 |
就是修改里面postgres.conf之后才会出现这样的问题 就不知道和shared_datadir 有啥关系 快出来解决问题啦~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 快快快 |
还有就是恢复之前的conf内容 都不行 就改不得 |
@qwe123520 @SamirWell
|
2024-05-22 17:56:18.943 CST [20] [20] LOG: vfs_unlink file-dio:///var/polardb/shared_datadir/polar_flog/flashback_log.history.tmp |
修改了所有目录内的conf里面 max_connections = 2000 |
其实我刚才的做法是 先 docker 初始化了数据库 没有启动 然后启动docker 是ok的, 我再次重启一下容器 就不行了额, 应该是另有原因,看着像是重新挂载方面的问题 inline int
polar_mount(void)
{
int ret = 0;
if (polar_vfs[polar_vfs_switch].vfs_mount)
ret = polar_vfs[polar_vfs_switch].vfs_mount();
if (polar_enable_io_fencing && ret == 0)
{
/* POLAR: FATAL when shared storage is unavailable, or force to write RWID. */
if (polar_shared_storage_is_available())
{
polar_hold_shared_storage(false);
POLAR_IO_FENCING_SET_STATE(polar_io_fencing_get_instance(), POLAR_IO_FENCING_WAIT);
}
else
elog(FATAL, "polardb shared storage %s is unavailable.", polar_datadir);
}
return ret;
}
inline int
polar_remount(void)
{
int ret = 0;
if (polar_vfs[polar_vfs_switch].vfs_remount)
ret = polar_vfs[polar_vfs_switch].vfs_remount();
if (polar_enable_io_fencing && ret == 0)
{
/* POLAR: FATAL when shared storage is unavailable, or force to write RWID. */
if (polar_shared_storage_is_available())
{
polar_hold_shared_storage(true);
POLAR_IO_FENCING_SET_STATE(polar_io_fencing_get_instance(), POLAR_IO_FENCING_WAIT);
}
else
elog(FATAL, "polardb shared storage %s is unavailable.", polar_datadir);
}
return ret;
}
|
@mrdrivingduck 要不你测试下场景 |
我测试了如下场景,没有发现问题: $ mkdir polardb_pg
$ docker run -it --rm \
--env POLARDB_PORT=5432 \
--env POLARDB_USER=u1 \
--env POLARDB_PASSWORD=your_password \
-v ./polardb_pg:/var/polardb \
polardb/polardb_pg_local_instance \
echo 'done'
## edit max_connections in three postgresql.conf files
$ docker run -d \
-p 54320-54322:5432-5434 \
-v ./polardb_pg:/var/polardb \
polardb/polardb_pg_local_instance
36c196cd8cb3e7b3dfcd2b9268409377462ee42caf95289080ce20f17ab45f61
$ docker exec -it 36c196cd8cb3e7b3dfcd2b9268409377462ee42caf95289080ce20f17ab45f61 bash
$ ps -ef
$ exit
$ docker stop 36c196cd8cb3e7b3dfcd2b9268409377462ee42caf95289080ce20f17ab45f61
36c196cd8cb3e7b3dfcd2b9268409377462ee42caf95289080ce20f17ab45f61
$ docker run -d \
-p 54320-54322:5432-5434 \
-v ./polardb_pg:/var/polardb \
polardb/polardb_pg_local_instance
cdbffcd6b3e6e2f55ac98ee61bfd48ac185db624f5142f3dfc7a0f920ac7a154
$ docker exec -it cdbffcd6b3e6e2f55ac98ee61bfd48ac185db624f5142f3dfc7a0f920ac7a154 bash
$ ps -ef |
可能是我在k3s上面部署的原因吗? |
需要看下在容器内能否正确访问 |
如果是k3s或者k8s这种滚动升级,存在同时挂载的时间窗, 就会挂掉是不~ 刚才又重新测试下这种 延迟重启的场景 还是挂的 o(╥﹏╥)o |
polardb_pg_local_instance 这个镜像是一个在单机运行共享存储集群的 demo,里面有个简单的 entrypoint 脚本来做管理,目的是方便快速拉起并体验。如果有外部的集群管理和存储管理,那么会和这里面运行的 entrypoint 脚本冲突。建议直接使用纯二进制镜像 polardb/polardb_pg_binary 来适配集群管理工具,这里面是没有管理脚本的。 |
最后测试重启前执行 rm -f $shared_datadir/DEATH 就好了,这样就适合在k8s/k3s上单节点部署使用了吧 |
产生这个文件说明至少有两个数据库实例在同一份数据目录上启动了。这样是有问题的。 |
Describe the problem
docker单节点启动polardb-pg修改配置文件起不来报错polardb shared storage file-dio:///var/polardb/shared_datadir is unavailable
配置文件如下:
postgresql.txt
...
The text was updated successfully, but these errors were encountered: