ProjectWise Implementation

Setting Up ProjectWise Servers in a Clustered Environment

ProjectWise Integration Server supports clustering and load balancing features of Windows Server. This section discusses the basic configuration of ProjectWise Integration Server in a clustered environment. It is recommended that you consult Bentley Professional Services for assistance with setting this up in production.

Note: ProjectWise User Synchronization Service, and the Automated File Processing features of the ProjectWise Integration Server are NOT cluster-aware and therefore will not fail over if the server they are installed on fails. These services can be installed on servers in a cluster, however in the event of a failure manual steps must be taken to ensure they continue to function correctly.

Setting Up Your Server Cluster

  1. Before installing any ProjectWise software, you must first set up your cluster. This involves creating the cluster, and then specifying each server that will be a part of the cluster. See Microsoft documentation for details on this configuration. When ProjectWise clients need to connect to the ProjectWise Integration Server, they point to the name of the cluster, which will then decide which ProjectWise Integration Server will handle the request.
  2. Once your basic cluster is configured, the next step is to set up a database to host the ProjectWise database. Follow your normal database setup procedures, noting that the database server must reside outside the cluster. Once the database is set up, on each ProjectWise Integration Server computer in the cluster you must create an ODBC datasource that points to the database. All of the ODBC datasources must have the same name.
  3. Next you need to decide how you will store your files. Your storage area must reside outside the cluster. You can either host the storage area on a ProjectWise Caching Server outside the cluster, or you can provision shared storage outside the cluster such that all servers in the cluster can access it. Examples of shared storage include SAN (Storage Area Network), NAS (Network Attached Storage), or SMB Share. If you use shared storage, the service for ProjectWise Integration Server must be running as a user who has rights to the shared storage location, and who has the Log on as a service right on the local server (Control Panel > Administrative Tools > Local Security Policy > Security Settings > Local Policies > User Rights Assignments). Make sure this is set before you create any datasources. If you need to change the user that the service runs under, right-click 'ProjectWise Integration Server' in the Services window and select Properties > Log On > This Account, specify a different user account, and then restart the service.
  4. Make sure the following reside outside the cluster:
    • the ProjectWise database
    • the full text index catalog (if full text indexing is used)
    • ProjectWise Caching Server

Configuring a Datasource To Be Used in a Clustered Environment

