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.
Setting Up Your Server Cluster
- 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.
- 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.
- 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 , specify a different user account, and then restart the service.
- Make sure the following reside outside the cluster:
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.
- Install ProjectWise Integration Server on each server in the cluster.
- 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.
- On all but one of these servers, stop the service for the ProjectWise Integration Server.
- 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.
- 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
- Open the DMSKRNL.CFG file of that ProjectWise Integration Server.
- 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
- 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. - 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
- Save and close the DMSKRNL.CFG file.
- 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.
- 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.
- 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.
- (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
- Using the
DMSCFGCOPY.EXE
utility, generate a decrypted version of the
DMSKRNL.CFG
file.
- Repeat step b (and optionally step c) above for each ProjectWise Integration Server in the cluster.
- Start the services for each ProjectWise Integration Server in the cluster.
- 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.