GIS云套件
常见问题解答
-
Oracle数据库与SuperMap iDesktop连接不上,如何解决?
答:出现上述情况,请在Oracle中创建并使用新的数据库。具体步骤如下:
(1)在iManager页面点击站点管理->名称(您的Oracle数据库站点名称)->列表中的服务名称->命令行进入Oracle命令行;
(2)在目录 u01/app/oracle/oradata 下创建“supermapshapefile”文件夹,执行(如果您已有文件夹,请跳过该步骤):
mkdir -p /u01/app/oracle/oradata/supermapshapefile
(3)将“supermapshapefile”文件夹的拥有者改为oracle,执行:
chown oracle /u01/app/oracle/oradata/supermapshapefile
(4)进入Oracle,执行:
sqlplus / as sysdba
(5)输入Oracle用户密码,用户密码请在iManager页面点击站点管理->名称(您的Oracle数据库站点名称)->账户查看;
(6)创建空间表,大小为200M(可根据实际情况设置),执行:
create tablespace supermaptbs datafile '/u01/app/oracle/oradata/supermapshapefile/data.dbf' size 200M;
(7)创建空间表新用户,账号:supermapuser(可自由设置),密码:supermap123(可自由设置),执行:
create user supermapuser identified by supermap123 default tablespace supermaptbs;
(8)给新用户赋予权限,执行:
grant connect,resource to supermapuser; grant dba to supermapuser;
-
使用内置Spark集群进行分布式分析时,Spark-worker节点出现时而离线时而假死现象,怎么办?
答:在分布式分析过程中,由于资源占用较大,导致响应变慢,Spark-master节点接收不到Spark-worker节点的心跳汇报,误以为Spark-worker节点出现故障,出现上述现象。请参照以下步骤延长心跳汇报时间:
(1)点击左侧导航栏计算资源池->Spark集群->控制台->spark-master->命令行进入Spark-master容器操作界面;
(2)进入spark-env.sh文件所在目录:
cd spark/conf
(3)打开spark-env.sh文件:
vi spark-env.sh
(4)在文件内新增心跳汇报间隔时间(默认180秒,可根据需求设置,例子中为1800秒)
export SPARK_MASTER_OPTS="-Dspark.worker.timeout=1800"
(5)保存并退出spark-env.sh文件;
(6)在Spark集群控制台界面重新部署Spark-master节点与Spark-worker节点。
-
发布地图服务后,地图显示字体为什么和制图所用字体不同?
答:因为承载该地图服务的服务节点没有制图时使用的字体。请参照以下步骤添加字体:
(1)点击主页导航栏文件管理,在文件管理器的system/fonts文件夹上传所需字体文件;
(2)重新部署承载地图服务的服务节点。
-
在重新部署/调整规格后,又立马进行重新部署/调整规格操作,导致分配许可失败,如何解决?
答:在重新部署/调整规格后,请确保本次操作对应的容器在许可中心中分配许可成功后,再进行下一次的重新部署/调整规格操作。
-
查看实时监控统计图时,图表中没有数据或数据生成的时间与实际时间不符,如何解决?
答:查看实时监控统计图时,请确保您的本地机器与Kubernetes节点机器设置的时间一致。
-
使用内置环境(如内置Spark集群、Kafka集群等)时,禁用后再次开启,环境不能使用,如何解决?
答:内置环境禁用后再次开启,服务的端口号会发生变化,请更新相关端口配置。
-
在K3S环境下安装GIS云套件,进度条长时间不变,怎么办?
答:通过命令
kubectl -n kube-system get pod
查看pod状态,如果pod状态不是running或completed,可能是防火墙导致K3S集群内部不能通信。可以通过以下命令关闭防火墙:systemctl stop firewalld systemctl disable firewalld
关闭防火墙一段时间后,通过命令
kubectl get pod --all-namespaces
查看pod状态,如果pod状态仍然异常,则与防火墙无关,请排查其他原因。 -
如何替换GIS云套件自带的安全证书?
答:GIS云套件的安全证书有两种,一种是安全中心(Keycloak)使用的安全证书,另一种是访问入口域名使用的安全证书。替换时又有两种情况,一种是配置了访问入口域名或安全中心域名;一种是没有配置域名。请参照以下步骤替换两种证书:
替换安全中心(Keycloak)的安全证书——未配置域名
(1)在安装Kubernetes Master节点机器中执行以下命令,找到安全证书挂载目录(下面命令中的
icloud-native-<id>
为GIS云套件所在的命名空间,请替换为实际的命名空间名称):kubectl -n icloud-native-<id> describe pvc pvc-keycloak-certificate-<id> | grep Volume: | awk -F ' ' '{print $2}' | xargs kubectl describe pv
(2)将您的安全证书文件存放至步骤(1)查到的挂载目录中;
注意:
安全证书文件包括证书和私钥,需要将证书文件重命名为tls.crt,将私钥文件重命名为tls.key。(3)登录iManager,在GIS云套件服务列表中找到Keycloak服务并重新部署。
替换安全中心(Keycloak)的安全证书——已配置域名
(1)将安全中心域名对应的证书文件复制到Kubernetes Master节点机器;
(2)执行以下命令(命令中的
<id>
是创建GIS云套件时命名空间ID;<certificateFile>
是安全中心域名对应的证书文件;<privateFile>
是证书对应的私钥文件。均需用实际值替换):kubectl -n icloud-native-<id> delete secret keycloak-ingress-tls kubectl -n icloud-native-<id> create secret tls keycloak-ingress-tls --cert='<certificateFile>' --key='<privateFile>'
(3)访问安全中心域名即可生效。
替换访问入口的安全证书——未配置域名
(1)在安装Kubernetes Master节点机器中执行以下命令,找到安全证书挂载目录(下面命令中的
icloud-native-<id>
为GIS云套件所在的命名空间,请替换为实际的命名空间名称):kubectl -n icloud-native-<id> describe pvc pvc-gateway-certificate-<id> | grep Volume: | awk -F ' ' '{print $2}' | xargs kubectl describe pv
(2)将您的安全证书文件存放至步骤(1)查到的挂载目录中;
注意:
安全证书文件需命名为certificate.keystore。(3)执行以下命令,修改访问入口的证书配置:
kubectl -n icloud-native-<id> edit deploy iserver-gateway
在文件中找到icn_ext_param_server_ssl_keyStorePassword配置,把下方的value对应的值修改为证书密码。输入:wq退出编辑窗口,访问入口会自动重新部署。
替换访问入口的安全证书——已配置域名
(1)将访问入口域名对应的证书文件复制到Kubernetes Master节点机器;
(2)执行以下命令(命令中的
<id>
是创建GIS云套件时命名空间ID;<certificateFile>
是访问入口域名对应的证书文件;<privateFile>
是证书对应的私钥文件。均需用实际值替换):kubectl -n icloud-native-<id> delete secret gateway-ingress-tls kubectl -n icloud-native-<id> create secret tls gateway-ingress-tls --cert='<certificateFile>' --key='<privateFile>'
(3)使用域名访问即可生效。
-
使用GIS云套件包部署的GIS云套件环境,未配置NFS Server或StorageClass,重启后数据丢失怎么办?
答:重启后出现下述类似情况,如分布式分析服务无访问地址、内置存储资源(内置PostGIS、PostgreSQL等)无数据。请禁用环境后再次开启。
-
更新Gisapplication(或iPortal)镜像后,iPortal(或Gisapplication)部分功能不能正常使用,怎么办?
答:单独更新Gisapplication(或iPortal)可能会出现配置跟代码不兼容的情况。请同时更新iPortal与Gisapplication。
-
当Keycloak服务报错“io.undertow.util.ParameterLimitException: UT000047: The number of parameters exceeded the maximum of 1000”,如何解决?
答:此错误是因为您的服务实例数量过多,导致向Keycloak提交请求的表单字段超过默认最大限制1000,需提高字段上限。请参考以下步骤解决:
(1)登录Kubernetes管理页面;
(2)在您的GIS云套件命名空间中点击部署,找到keycloak;
(3)对keycloak进行编辑(打开右侧操作,点击查看/编辑 YAML);
(4)在spec->template->spec->containers->env中添加环境变量UNDERTOW_MAX_PARAMETERS,设置值大于报错中的限制值,例如:
{ "name": "UNDERTOW_MAX_PARAMETERS", "value": "1500" },
-
配置镜像拉取Secret时,如何在命名空间下创建与Secret同名资源?
答:配置镜像拉取Secret时,需在Kubernetes中GIS云套件所在命名空间创建与Secret同名的资源。如果开启metrics server服务,需在kube-system命名空间下创建Secret同名资源。请在Kubernetes Master机器中,输入如下命令创建Secret同名资源:
kubectl create secret docker-registry <image-pull-secret> --docker-server=<"172.16.17.11:5002"> --docker-username=<admin> --docker-password=<adminpassword> -n <giscloudsuite>
注意:
输入的内容中,带有尖括号”<>“的需根据您的实际环境替换(替换后去掉尖括号):
<image-pull-secret>
为您的Secret名称;<"172.16.17.11:5002">
为您的镜像仓库地址;<admin>
为镜像仓库用户名;<adminpassword>
为镜像仓库密码;<giscloudsuite>
为GIS云套件所在命名空间(在kube-system下创建Secret同名资源时,<giscloudsuite>
替换为“kube-system”)。 -
如何配置服务实例自动刷新?
答:服务实例刷新是指在数据源发生变化时,同步更新服务实例。配置自动刷新后,每隔一段时间系统会自动更新服务实例。请按以下步骤在服务节点的编排中配置自动刷新:
(1)查看服务实例所在服务节点(可在GIS云套件管理页面,点击服务管理->服务实例,进入服务实例详情页面,查看所在服务节点);
(2)登录Kubernetes管理页面,在您的GIS云套件命名空间中点击部署,找到服务节点对应的名称;
(3)对服务节点进行编辑(打开右侧操作,点击查看/编辑 YAML);
(4)在spec->template->spec->containers->env中添加环境变量REFRESH_DATASOURCE与CHECK_DATASOURCE_CONNECTION_INTERVAL。REFRESH_DATASOURCE为开启自动刷新,CHECK_DATASOURCE_CONNECTION_INTERVAL为自动刷新间隔。例如,开启自动刷新并设置刷新间隔为1小时:
{ "name": "REFRESH_DATASOURCE", "value": "true" }, { "name": "CHECK_DATASOURCE_CONNECTION_INTERVAL", "value": "3600" },
(5)点击更新,等待重新部署后生效。
-
阿里云Kubernete集群无法通过本地连接GIS云套件内置HBase,如何解决?
答:请参考以下步骤解决。
(1)确认阿里云Kubernetes集群EIP绑定的Work节点,通过以下命令确认Work节点在Kubernetes集群中的名称:
kubectl get nodes
(2)更新服务,执行以下命令:
kubectl -n <namespace> patch deployment/nginx-ingress-controller -p " apiVersion: apps/v1 kind: Deployment metadata: name: nginx-ingress-controller spec: template: spec: nodeName: <nodeName> "
(3)等待服务启动。
注意:
请将步骤(2)中的<namespace>
和<nodeName>
替换为您环境中的实际值。<namespace>
为部署iManager(GIS云套件)时指定的命名空间名称。iManager默认命名空间为supermap,GIS云套件默认命名空间为giscloudsuite。<nodeName>
为EIP绑定的work节点在Kubernetes集群中的名称。
-
内置HBase环境如何使用本地存储?
答:经测试,挂载NFS会影响Hbase的读写性能,可以通过以下方式进行优化:
(1)修改配置(values.yaml)文件中deploy_disable_hbase_nfs_volume的值为true
deploy_disable_hbase_nfs_volume: true
(2)根据编排创建PV:参考 hbase-datanode-local-volume.yaml 文件,根据实际情况进行修改:
apiVersion: v1 kind: PersistentVolume metadata: labels: type: icloud-native name: icloud-native-hbase-datanode-volume-0 #修改点1 spec: storageClassName: local-volume-storage-class capacity: storage: 10Ti accessModes: - ReadWriteMany local: path: /opt/imanager-data/datanode-data #修改点2 persistentVolumeReclaimPolicy: Delete nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node1 # 修改点3
需要修改的内容涉及上图中标记处的3个地方:
- 修改点1:这里指定PV的名称,只要不重复即可。
-
修改点2:这里是实际要存储HBase数据的路径,要提前创建好目录。如果想在一个节点上创建多个PV请修改成不同的目录,并提前创建好目录。
使用以下命令在对应节点上创建目录(路径换成自己设置的具体地址):
mkdir -p /opt/imanager-data/datanode-data
- 修改点3:这里填写Kubernetes的节点名称(前提是相应的节点能参与调度)
(3)修改后通过编排创建PV(在Kubernetes master节点执行以下命令):
kubectl apply -f hbase-datanode-local-volume.yaml
备注:
- HBase环境中的dataNode有几个副本就要创建几个PV,默认需要3个;如果自己伸缩了,请创建对应数目的PV;
- PV可以创建在任意Kubernetes节点上(通过
修改点3
指定),推荐均匀分布在不同的节点上; - PV既可以在开启/伸缩HBase之前创建,也可以在开启/伸缩HBase之后创建。
-
在GIS云套件中使用恢复功能,成功恢复站点配置后,内置HBase、PostGIS、PostgreSQL发布的服务实例不能访问,如何解决?
答:出现上述情况,请等待内置服务可用后,对相关的服务实例执行刷新操作。
-
访问容器命令行时,出现问题“from origin ‘http://{ip}:{port}/’ has been blocked by CORS Policy: NO ‘Access-Control-Allow-Origin ‘ header is present not the request resource.”,如何解决?
答:请参照以下方法解决上述问题:
Chrome 91版本解决方案
(1)关闭浏览器;
(2)打开Chrome快捷方式的属性,在“目标”文本框内容的最后先敲几个空格然后粘贴下面的内容“—disable-features=SameSiteByDefaultCookies”或者 “—flag-switches-begin —disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure —flag-switches-end”;
(3)重启浏览器。
Chrome 80版本解决方案
(1)打开谷歌浏览器在Chrome中访问chrome://flags;
(2)搜索SameSite,把搜到的结果项都设置为disabled;
(3)重启浏览器。
-
在GIS云套件文件管理中,上传超过10G的大数据文件过程中卡住,最终上传失败,如何解决?
答:在GIS云套件文件管理需上传超过10G大数据文件时,请参照以下方法解决上述问题:
(1)执行以下命令,获取挂载目录(下面命令中的
icloud-native-<id>
为GIS云套件所在的命名空间,请替换为实际的命名空间名称,其中<id>
是创建GIS云套件时命名空间ID):```sh kubectl -n icloud-native-<id> describe pvc pvc-gisapplication-data-<id> | grep Volume: | awk -F ' ' '{print $2}' | xargs kubectl describe pv ``` 查看结果,找到文件管理的挂载路径:
(2)将待上传的大数据文件存放至步骤(1)查到的挂载目录中进行传输:
最终完成上传:
-
在GIS云套件文件管理中删除文件后如果有.nfs(.nfsxxxx)文件生成,删除该.nfs文件失败,如何解决?
答:请参考以下方式删除该文件:
(1)执行以下命令,获取该.nfs文件挂载目录(下面命令中的
icloud-native-<id>
为GIS云套件所在的命名空间,请替换为实际的命名空间名称,其中<id>
是创建GIS云套件时命名空间ID):```sh kubectl -n icloud-native-<id> describe pvc pvc-gisapplication-data-<id> | grep Volume: | awk -F ' ' '{print $2}' | xargs kubectl describe pv ```
(2)执行以下命令,在挂载路径下对该.nfs文件尝试进行删除操作:
```sh rm -f ```
(3)若执行步骤(2)删除失败,原因是有进程正在访问这个文件,不允许删除。使用lsof命令查看访问该文件的进程:
```sh lsof .nfs00000000053ab2460000001e #需要删除的.nfs文件,请根据实际情况修改 ``` 若需要root权限,执行以下命令,显示结果: ```sh sudo lsof .nfs00000000053ab2460000001e ```
(4)根据PID杀死访问进程,删除该.nfs文件:
```sh kill -9 13204 ```
-
在GIS云套件版本升级后如果原有令牌(Token)失效,或无法访问GIS云套件界面,如何解决?
答:请参照以下方法解决上述问题:
重新生成token解决方案
执行以下命令,重新生成token:
```sh kubeadm token create ```
注:推荐采用此解决方案。
配置环境变量解决方案
(1)登录Kubernetes管理页面;
(2)在您的GIS云套件命名空间中点击部署,分别找到common-dashboard-api和keycloak;
(3)对common-dashboard-api和keycloak分别进行编辑(打开右侧操作,点击查看/编辑 YAML);
(4)在spec->template->spec->containers->env中添加环境变量CIPHER_ALGORITHM,设置值为AES/CBC/PKCS5Padding:
{ "name": "CIPHER_ALGORITHM", "value": "AES/CBC/PKCS5Padding" },
-
如果要实现GIS云套件跨域,应如何配置?
答:请参照以下方法进行GIS云套件的跨域配置:
(1)登录Kubernetes管理页面;
(2)在您的GIS云套件命名空间中点击部署,分别找到ispeco-dashboard-api和iserver-gateway;
(3)对ispeco-dashboard-api和iserver-gateway分别进行编辑(打开右侧操作,点击查看/编辑 YAML),定位至spec->template->spec->containers->env;
(4)添加环境变量DISABLE_DEFAULT_CORS_CONFIG,用于禁用跨域配置,设置值为true或false。值为true时禁用跨域配置,在访问URL时将存在跨域拦截;值为false时开启跨域配置,默认开启。示例如下:
{ "name": "DISABLE_DEFAULT_CORS_CONFIG", "value": "false" },
(5)添加环境变量CORS_CORSFILTER_INITPARAMS,为跨域配置参数,包含以下4个具体参数:
```sh Access-Control-Allow-Origin #允许跨域的域名 Access-Control-Allow-Methods #允许的请求方法,GET,POST,PUT,DELETE,OPTIONS,HEAD Access-Control-Allow-Headers #允许的请求头 Access-Control-Allow-Credentials #是否带上cookie信息,true或false ```
注意:设置时,相邻配置参数之间以分号“;”分隔。
示例如下:
{ "name": "CORS_CORSFILTER_INITPARAMS", "value": "Access-Control-Allow-Origin=http://www.baidu.com;Access-Control-Allow-Methods=GET,POST,PUT,DELETE,OPTIONS,HEAD;Access-Control-Allow-Headers=*;Access-Control-Allow-Credentials=true" },
(6)添加环境变量CORS_URL_PATTERNS,为存在的跨域拦截设置URL路径进行匹配,允许设置多个URL路径。默认应用到所有URL。
注意:设置多个URL路径时,相邻URL路径之间以逗号“,”分隔。
示例如下:
{ "name": "CORS_URL_PATTERNS", "value": "/token,/iserver/services/**" },
-
在Kubernetes环境下安装部署GIS云套件时,执行“./startup.sh”命令如果出现报错:The connection to the server localhost:8080 was refused - did you specify the right host or port? Error: Kubernetes cluster unreachable,如何解决?
答:有两种解决方案可解决上述问题,请在以下方法中任选一种:
切换为root用户解决方案
切换至root用户后,重新执行以下命令:
```sh sudo ./startup.sh ```
增加kubectl使用权限解决方案
在服务器任一目录下,执行以下命令:
```sh mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.kubeconf $HOME/.kube/config sudo chown userName:userName $HOME/.kube/config ```
备注:
命令中的
<userName>
为您的实际用户名,请替换。 -
如何重置GIS云套件管理员账户密码?
答:在GIS云套件部署包目录下有名为reset-password.sh的文件,用来重置管理员账户,请按以下步骤重置管理员账户密码:
(1)进入GIS云套件部署包目录(即执行GIS云套件安装命令的目录);
(2)执行reset-password.sh脚本文件进行重置:
chmod +x reset-password.sh && ./reset-password.sh
-
对某一GIS云套件文件管理的挂载目录下的数据进行拷贝,将其拷贝至另一GIS云套件文件管理的挂载目录之后,在该GIS云套件的文件管理器中无法对此数据进行复制、移动等操作,应如何解决?
答:由于文件管理的操作权限须为“supermap:supermap”,即用户和用户组都要求为“supermap”,在对其他GIS云套件文件管理的挂载目录拷贝过来的文件或文件夹执行移动、新建文件夹等操作之前,则需将文件或文件夹所有者的操作权限修改为“supermap:supermap”。请参考以下方法修改:
(1)执行以下命令,查看挂载目录拷贝过来的文件(夹)操作权限(命令中的
<path>
是该GIS云套件存放拷贝过来的文件或文件夹的路径,请替换为实际的路径,下同):```sh ls -l <path> ```
(2)执行以下命令,修改文件(夹)所有者的操作权限:
```sh sudo chown supermap:supermap -R <path> ```
注意:
- 执行该命令前需要获得管理员权限。
- 如果该GIS云套件文件管理没有命名为“supermap”的用户,需要先使用以下命令:sudo useradd supermap -p
<password>
-U 创建新的用户。命令中的<password>
是新用户密码,请替换为实际密码。此命令同样需获得管理员权限。 - 常见问题解答->问题18中,完成上传大文件后也需要进行上述操作。
-
GIS云套件站点访问入口的协议切换至HTTPS协议后,在该GIS云套件的GIS门户(iPortal)环境中,已发布的服务地址仍是HTTP协议,导致其代理地址无法正常访问,应如何解决?
答:由于在iPortal环境中,记录有服务的原始地址,且原始服务地址不会随网络协议的变更而发生变化。因此尽管GIS云套件站点访问地址的协议切换为HTTPS协议,该GIS云套件iPortal环境中原有服务的服务地址仍为HTTP协议。需要在iPortal重新发布相应服务。
iPortal中服务发布方法请参见SuperMap iPortal帮助文档(开始 > 使用 iPortal > 增加资源 > 数据)。
-
在Kubernetes环境下安装部署GIS云套件时,期望将iPortal数据库设置为PostgreSQL,修改values.yaml中对应的配置项后仍不生效,应如何解决?
答:由于iPortal监控数据库暂不支持PostgreSQL类型,因此需要在从MySQL数据库切换到PostgreSQL数据库之前,前往iPortal挂载路径,修改 iPortal\webapps\iportal\WEB-INF路径下的iportal-monitor.xml文件,将对应参数值做如下修改即可:
<dbType>SQLITE</dbType> # 修改点1 <driverClass>org.sqlite.JDBC</driverClass> # 修改点2 <jdbcUrl>jdbc:sqlite:./WEB-INF/iportaldata/monitor.db</jdbcUrl> # 修改点3 <maxPoolSize>1</maxPoolSize> # 修改点4 <initialPoolSize>1</initialPoolSize> # 修改点5 <minPoolSize>0</minPoolSize> # 修改点6 <maxIdleTime>3000</maxIdleTime> # 修改点7 <maxWait>30000</maxWait> # 修改点8 <username></username> # 修改点9 <password></password> # 修改点10
-
在云套件中,服务节点应如何开启防止SQL注入攻击的配置?
答:支持在服务节点对应的配置文件中开启防止SQL注入,具体请前往iManager站点管理>GIS云套件站点,在服务列表中找到需要开启防止SQL注入的服务节点,在右侧的操作项中点击”编辑“,修改对应参数即可,相关参数说明如下:
ENABLE_SQL_FILTER #是否开启SQL注入检测,默认为false QUERY_FILTER_ENABLED #设置是否启用SQL查询过滤,默认为false。启用后,将默认禁用常量表达式、常量等价表达式、常量IN表达式、常量恒成立表达式等四类表达式,另外还将默认禁用部分威胁字符,禁用的字符包括exec、insert、delete、update、join、union、master、truncate。除以上默认禁用的表达式和字符串外,您也可以通过 QUERY_FILTER_STRING参数设置其他需要在SQL查询中禁用的字符串。 QUERY_FILTER_STRING #设置SQL查询过滤的字符串,支持任意字符串(数据操作语言(DML)、表达式、通配符、特殊字符等),以分号隔开,如:设置 <QUERY_FILTER_STRING>delete;SMID=.</QUERY_FILTER_STRING> 。用户在进行data或map的SQL查询时,如果在SQL查询表达式中出现了 ‘delete或 SMID=任意值’ 字符串,系统会默认该条查询表达式非法并返回400参数异常,防止执行恶意的 SQL 命令,从而保护用户的数据安全。如果没有设置SQL查询过滤的字符串,在SQL查询表达式中系统会默认屏蔽掉分号。