GIS云套件

常见问题解答

  1. Oracle数据库与SuperMap iDesktop连接不上,如何解决?

    答:出现上述情况,请在Oracle中创建并使用新的数据库。具体步骤如下:

    (1)在iManager页面点击数据库->Oracle->名称(您的数据库名称)->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;
  2. 使用内置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节点。

  3. 发布地图服务后,地图显示字体为什么和制图所用字体不同?

    答:因为承载该地图服务的服务节点没有制图时使用的字体。请参照以下步骤添加字体:

    (1)点击主页导航栏文件管理,在文件管理器的system/fonts文件夹上传所需字体文件;

    (2)重新部署承载地图服务的服务节点。

  4. 在重新部署/调整规格后,又立马进行重新部署/调整规格操作,导致分配许可失败,如何解决?

    答:在重新部署/调整规格后,请确保本次操作对应的容器在许可中心中分配许可成功后,再进行下一次的重新部署/调整规格操作。

  5. 查看实时监控统计图时,图表中没有数据或数据生成的时间与实际时间不符,如何解决?

    答:查看实时监控统计图时,请确保您的本地机器与Kubernetes节点机器设置的时间一致。

  6. 使用内置环境(如内置Spark集群、Kafka集群等)时,禁用后再次开启,环境不能使用,如何解决?

    答:内置环境禁用后再次开启,服务的端口号会发生变化,请更新相关端口配置。

  7. 在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状态仍然异常,则与防火墙无关,请排查其他原因。

  8. 如何替换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)使用域名访问即可生效。

  9. 使用GIS云套件包部署的GIS云套件环境,未配置NFS Server或StorageClass,重启后数据丢失怎么办?

    答:重启后出现下述类似情况,如分布式分析服务无访问地址、内置存储资源(内置PostGIS、PostgreSQL等)无数据。请禁用环境后再次开启。

  10. 更新Gisapplication(或iPortal)镜像后,iPortal(或Gisapplication)部分功能不能正常使用,怎么办?

    答:单独更新Gisapplication(或iPortal)可能会出现配置跟代码不兼容的情况。请同时更新iPortal与Gisapplication。

  11. 当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"
    },
  12. 配置镜像拉取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”)。

  13. 如何配置服务实例自动刷新?

    答:服务实例刷新是指在数据源发生变化时,同步更新服务实例。配置自动刷新后,每隔一段时间系统会自动更新服务实例。请按以下步骤在服务节点的编排中配置自动刷新:

    (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)点击更新,等待重新部署后生效。

  14. 阿里云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>替换为您环境中的实际值。

    1. <namespace>为部署iManager(GIS云套件)时指定的命名空间名称。iManager默认命名空间为supermap,GIS云套件默认命名空间为giscloudsuite。
    2. <nodeName>为EIP绑定的work节点在Kubernetes集群中的名称。
  15. 内置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

    备注:

    1. HBase环境中的dataNode有几个副本就要创建几个PV,默认需要3个;如果自己伸缩了,请创建对应数目的PV;
    2. PV可以创建在任意Kubernetes节点上(通过修改点3指定),推荐均匀分布在不同的节点上;
    3. PV既可以在开启/伸缩HBase之前创建,也可以在开启/伸缩HBase之后创建。
  16. 在GIS云套件中使用恢复功能,成功恢复站点配置后,内置HBase、PostGIS、PostgreSQL发布的服务实例不能访问,如何解决?

    答:出现上述情况,请等待内置服务可用后,对相关的服务实例执行刷新操作。

  17. 访问容器命令行时,出现问题“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”;

    chrome91

    (3)重启浏览器。

    Chrome 80版本解决方案

    (1)打开谷歌浏览器在Chrome中访问chrome://flags;

    (2)搜索SameSite,把搜到的结果项都设置为disabled;

    chrome80

    (3)重启浏览器。

  18. 在GIS云套件文件管理中,上传超过10G的大数据文件过程中卡住,最终上传失败,如何解决?

    答:在GIS云套件文件管理需上传超过10G大数据文件时,请参照以下方法解决上述问题:

    (1)执行以下命令,获取挂载目录(下面命令中的icloud-native-<id>为GIS云套件所在的命名空间,请替换为实际的命名空间名称,其中<id>是创建GIS云套件时命名空间ID):

     kubectl -n icloud-native-<id> describe pvc pvc-gisapplication-data-<id> | grep Volume: | awk -F ' ' '{print $2}' | xargs kubectl describe pv
     查看结果,找到文件管理的挂载路径:

    getVolume

    (2)将待上传的大数据文件存放至步骤(1)查到的挂载目录中进行传输:

    storeLargefile

     最终完成上传:

    uploadLargefile

  19. 在GIS云套件文件管理中删除文件后如果有.nfs(.nfsxxxx)文件生成,删除该.nfs文件失败,如何解决?

    答:请参考以下方式删除该文件:

    (1)执行以下命令,获取该.nfs文件挂载目录(下面命令中的icloud-native-<id>为GIS云套件所在的命名空间,请替换为实际的命名空间名称,其中<id>是创建GIS云套件时命名空间ID):

     kubectl -n icloud-native-<id> describe pvc pvc-gisapplication-data-<id> | grep Volume: | awk -F ' ' '{print $2}' | xargs kubectl describe pv

    (2)执行以下命令,在挂载路径下对该.nfs文件尝试进行删除操作:

     rm -f

    (3)若执行步骤(2)删除失败,原因是有进程正在访问这个文件,不允许删除。使用lsof命令查看访问该文件的进程:

    ```sh
    lsof .nfs00000000053ab2460000001e   #需要删除的.nfs文件,请根据实际情况修改
    ```
    
     若需要root权限,执行以下命令,显示结果:
    
    ```sh
    sudo  lsof .nfs00000000053ab2460000001e
    ```

    nfsProcess

    (4)根据PID杀死访问进程,删除该.nfs文件:

    ```sh
    kill -9 13204
    ```
  20. 在GIS云套件版本升级后如果原有令牌(Token)失效,或无法访问GIS云套件界面,如何解决?

    答:请参照以下方法解决上述问题:

    重新生成token解决方案

    执行以下命令,重新生成token:

    ```sh
    kubeadm token create
    ```

    recreatetoken

    注:推荐采用此解决方案。

    配置环境变量解决方案

    (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"
    },
  21. 如果要实现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个具体参数:

     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/**"
    },
  22. 在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>为您的实际用户名,请替换。

  23. 如何重置GIS云套件管理员账户密码?

    答:在GIS云套件部署包目录下有名为reset-password.sh的文件,用来重置管理员账户,请按以下步骤重置管理员账户密码:

    (1)进入GIS云套件部署包目录(即执行GIS云套件安装命令的目录);

    (2)执行reset-password.sh脚本文件进行重置:

    chmod +x reset-password.sh && ./reset-password.sh
  24. 对某一GIS云套件文件管理的挂载目录下的数据进行拷贝,将其拷贝至另一GIS云套件文件管理的挂载目录之后,在该GIS云套件的文件管理器中无法对此数据进行复制、移动等操作,应如何解决?

    答:由于文件管理的操作权限须为“supermap:supermap”,即用户和用户组都要求为“supermap”,在对其他GIS云套件文件管理的挂载目录拷贝过来的文件或文件夹执行移动、新建文件夹等操作之前,则需将文件或文件夹所有者的操作权限修改为“supermap:supermap”。请参考以下方法修改:

    (1)执行以下命令,查看挂载目录拷贝过来的文件(夹)操作权限(命令中的<path>是该GIS云套件存放拷贝过来的文件或文件夹的路径,请替换为实际的路径,下同):

     ls -l <path>

    (2)执行以下命令,修改文件(夹)所有者的操作权限:

     sudo chown supermap:supermap -R <path>

    注意:

    1. 执行该命令前需要获得管理员权限。
    2. 如果该GIS云套件文件管理没有命名为“supermap”的用户,需要先使用以下命令:sudo useradd supermap -p <password> -U 创建新的用户。命令中的<password>是新用户密码,请替换为实际密码。此命令同样需获得管理员权限。
    3. 常见问题解答->问题18中,完成上传大文件后也需要进行上述操作。
  25. GIS云套件站点访问入口的协议切换至HTTPS协议后,在该GIS云套件的GIS门户(iPortal)环境中,已发布的服务地址仍是HTTP协议,导致其代理地址无法正常访问,应如何解决?

    答:由于在iPortal环境中,记录有服务的原始地址,且原始服务地址不会随网络协议的变更而发生变化。因此尽管GIS云套件站点访问地址的协议切换为HTTPS协议,该GIS云套件iPortal环境中原有服务的服务地址仍为HTTP协议。需要在iPortal重新发布相应服务。

    iPortal中服务发布方法请参见SuperMap iPortal帮助文档(开始 > 使用 iPortal > 增加资源 > 数据)。

  26. 在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