Once you set up the cluster, the next step is to install ProjectWise Integration Server on each server in the cluster. All installation paths and other details must be the same on each server. After installation, you will create a datasource on one server, modify the DMSKRNL.CFG file as described, and then copy the DMSKRNL.CFG file to each ProjectWise Integration Server in the cluster.

  1. Install ProjectWise Integration Server on each server in the cluster.
  2. If you are using shared storage for your storage area, make sure the service for ProjectWise Integration Server is running as a user who has access to the shared storage location, and who has the Log on as a service right on the local server (Control Panel > Administrative Tools > Local Security Policy > Security Settings > Local Policies > User Rights Assignments). This change must be made on each server in the cluster. Restart the service for each ProjectWise Integration Server after you make your changes.
  3. On all but one of these servers, stop the service for the ProjectWise Integration Server.
  4. On the server where the service is still running, install ProjectWise Administrator and use it to create your datasource.

    When you create your datasource and you get to the Create Administrator and Storage dialog, the storage area node (Host field) defaults to the ProjectWise Integration Server computer on which you are working.

  5. If you are using a ProjectWise Caching Server outside the cluster, set the Host field to the server name on which the ProjectWise Caching Server is installed, and in the Path field specify the storage area’s folder path on that server.

    or

    If you are using shared storage, leave the Host field as is (pointing to the local server) for now (note that you will have to change it later to the hostname of the cluster), and in the Path field specify the address of the shared storage location. For example: \\sharedstorage\pw_storage

  6. Open the DMSKRNL.CFG file of that ProjectWise Integration Server.
  7. Uncomment the ServerName and ServerIPAddress properties and set their values to the cluster’s name and IP address, respectively.

    For example:

    ServerName=mycluster.mydomain.com
    ServerIPAddress=192.168.1.10
    Note: The ServerIPAddress property can also be set to the external host name (fully qualified domain name (FQDN)) if needed.
  8. If you want ProjectWise to only respond to requests that come in on the cluster network interface, uncomment the BindAddress properties under the [Broadcast] and [Listener] sections and set their value to the cluster's IP address. For example:
    [Broadcast]
    ...
    BindAddress=192.168.1.10 (cluster IP address)
    ...
    [Listener]
    ...
    BindAddress=192.168.1.10 (cluster IP address)
    Note: This causes the service for the ProjectWise Integration Server to attach to this address on startup. If this address is not assigned to an NIC on the server the service will fail to start. Do not set the BindAddress if you want ProjectWise to respond to requests on more than one adapter / IP address, or if you are configuring ProjectWise with a hardware load balancer.
  9. Add an entry in the Server Name Resolution section with the formatting, "cluster IP address = cluster name".

    For example:

    [ServerNameResolution]
    192.168.1.10=mycluster.mydomain.com
  10. Save and close the DMSKRNL.CFG file.
  11. At this point you need to run the DMSCFGCOPY.EXE utility (available in the ProjectWise Server install directory) to copy the DMSKRNL.CFG file from one server to another.
    The reason you need to run this utility, and the reason you cannot just manually copy the DMSKRNL.CFG file, is because the encrypted items in the DMSKRNL.CFG file will not be correctly copied over. Only using the utility correctly copies the encrypted items.

    Make sure you run the utility using the same account that the ProjectWise Integration Server service is running under.

    1. Using the DMSCFGCOPY.EXE utility, generate a decrypted version of the DMSKRNL.CFG file.

      Use the runas command to ensure that the utility runs under the same account as the ProjectWise Integration Server service.

      For example:

      runas /user:Bentley\PW-Service-Account "\"c:\Program Files\Bentley\ProjectWise\bin\dmscfgcopy.exe\" -dec \"c:\Program Files\Bentley\ProjectWise\bin\dmskrnl.cfg\" c:\temp\dmskrnl_decrypted.cfg"

      Check the output of the utility for possible error messages. More detailed error messages can be found in C:\Users\Public\Bentley\Logs\dmskrnl.log.

    2. Copy the DMSKRNL_DECRYPTED.CFG file that was generated in step a to another server in the cluster and merge it into the original DMSKRNL.CFG file on that server.

      Use the -pre option to keep the original content of the delivered DMSKRNL.CFG file (this preserves the comments inside the original file).

      For example:

      runas /user:Bentley\PW-Service-Account "\"c:\Program Files\Bentley\ProjectWise\bin\dmscfgcopy.exe\" -enc -pre c:\temp\dmskrnl_decrypted.cfg \"c:\Program Files\Bentley\ProjectWise\bin\dmskrnl.cfg\""

      Check the output of the utility for possible error messages.

    3. (Optional) Using the DMSCFGCOPY.EXE utility, decrypt the newly encrypted DMSKRNL.CFG file and compare it to the original decrypted file, to make sure all of the original files contain the same tokens.

      For example:

      runas /user:Bentley\PW-Service-Account "\"c:\Program Files\Bentley\ProjectWise\bin\dmscfgcopy.exe\" -dec \"c:\Program Files\Bentley\ProjectWise\bin\dmskrnl.cfg\" c:\temp\dmskrnl_decrypted_test.cfg"
      fc c:\temp\dmskrnl_plain.cfg c:\temp\dmskrnl_plain_copy.cfg
  12. Repeat step b (and optionally step c) above for each ProjectWise Integration Server in the cluster.
  13. Start the services for each ProjectWise Integration Server in the cluster.
  14. If using shared storage, log in to ProjectWise Administrator, select the Storage areas datasource node, right-click the storage area that was just created and select Properties. In the Computer name or IP address field, enter the cluster name and click OK.