{"id":5174,"date":"2013-12-16T14:00:35","date_gmt":"2013-12-16T13:00:35","guid":{"rendered":"https:\/\/ingmarverheij.com\/?p=5174"},"modified":"2014-06-10T09:25:39","modified_gmt":"2014-06-10T07:25:39","slug":"res-workspace-manager-relay-server-explained-demystified","status":"publish","type":"post","link":"https:\/\/ingmarverheij.com\/en\/res-workspace-manager-relay-server-explained-demystified\/","title":{"rendered":"RES Workspace Manager Relay Server explained and demystified"},"content":{"rendered":"<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-2012-Architecture.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 5px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"RES Workspace Manager 2012 Architecture\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-2012-Architecture_thumb.png\" alt=\"RES Workspace Manager 2012 Architecture\" width=\"186\" height=\"150\" align=\"right\" border=\"0\" \/><\/a>With the <a href=\"https:\/\/ingmarverheij.com\/en\/be-aware-res-is-about-to-unleash-wm2012\/\" target=\"_blank\">release of RES Workspace Manager 2012<\/a> a new component was introduced: the Relay Server. In this article I\u2019ll explain what the Relay Server is, how it can help you in your Workspace Manager (WM) environment and reveal some of its mysteries.<\/p>\n<ul>\n<li><a href=\"#introduction\">1. Introduction<\/a><\/li>\n<li><a href=\"#usecases\">2. Use case(s<\/a>)<\/li>\n<li><a href=\"#requirements\">3. Requirements<\/a><\/li>\n<li><a href=\"#security\">4. Security<\/a><\/li>\n<li><a href=\"#installation\">5. Installation<\/a><\/li>\n<li><a href=\"#discovery\">6. Discovery<\/a><\/li>\n<li><a href=\"#sizing\">7. Sizing and performance monitoring<\/a><\/li>\n<li><a href=\"#other_facts\">8. Other facts<\/a><\/li>\n<li><a href=\"#troubleshooting\">9. Troubleshooting<\/a><\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"introduction\">1. Introduction<\/h1>\n<p>The <em>Relay Server <\/em>was introduced with RES Workspace Manager 2012 as an <strong>optional <\/strong>component. The <em>Relay Server<\/em> is an intermediate component between the <em>RES WM Agent<\/em> and the <em>Workspace Manager Datastore, <\/em>if required <em>Agents <\/em>can still connect <strong>directly <\/strong>to a <em>Datastore.<\/em> It is a Windows Service that can be installed on a Windows operating system and by default listens on <strong>TCP port 1942<\/strong> (registered at <a href=\"https:\/\/www.iana.org\/assignments\/service-names-port-numbers\/service-names-port-numbers.txt\" target=\"_blank\">IANA<\/a>), the same port that\u2019s used by the <em>RES WM Agent <\/em>(see <a href=\"#other_facts\">other facts<\/a>).<\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"introduction_is\">Intermediate storage<\/h6>\n<p>While the name suggest the <em>Relay Server <\/em>relays the traffic between a <em>RES WM Agent <\/em>and the <em>RES WM DataStore <\/em>it actually doesn\u2019t, instead it acts as intermediate storage. The <em>Relay Server <\/em>polls for changes every <em>x time <\/em>(default 5 seconds)and updates its local cache after <em>x time <\/em>(default: immediately).<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Relay-Servers1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto;\" title=\"RES Workspace Manager - Relay Servers.\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Relay-Servers._thumb.png\" alt=\"RES Workspace Manager - Relay Servers.\" width=\"554\" height=\"103\" border=\"0\" \/><\/a><\/p>\n<p>The <em>Relay Server <\/em>stores the <strong>entire RES Workspace Manger Datastore<\/strong> in its cache location: <em>%ProgramData%\\RES\\Relay Server<\/em>, this location can be changed. Since this location is on the system drive (by default) it will monitor the available free disk space to prevent resource depletion (see <a href=\"#other_facts\">other facts<\/a>).<\/p>\n<p>Just like the <em>Relay Server<\/em> the <em>RES WM Agent<\/em> will poll the <em>Relay Server<\/em> every <em>x time <\/em>(default: 5 seconds) and update its local cache after <em>x time<\/em> (default: immediately)<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Agents.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto;\" title=\"RES Workspace Manager - Agents\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Agents_thumb.png\" alt=\"RES Workspace Manager - Agents\" width=\"554\" height=\"103\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"introduction_architecture\">Architecture<\/h6>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agent-Datastore.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 5px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Agent - Datastore\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agent-Datastore_thumb.png\" alt=\"Agent - Datastore\" width=\"154\" height=\"132\" align=\"right\" border=\"0\" \/><\/a>RES Workspace Manager stores all the configuration, logging and usage tracking data in a <em>RES Workspace Manager Datastore<\/em>. This makes the Datastorea critical component in a RES Workspace Manager infrastructure. When administering RES Workspace Manager the Console <strong>always <\/strong>communicates <strong>directly <\/strong>with the Datastore, never via a Relay Server.<\/p>\n<p>By default <em>Agents <\/em>connect directly to the <em>Datastore<\/em>. This requires that the <em>Agents <\/em>are able to communicate to the Datastore, even when they are in <a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agent-Relay-Server-Datastore1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 5px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Agent - Relay Server - Datastore\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agent-Relay-Server-Datastore_thumb1.png\" alt=\"Agent - Relay Server - Datastore\" width=\"154\" height=\"215\" border=\"0\" \/><\/a>different locations. This could led to challenging situations because either the <em>Datastore<\/em> needs be replicated to multiple sites or each Agent communicates via a WAN connection to a remote <em>Datastore<\/em>.<\/p>\n<p>In a large environment the server hosting the <em>Datastore <\/em>could reach its connection limit. With each <em>Agent <\/em>having two connections (one for the configuration database and one for the logging database) a Microsoft SQL server could reach its <em>User Connection limit <\/em>of 32.767 (see <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ms143432.aspx\" target=\"_blank\">Maximum Capacity Specification for SQL Server<\/a>). When the <em>Datastore<\/em> is stored on an Oracle server this limit is \u201c100s of thousands\u201d.<\/p>\n<p>When <em>Agents<\/em> are configured to communicate with the <em>Relay Server<\/em> the number of connections to the <em>Datastore <\/em>is decreased to two per <em>Relay Server<\/em>, regardless of the number of <em>Agents. <\/em>This (of course) does not mean less license are needed, each agent still requires a license.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agent-Relay-Server-Relay-Server-Datastore.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 5px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Agent - Relay Server- Relay Server - Datastore\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agent-Relay-Server-Relay-Server-Datastore_thumb.png\" alt=\"Agent - Relay Server- Relay Server - Datastore\" width=\"154\" height=\"218\" align=\"right\" border=\"0\" \/><\/a>To prevent each <em>Agent<\/em> from communicating with the <em>Datastore <\/em>(or <em>Relay Server<\/em>) via a WAN connection a <em>Relay Server<\/em> can be placed in each remote site. With a <em>Relay Server <\/em>in a remote site only the <em>Relay Server <\/em>communicates over the WAN link, all agents can communicate via the LAN with the <em>Relay Server. <\/em>The configuration of multiple <em>Relay Servers<\/em> is straightforward, simple even. Especially when compare to configuring database clusters and it\u2019s cheaper too.<\/p>\n<p><em>Relay Servers<\/em> can retrieve the content of the <em>Datastore<\/em> also from a sibling <em>Relay Server<\/em>, it doesn\u2019t have to communicate directly with the <em>Datastore<\/em>. This makes the <em>Relay Server <\/em>architecture very flexible and scalable.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Separation of agents based on their location<\/strong>: Depending on their physical location agents could contact the nearest <em>Relay Server<\/em>. <a href=\"https:\/\/nl.linkedin.com\/in\/martinlako\" target=\"_blank\">Martin Lako<\/a> explained how this can be achieved using <em>Workspace containers<\/em> in <a href=\"https:\/\/blog.ressoftware.com\/index.php\/2012\/11\/30\/dynamic-assignment-relay-servers-for-roaming-agents\/\" target=\"_blank\">this article<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"usecases\">2. Use case(s)<\/h1>\n<p>The use of a <em>Relay Server <\/em>in <em>RES Workspace Manager <\/em>is optional and it should only be used when necessary. As a general consideration: don\u2019t overdesign your environment but keep it simple (<a href=\"https:\/\/en.wikipedia.org\/wiki\/KISS_principle\" target=\"_blank\">KISS<\/a>). There are number of use cases that could justify the use of an additional component:<\/p>\n<ul>\n<li><strong>Prevent database cluster<\/strong>: High availability and resiliency is achieved by using multiple <em>Relay Servers<\/em> which are easier to setup and do not require an expensive license.<\/li>\n<li><strong>Improve availability of the <em>Datastore <\/em>in a non-persistent environment<\/strong>: As explained <a href=\"https:\/\/ingmarverheij.com\/en\/res-workspace-manager-in-a-non-persistent-environment\/\" target=\"_blank\">here<\/a>.<\/li>\n<li><strong>No need for native database drivers on <em>Agents<\/em><\/strong><em>: <\/em>Since the communication with the <em>Datastore <\/em>is handled by the <em>Relay Server<\/em> this is the only machine that requires special drivers.<\/li>\n<li><strong>Improved security:<\/strong> Credentials used to communicate with the <em>Datastore<\/em> are not required on the <em>Agent<\/em> or during installation, instead an <a href=\"#security_ep\">environment password<\/a> is provided which does not grant access to a database server.<\/li>\n<li><strong>Less connections to your <em>RES Workspace Manager Datastore: <\/em><\/strong>For instance to overcome the user connection limit of 32.767, see <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ms143432.aspx\" target=\"_blank\">Maximum Capacity Specification for SQL Server<\/a>.<\/li>\n<li><strong>Minimize traffic for remote sites<\/strong>: Only the <em>Relay Server<\/em> communicates via the WAN instead of each <em>Agent<\/em> individually.<\/li>\n<li><strong>Simplify Windows authentication for SQL<\/strong>: Instead of granting all users \/ computers access to the RES Workspace Manager <em>Datastore<\/em> only the <em>Relay Server<\/em> needs access to the <em>Datastore,<\/em> simplifying the agent and database configuration (as suggested by <a href=\"https:\/\/uk.linkedin.com\/in\/iainbrighton\" target=\"_blank\">Iain Brighton<\/a> in the comments).<\/li>\n<\/ul>\n<p><em>If you have another use case that\u2019s missing in this list, let me know in the <strong>comments<\/strong>.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"requirements\">3. Requirements<\/h1>\n<p>The <em>Relay Server<\/em> can be installed if the following prerequisites are met: :<\/p>\n<ul>\n<li>500MB of free disk space + the size of the <em>Datastore<\/em><\/li>\n<li>Microsoft .NET Framework 4.0 (or higher)<\/li>\n<li>An <a href=\"#security_ep\">environment password<\/a> is set<\/li>\n<li>When the Relay Server communicates directly with the Datastore: The database client (or native database drivers) for the used database type.\n<ul>\n<li>When <em><a href=\"#security_dpe\">force protocol encryp<\/a>tion <\/em>is enabled the <em>Microsoft SQL Native Client <\/em>is mandatory<\/li>\n<li><a href=\"https:\/\/ingmarverheij.com\/en\/res-software-on-mysql\/\" target=\"_blank\">RES software on MySQL<\/a> (Ingmar Verheij)<\/li>\n<li><a href=\"https:\/\/www.platani.nl\/res-workspace-manager-relay-server-on-oracle-database-platform\" target=\"_blank\">RES Workspace Manager \/ Relay Server on Oracle database platform<\/a> (Wouter Arts)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>The following <strong>operating systems <\/strong>are supported:<\/p>\n<table style=\"width: 603px;\" border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"157\"><strong>Operating system<\/strong><\/td>\n<td valign=\"top\" width=\"29\"><strong>x86<\/strong><\/td>\n<td valign=\"top\" width=\"33\"><strong>x64<\/strong><\/td>\n<td valign=\"top\" width=\"382\"><strong>Note<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"156\">Windows XP<\/td>\n<td valign=\"top\" width=\"33\">X<\/td>\n<td valign=\"top\" width=\"36\">X<\/td>\n<td valign=\"top\" width=\"378\"><em>May set a maximum on the number of inbound connections<\/em><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"154\">Windows Server 2003<\/td>\n<td valign=\"top\" width=\"36\">X<\/td>\n<td valign=\"top\" width=\"39\">X<\/td>\n<td valign=\"top\" width=\"374\"><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"153\">Windows Server 2003 R2<\/td>\n<td valign=\"top\" width=\"39\">X<\/td>\n<td valign=\"top\" width=\"42\">X<\/td>\n<td valign=\"top\" width=\"370\"><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"152\">Windows Vista<\/td>\n<td valign=\"top\" width=\"41\">X<\/td>\n<td valign=\"top\" width=\"44\">X<\/td>\n<td valign=\"top\" width=\"367\"><em>May set a maximum on the number of inbound connections<\/em><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"151\">Windows Server 2008<\/td>\n<td valign=\"top\" width=\"43\">X<\/td>\n<td valign=\"top\" width=\"46\">X<\/td>\n<td valign=\"top\" width=\"365\"><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"150\">Windows 7<\/td>\n<td valign=\"top\" width=\"45\">X<\/td>\n<td valign=\"top\" width=\"47\">X<\/td>\n<td valign=\"top\" width=\"363\"><em>May set a maximum on the number of inbound connections<\/em><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"150\">Windows Server 2008 R2<\/td>\n<td valign=\"top\" width=\"46\">&#8211;<\/td>\n<td valign=\"top\" width=\"48\">X<\/td>\n<td valign=\"top\" width=\"362\"><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"149\">Windows Server 2012<\/td>\n<td valign=\"top\" width=\"47\">&#8211;<\/td>\n<td valign=\"top\" width=\"49\">X<\/td>\n<td valign=\"top\" width=\"360\"><em>Not 100% clear for Relay Server, see: <a title=\"https:\/\/www.ressoftware.com\/supported-platforms\" href=\"https:\/\/www.ressoftware.com\/supported-platforms\" target=\"_blank\">Supported Platforms<\/a><\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>It is recommended to provide the <em>Relay Server <\/em>with a <strong>static IP address<\/strong>. However DHCP can be used since DNS will provide name resolution.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"security\">4. Security<\/h1>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Security.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 5px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"RES Workspace Manager - Security\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Security_thumb.png\" alt=\"RES Workspace Manager - Security\" width=\"154\" height=\"152\" align=\"right\" border=\"0\" \/><\/a>The data that\u2019s transmitted between the <em>Agents<\/em> and the <em>Datastore <\/em>via the <em>Relay Server <\/em>contain configuration data that is potentially confidential. Some of the configuration data could contain credentials and usage tracking could contain data that should not be exposed. Altered configuration data could potentially redirect users to a compromised environment. When the risk of compromising configuration \/ usage tracking data is too high or a risk exists that configuration data is altered, data should be secured.<\/p>\n<p>By default traffic between <em>Agents <\/em>and a <em>Relay Server<\/em> is encrypted with SSL using an <em>environment password. <\/em>Optionally traffic with the <em>Datastore <\/em>can be secured with <em>database provider encryption.<\/em><\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"security_ep\">Environment password<\/h6>\n<p>The <em>Agents<\/em> communicate with the <em>Relay Server <\/em>every <em>x time <\/em>(default: 5 seconds) and polls if there are changes made in the <em>Datastore<\/em>. When updated settings are available, of when the <em>Agent <\/em>has updated <em>usage Tracking<\/em> data, the <em>Relay Server <\/em>and <em>Agent will <\/em>exchange XML files. This traffic is encrypted with SSL using an <em>environment password<\/em>.<\/p>\n<p>The environment password is a string value that needs to be provided via the <em>RES Workspace Manager Console<\/em> in the <em>Administration\\Relay Severs <\/em>section. This value needs to be provided <strong>before<\/strong> the Relay Server is <strong>configured<\/strong>.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Relay-Servers-Environment-Password1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto;\" title=\"RES Workspace Manager - Relay Servers - Environment Password\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Relay-Servers-Environment-Password_thumb1.png\" alt=\"RES Workspace Manager - Relay Servers - Environment Password\" width=\"554\" height=\"252\" border=\"0\" \/><\/a><\/p>\n<p>The <em>Agents<\/em> needs to be provided with the environment password when they are configured to communicate with the <em>Relay Server <\/em>(usually during <a href=\"#installation_unattended\">unattended<\/a> installation). When the password is changed the <em>Agents<\/em> can be updated with the new password and the old password can be kept valid for 30 days (this is optional). If the option is cleared or the 30 days are expired the password can be changed with the following command line:<\/p>\n<pre>\u201c%RESPFDIR%\\svc\\res.exe\u201d \/config<\/pre>\n<p><strong>Important:<\/strong> The environment password is not stored in plaintext but <strong>hashed(<\/strong>\u00a0and then encrypted) for <a href=\"#discovery_dhcp\">discovery via DHCP<\/a>. The encrypted+hashed environment password <strong>always <\/strong>changes, even when the same password is chosen. \u00a0Even though a different string is returned the agent is able to decode the same encryption password.<\/p>\n<p>The hashed password can be retrieved by administrators with the following command line:<\/p>\n<pre>\u201c%RESPFDIR%\\pwrtech.exe\u201d \/gethashedpassword<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"security_dpe\">Database provider encryption<\/h6>\n<p><em>\u201cEncryption is the process of obfuscating data by the use of a key or password. This can make the data useless without the corresponding decryption key or password. Encryption does not solve access control problems. However, it enhances security by limiting data loss even if access controls are bypassed. For example, if the database host computer is misconfigured and a hacker obtains sensitive data, that stolen information might be useless if it is encrypted. \u201c \u2013 <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/bb510663.aspx\" target=\"_blank\">SQL Server Encryption, Microsoft TechNet<\/a><\/em><\/p>\n<p>The <em>RES Workspace Manager Datastore<\/em> can be configured to use protocol encryption when connecting to Microsoft SQL (DBPROTOCOLENCRYPTION=yes)., When protocol encryption is enabled the communication between the <em>Datastore <\/em>and the <em>Relay Server <\/em>will be protected. The <em>Microsoft SQL Native Client<\/em> needs to be available on the <em>Relay Server <\/em>but not on the <em>Agents <\/em>(as they communicate with the <em>Relay Server <\/em>using a different protocol).<\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"security_wa\">Windows authentication<\/h6>\n<p>Microsoft is trying to get the <em>SQL Login <\/em>deprecated and force <em>Windows authentication<\/em>. Besides that Microsoft strives to get rid of <em>SQL login <\/em>the Windows authentication is more secure since it relies on tickets instead of username\/passwords.<\/p>\n<p>Dave Bryant did an excellent job describing how to set up <a href=\"https:\/\/blog.ressoftware.com\/index.php\/2013\/01\/03\/settings-up-workspace-manager-2012-with-ms-sql-windows-authentication\/\" target=\"_blank\">RES Workspace Manger 2012 with MS SQL Windows Authentication<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"installation\">5. Installation<\/h1>\n<p>The installation of a <em>Relay Server<\/em> is very straightforward (next &gt; next &gt; finish) so I won\u2019t bore you with that. What\u2019s important is that all <a href=\"#requirements\">prerequisites<\/a> are met and the <em>RES Workspace Manager Datastore <\/em>is configured.<\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"installation_unattended\">Unattended<\/h6>\n<p>Just like any other component of <em>RES Software<\/em> the <em>Relay Server <\/em>can be installed unattended. To improve the repeatability of the configuration (and because I\u2019m lazy) I try to <a href=\"https:\/\/www.ressoftware.com\/product\/res-automation-manager\" target=\"_blank\">automate<\/a> as much as possible. The Relay Server comes in two flavors:<\/p>\n<ul>\n<li><strong>32-bit systems <\/strong>&#8211; RES-WM-RelayServer(x86).msi<\/li>\n<li><strong>64-bit systems <\/strong>&#8211; RES-WM-RelayServer(x64).msi<\/li>\n<\/ul>\n<p>Depending on your processor (and OS) architecture you can choose the associated installation. The unattended installation be executed by providing a configuration file or using public properties specifying the <em>Datastore<\/em> or the parent <em>Relay Server.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Configuration file<\/span><\/p>\n<p>A configuration file is an XML file that contains connection information that was stored previously on another <em>Relay Server <\/em>installation. The configuration file is saved in the <em>RES Workspace Manager Relay Server Configuration <\/em>by pressing the <strong>Save to XML<\/strong> button. To install the <em>Relay Server <\/em>unattended using a configuration file the following argument needs to be provided:<\/p>\n<pre>msiexec \/I RES-WM-2012-RelayServer(x64).msi ConfigFile=%RESInstallFolder%\\RelayServerConfiguration.xml \/qb-<\/pre>\n<p><strong>Important: <\/strong>The configuration file needs to be stored on a <strong>local<\/strong> drive, a network drive is not supported.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Public properties<\/span><\/p>\n<p>In the <a href=\"https:\/\/tinyurl.com\/av9wzgn\" target=\"_blank\">Getting Started with RES Workspace Manager SR4 Relay Server<\/a> the following can be read:<\/p>\n<blockquote><p>\u201cUnattended installation alone will not connect the newly installed Relay Server to any RES Workspace Manager environment. To configure this connection after the unattended installation, open the Relay Server Configuration tool.\u201d,<\/p><\/blockquote>\n<p>What is a bit odd is that at the next page public properties are listed to provide the details of the <em>Datastore <\/em>or a parent <em>Relay Server. <\/em>Nonetheless, they are ignored. The only way of installing the Relay Server unattended is using the configuration file.<\/p>\n<p>&nbsp;<\/p>\n<p><em>I&#8217;ve asked RES Software to elaborate on the public properties. Once I receive an answer I will update this section.<\/em><\/p>\n<p><strong>Update<\/strong> June 10th 2014: The public properties will be removed from the documentation.<\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"installation_SQLandWA\">SQL And Windows Authentication<\/h6>\n<p>If you don\u2019t want (or can\u2019t) use a SQL login you can configure the <em>Relay Server <\/em>use Windows Authentication. Dave Bryant wrote an article at\u00a0 the RES Software Blog explaining the steps involved. You can read the article <a href=\"https:\/\/blog.ressoftware.com\/index.php\/2013\/01\/03\/settings-up-workspace-manager-2012-with-ms-sql-windows-authentication\/\" target=\"_blank\">here<\/a>.<\/p>\n<p>Using a <strong>service account<\/strong> to use Windows Authentication is optional. As an alternative you can keep the service running with the <strong>Local System Account<\/strong> (the default setting) and grant the computer account (the machine running the <em>Relay Server)<\/em> the required permissions on the database.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"discovery\">6. Discovery<\/h1>\n<p>After the Relay Server is installed and configured the RES Workspace Manager Agents needs to be configured to contact the <em>Relay Server<\/em> instead of a <em>Datastore<\/em>. The location of the <em>Relay Server<\/em> in an <em>Agent<\/em> is configured with a &#8220;discovery&#8221;.<\/p>\n<p>In the <em>RES Workspace Manager Console <\/em>in the <em>Administration &gt; Agents<\/em> section the settings of the <em>Agent<\/em> can be configured. One of the configuration settings is <strong>Datastore connection<\/strong>. This value is either <em>Connect to Datatore <\/em>or <em>Connect through Relay Server<\/em>. When the <em>Connect through Relay Server<\/em> is configured the following connection method(s) are selectable.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agent-Datastore-connection-Connect-through-Relay-Server1.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 5px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Agent - Datastore connection - Connect through Relay Server\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agent-Datastore-connection-Connect-through-Relay-Server_thumb.jpg\" alt=\"Agent - Datastore connection - Connect through Relay Server\" width=\"244\" height=\"166\" align=\"right\" border=\"0\" \/><\/a><\/p>\n<ul>\n<li>Discover (using multicast)<\/li>\n<li>Preconfigured (using list)<\/li>\n<li>Resolve (using DNS)<\/li>\n<\/ul>\n<p>There is a fourth discovery method: DHCP (available since RES Workspace Manager 2012 SR3).<\/p>\n<p>The discovery methods are executed in the same order as they are <strong>displayed<\/strong>. The selected discovery methods are tried until a successful connection is made.<\/p>\n<p>If the<em> Agent<\/em> can\u2019t connect to the provided <em>Relay Server <\/em>or the fallback (CachedDB) <em>Relay Server<\/em> it will use its local cached database (DBcache). An <em>Agent <\/em>configured with a <em>Relay Server <\/em>will never revert back to a direct <em>Datastore<\/em> connection. <strong>DHCP <\/strong>takes preference over Discover so effectively <em>Agents<\/em> discover the <em>Relay Servers<\/em> in the following order:<\/p>\n<ol>\n<li><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Agent-Discovery-decision-diagram1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 5px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"RES Workspace Manager Agent - Discovery decision diagram\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Agent-Discovery-decision-diagram_thumb1.png\" alt=\"RES Workspace Manager Agent - Discovery decision diagram\" width=\"244\" height=\"167\" align=\"right\" border=\"0\" \/><\/a>DHCP<\/li>\n<li>Discover\u00a0 (using multicast)<\/li>\n<li>Preconfigured\u00a0 (using list)<\/li>\n<li>Resolve (using DNS)<\/li>\n<li><em>Fallback (DBcache)<\/em><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"discovery_fallback\">Fallback<\/h6>\n<p>What\u2019s good to know is that once an <em>Agent<\/em> receives a <em>Relay Server <\/em>configuration &#8211; where it <strong>successfully<\/strong> can communicate with &#8211; it stores it in its local registry (as <strong>CachedDB<\/strong>) as a fallback. If the <em>Agent<\/em> receives a new <em>datastore configuration <\/em>via <strong>DHCP <\/strong>it will stop processing the list of other discovery methods. If the <em>Agent<\/em> <strong>cannot<\/strong> connect with the <em>Datastore <\/em>provided via DHCP it will revert back to the fallback (CachedDB). This means that if an <em>Agent<\/em> receives a faulty configuration via DHCP it will <strong>not<\/strong> try another <em>discovery method<\/em>. Effectively this means that all other discovery methods are skipped if a <em>datastore configuration<\/em> is received via DHCP. Keep this in mind if you want to use other <em>discovery methods<\/em> as a fallback.<\/p>\n<p><span style=\"text-decoration: underline;\">Example<br \/>\n<br clear=\"all\" \/><\/span>A customer has two datacenters with in each datacenter thousands of <em><a href=\"https:\/\/ingmarverheij.com\/en\/virtual-desktop-word-bingo-xendesktop-7\/\" target=\"_blank\">hosted private \/ shared desktops<\/a> <\/em>runningRES Workspace Manager. To avoid all <em>Agents<\/em> flooding the WAN connection contacting a <b><\/b><em>Datastore<\/em> multiple <em>Relay Servers<\/em> are placed in each datacenter (which contacts the <em>Datastore). <\/em>While the <em>Relay Servers<\/em> are available in each datacenter, the <em>Agents<\/em> have no idea which one it should contact if a list is provided (it chooses a random <em>Relay Server<\/em> from the list). So a DHCP <em>discovery method<\/em> is used to provide the <em>Agents<\/em> with the <em>Relay Servers<\/em> from the same datacenter (this implicates that each datacenter has it&#8217;s own DHCP scope).The general though was that if the <em>Relay Servers<\/em> in the first datacenter are unavailable the <em>Agents<\/em> are allowed to contact the <em>Relay Servers<\/em>in the second datacenter, as a fallback. So as a second discovery method the list is provided containing <i>all Relay Servers. <\/i><\/p>\n<p>Unfortunately (as described above) the list is never queried if a <em>Datastore configuration<\/em> is received, regardless if it can contact the <em>Datastore<\/em>.<\/p>\n<h6 id=\"discovery_dhcp\">DHCP<\/h6>\n<p>To provide a <em>Datastore configuration<\/em> to <em>Agents <\/em>via the Dynamic Host Configuration Protocol (DHCP) a vendor specific option (43) needs to be provided to the client. The DHCP option contains the <em>Datastore configuration<\/em>, the value can be retrieved from the <em>RES Workspace Manager Console <\/em>via <strong>Administration<\/strong> &gt; <strong>Relay Servers<\/strong> &gt; <strong>Settings <\/strong>&gt;<strong> Export connection string to file<\/strong><\/p>\n<p><strong><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Administration-Relay-Servers-Settings-Export-connection-string-to-file.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Administration - Relay Servers - Settings - Export connection string to file\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Administration-Relay-Servers-Settings-Export-connection-string-to-file_thumb.png\" alt=\"Administration - Relay Servers - Settings - Export connection string to file\" width=\"554\" height=\"176\" border=\"0\" \/><\/a><\/strong><\/p>\n<p>This will create a file called <strong>WMRSConn.txt <\/strong>containing a text similar like below. This is the <em>Datastore configuration<\/em> string value used in the DHCP option. You need to replace <em>relay1.example.com:2012 <\/em>and <em>relay2 <\/em>with the address of the\u00a0 <em>Relay Servers<\/em> your <em>Agents<\/em> need to contact.<\/p>\n<pre>RESWMRS=relay1.example.com:2012;relay2;61687E686D65757474737E756A6A786B69757E647A6A636563736E686F636976;z4isOSFbt+JvWADSrpR3+\/pOEyb1+fUITzs\/IMdYvn6OyO08TUEJ6nXbGQJHtDbM8C0yRVMr9TcY8EumoXuX2MHrDVx9nEyPSW8ddGXv62\/a8ZQm<\/pre>\n<p>With the string value of the <em>Datastore configuration<\/em> a DHCP option can be added to the scope. The DHCP option is a vendor specific option (43) with vendor class \u201c<strong>MSFT 5.0<\/strong>\u201d (Microsoft Windows 2000). Within the vendor specific option an option ID and value can be provided. The option ID can be chosen from <strong>212<\/strong> to <strong>219<\/strong>, the value is the <em>Datastore configuration.\u00a0 <\/em>On a Microsoft DHCP server adding the DHCP option consists of two steps:<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Step 1 \u2013 Adding\u00a0 a predefined option<\/span><\/p>\n<ul>\n<li>Log on to the DHCP server and open the <strong>DHCP <\/strong>snap-in.<\/li>\n<li>Select the DHCP server in the list and click <strong>Action <\/strong>&gt; <strong>Set Predefined Options<\/strong>.<\/li>\n<li>At <strong>Option <\/strong>class, select <strong>Microsoft Windows 2000 Options<\/strong><\/li>\n<li>Click <strong>Add <\/strong><\/li>\n<li>Give the predefined option a <strong>Name <\/strong>(for example RES Workspace Manager)<\/li>\n<li>At <strong>Data type<\/strong> , select <strong>String<\/strong>.<\/li>\n<li>At <strong>Code<\/strong> specify an <strong>option ID <\/strong>with a number in the range from 212 until 219<\/li>\n<\/ul>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Microsoft-DHCP-Predefined-Options-and-Values.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Microsoft DHCP - Predefined Options and Values\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Microsoft-DHCP-Predefined-Options-and-Values_thumb.png\" alt=\"Microsoft DHCP - Predefined Options and Values\" width=\"404\" height=\"376\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Step 2- Add DHCP option to scope<\/span><\/p>\n<ul>\n<li>Right-click the <strong>Scope Options <\/strong>node<\/li>\n<li>On the Advanced tab, select <strong>Microsoft Windows 2000 Options <\/strong>in the <strong>Vendor class <\/strong>field<\/li>\n<li>At User class, select <strong>Default User Class<\/strong><\/li>\n<li>In the Available Options area, browse to the option that you created in step 1<\/li>\n<li>In the <strong>String value<\/strong> section enter the <em>Datastore configuration<\/em> you exported from the <em>RES Workspace Manager Console<\/em><\/li>\n<\/ul>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Scope-Options-212-RES-Workspace-Manager.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Scope Options - 212 RES Workspace Manager\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Scope-Options-212-RES-Workspace-Manager_thumb.png\" alt=\"Scope Options - 212 RES Workspace Manager\" width=\"404\" height=\"448\" border=\"0\" \/><\/a><\/p>\n<p>Keep in mind that a <strong>vendor specific option <\/strong>is not the same as a <strong>DHCP option<\/strong>. If you add a <em>regular<\/em> DHCP option with ID 212 ~ 219 it will be ignored by the <em>Agent. <\/em><\/p>\n<p><em>Learn more about <strong>(Microsoft) Vendor specific DHCP options <\/strong>and how to configure it on a <strong>non-Microsoft <\/strong>DHCP server <a href=\"https:\/\/ingmarverheij.com\/en\/microsoft-vendor-specific-dhcp-options-explained-and-demystified\/\" target=\"_blank\">here<\/a>.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Troubleshooting<br \/>\n<br clear=\"all\" \/><\/span>Troubleshooting the <em>Datastore configuration <\/em>via DHCP can be cumbersome. There are tools available that can be help you (like <a href=\"https:\/\/www.wireshark.org\/\" target=\"_blank\">Wireshark<\/a>). To simplify the troubleshooting I wrote a PowerShell script that shows all DHCP options received by the client.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/ReadDhcpOptions.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"ReadDhcpOptions\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/ReadDhcpOptions_thumb.png\" alt=\"ReadDhcpOptions\" width=\"554\" height=\"130\" border=\"0\" \/><\/a><\/p>\n<p><em>Learn more about reading DHCP options and download the PowerShell script <\/em><a href=\"https:\/\/ingmarverheij.com\/en\/read-dhcp-options-received-by-the-client\/\" target=\"_blank\"><em>here<\/em><\/a><em>.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p>Optionally the <em>RES Workspace Manager Agent<\/em> can be configured to ignore DHCP information by setting the following registry key to \u201cTrue\u201d,\u201dyes\u201d or \u201c1\u201d.<\/p>\n<pre>HKEY_Local_Machine\\Software\\RES\\Workspace Manager\\DisableDHCP<\/pre>\n<p>&nbsp;<\/p>\n<p><strong><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agents-Overview-DHCP-disabled.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Agents Overview - DHCP disabled\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Agents-Overview-DHCP-disabled_thumb.png\" alt=\"Agents Overview - DHCP disabled\" width=\"554\" height=\"73\" border=\"0\" \/><\/a><\/strong><\/p>\n<p><strong>PS<\/strong>: DHCP actually provides a <em>Datastore configuration<\/em> which can contain a direct <em>Datastore connection<\/em> or a <em>Relay Server<\/em> configuration.<\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"discovery_list\">Discover\u00a0 (using multicast)<\/h6>\n<p>What\u2019s very nice about this <em>discovery method <\/em>is that\u00a0 it requires no configuration (except when routing prohibits multicast) and high availability is very easy, only active <em>Relay Servers<\/em> will respond which prevents the <em>Agent<\/em> from contacting a broken <em>Relay Server.<\/em><\/p>\n<p>When the <em>Agent <\/em>is configured to discover <em>Relay Servers<\/em> it will <strong>multicast<\/strong> via UDP on address <strong>224.1.1.60:1942<\/strong>. Just like the <em>Agent <\/em>and <em>Relay Server <\/em>port <a href=\"https:\/\/www.iana.org\/assignments\/service-names-port-numbers\/service-names-port-numbers.txt\" target=\"_blank\">1942<\/a> (registered at IANA by Bob Janssen) is used, this can\u2019t be changed. During a UDP multicast the <em>Agent <\/em>client will use source port 1942 and destination port 1942.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Discover-using-multicast-Agent.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Discover using multicast - Agent\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Discover-using-multicast-Agent_thumb.png\" alt=\"Discover using multicast - Agent\" width=\"554\" height=\"192\" border=\"0\" \/><\/a><\/p>\n<p>A <em>Relay Server<\/em> will answer using a <em>dynamic source port<\/em> and destination port 1942.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Discover-using-multicast-Relay-Server.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Discover using multicast - Relay Server\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Discover-using-multicast-Relay-Server_thumb.png\" alt=\"Discover using multicast - Relay Server\" width=\"554\" height=\"192\" border=\"0\" \/><\/a><\/p>\n<p><em>I\u2019ve been informed that the address 224.1.1.60 can be changed without notice, that\u2019s why it isn\u2019t documented (yet).<\/em><\/p>\n<p>&nbsp;<\/p>\n<h6>Preconfigured\u00a0 (using list)<\/h6>\n<p>Once the <em>Agent <\/em>receives a list of <em>Relay Server<\/em>s it will pick a <strong>random<\/strong> server from the list and try to connect. If that connection fails it will try <strong>another<\/strong> server until the list is <strong>exhausted<\/strong>.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Preconfigured-using-list.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Preconfigured using list\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Preconfigured-using-list_thumb.png\" alt=\"Preconfigured using list\" width=\"554\" height=\"226\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h6 id=\"discovery_multicast\">Resolve (using DNS)<\/h6>\n<p>The last <em>discovery method<\/em>s that\u2019s used by <em>RES Workspace Manager Agents <\/em>is resolving a <em>Relay Server <\/em>using DNS. An agent will try to contact a specific <em>Relay Server <\/em>directly. This can be a <em>Relay Server <\/em>that\u2019s used by other <em>Relay Servers<\/em> or a fallback server that normally shouldn\u2019t be contacted.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Resolve-using-DNS.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Resolve using DNS\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Resolve-using-DNS_thumb.png\" alt=\"Resolve using DNS\" width=\"554\" height=\"226\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"sizing\">7. Sizing and performance monitoring<\/h1>\n<p>Sizing a <em>Relay Server<\/em> is difficult as it highly depends on the RES Workspace Manager environment. Each environment has a different number of configuration items, amount (and type) of changes and usage tracking. Of course the <strong>interval <\/strong>at which agents <strong>polls for changes <\/strong>has a big impact on the sizing of a <em>Relay Server<\/em>.<\/p>\n<p>There are some sizing numbers available:<\/p>\n<table style=\"width: 362px;\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"199\"><strong>Poll for changes interval<\/strong><\/td>\n<td valign=\"top\" width=\"161\"><strong>Active connections<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"220\">5 seconds<\/td>\n<td valign=\"top\" width=\"169\">1000<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"225\">1 minute<\/td>\n<td valign=\"top\" width=\"172\">2400<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>The tests were performed on a Dell PowerEdge 2950 with 2 Intel Xeon 3 GHz processors and 4 GB of memory running Microsoft Windows Server 2008 R2.<\/em><\/p>\n<p>When sizing your environment it\u2019s important to monitor the performance metrics. You can use the Windows Performance Monitor to monitor your Relay Server performance. In the <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/cc749249.aspx\" target=\"_blank\">Windows Performance Monitor<\/a> the Performance object \u2013 for example <em>RES Communication Server<\/em>&#8211; can be selected, it will display the performance counters and the instances available.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Performance-Counter-Objects.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Performance Counter Objects\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Performance-Counter-Objects_thumb.png\" alt=\"Performance Counter Objects\" width=\"404\" height=\"399\" border=\"0\" \/><\/a><\/p>\n<p>Since you can run multiple <em>Relay Servers<\/em> on a single server multiple servers can be monitored as separate instances. A single <em>Relay Server<\/em> can connect to different environments, each environment is identified using a unique identifier (GUID). This GUID Is <em>also<\/em> visible in the path of the cache location.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Relay-Server-Configration-GUID.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"RES Workspace Manager Relay Server Configration - GUID\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Relay-Server-Configration-GUID_thumb.png\" alt=\"RES Workspace Manager Relay Server Configration - GUID\" width=\"554\" height=\"295\" border=\"0\" \/><\/a><\/p>\n<p>The performance object RES Communication Server provides the following counters:<\/p>\n<table style=\"width: 600px;\" border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"126\"><strong>Component<\/strong><\/td>\n<td valign=\"top\" width=\"156\"><strong>Counter name<\/strong><\/td>\n<td valign=\"top\" width=\"185\"><strong>Description<\/strong><\/td>\n<td valign=\"top\" width=\"133\"><strong><strong>Counter type<\/strong><\/strong>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><strong><em>PERF_COUNTER_\u2026<\/em><\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">RES Workspace Manager Caching<\/td>\n<td valign=\"top\" width=\"156\"># cache cycles<\/td>\n<td valign=\"top\" width=\"185\">Total number of cache cycles executed<\/td>\n<td valign=\"top\" width=\"133\">RAWCOUNT<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\">Average time in seconds per cache cycle<\/td>\n<td valign=\"top\" width=\"185\">Average duration per cache cycle execution, in seconds<\/td>\n<td valign=\"top\" width=\"133\">COUNTER<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">RES Workspace Manager Transactions<\/td>\n<td valign=\"top\" width=\"156\"># transactions processed<\/td>\n<td valign=\"top\" width=\"185\">Total number of transactions processed<\/td>\n<td valign=\"top\" width=\"133\">RAWCOUNT<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\"># transactions queued<\/td>\n<td valign=\"top\" width=\"185\">Total number of transactions queue<\/td>\n<td valign=\"top\" width=\"133\">COUNTER<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\">Average time in seconds per transaction<\/td>\n<td valign=\"top\" width=\"185\">Average duration per transaction execution, in seconds<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">RES Communication Server<\/td>\n<td valign=\"top\" width=\"156\"># bytes\/sec received<\/td>\n<td valign=\"top\" width=\"185\">Number of bytes received per second<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\"># byte\/sec send<\/td>\n<td valign=\"top\" width=\"185\">Number of bytes send per second<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\"># concurrent connections<\/td>\n<td valign=\"top\" width=\"185\">Number of concurrent connections<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\"># connections \/ sec<\/td>\n<td valign=\"top\" width=\"185\">Number of connections per second<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\"># operations \/ sec<\/td>\n<td valign=\"top\" width=\"185\">Number of operations per second<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\">Average connection time in seconds<\/td>\n<td valign=\"top\" width=\"185\">Average connection time, in seconds<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<td valign=\"top\" width=\"156\">Average operation execution time in seconds<\/td>\n<td valign=\"top\" width=\"185\">Average operation execution time, in seconds<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"126\">RES Data Access<\/td>\n<td valign=\"top\" width=\"156\"># db clients active<\/td>\n<td valign=\"top\" width=\"185\">Total number of db clients active<\/td>\n<td valign=\"top\" width=\"133\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>For more information about performance counters see the <a href=\"https:\/\/tinyurl.com\/933wob3\" target=\"_blank\">RES Workspace Manager 2012 Administration Guide<\/a>.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Performance-Counter-Example.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Performance Counter Example\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/Performance-Counter-Example_thumb.png\" alt=\"Performance Counter Example\" width=\"554\" height=\"235\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"other_facts\">8. Other facts<\/h1>\n<ul>\n<li><a href=\"https:\/\/www.iana.org\/assignments\/service-names-port-numbers\/service-names-port-numbers.txt\" target=\"_blank\">TCP port 1942<\/a> is also used by RES Workspace Manager Agent. As a result you can\u2019t run both on the same machine without changing the port number. <em>This could be applicable if the same machine is used to publish Citrix applications.<\/em><\/li>\n<li>When the cache location has less then 500MB of free space it will stop caching. When the available free space increases with 10% (550MB) it will continue. This value can be changed with the registry value <em>HKLM\\SOFTWARE\\RES\\Workspace Manager\\RelayServer\\MinimumFreeDiskSpace<\/em> (DWORD, value in MB)<\/li>\n<li>RES Workspace Manager 2012 SR2\/SR3 Agents cannot be installed unattended when <em>User Account Control<\/em> (UAC) is enabled (a fix is available <a href=\"https:\/\/ingmarverheij.com\/en\/unattended-res-wm2012-agent-does-not-store-relay-server-configuration\/\" target=\"_blank\">here<\/a>). This is solved in SR4.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"troubleshooting\">9. Troubleshooting<\/h1>\n<p>If you need to troubleshoot a <em>RES Workspace Manager Relay Server <\/em>environment a trace file can be enabled. To initiate the RES Workspace Manager Relay Server tracing, create the following registry entries in the key <em>HKEY_LOCAL_MACHINE\\SOFTWARE\\RES\\LoggingOptions<\/em><\/p>\n<p>&nbsp;<\/p>\n<table style=\"width: 595px;\" border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"118\"><strong>Value<\/strong><\/td>\n<td valign=\"top\" width=\"106\"><strong>Data<\/strong><\/td>\n<td valign=\"top\" width=\"110\"><strong>Type<\/strong><\/td>\n<td valign=\"top\" width=\"259\"><strong>Description<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"122\">Enable<\/td>\n<td valign=\"top\" width=\"105\">1 \/ 0<\/td>\n<td valign=\"top\" width=\"111\">REG_DWORD<\/td>\n<td valign=\"top\" width=\"256\">Enable \/ disable trace logging<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"125\">EnableFileLogs<\/td>\n<td valign=\"top\" width=\"104\">1 \/ 0<\/td>\n<td valign=\"top\" width=\"112\">REG_DWORD<\/td>\n<td valign=\"top\" width=\"253\">Enable \/ disable storing traces in files<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"128\">EnableMicroLogging<\/td>\n<td valign=\"top\" width=\"104\">1 \/ 0<\/td>\n<td valign=\"top\" width=\"112\">REG_DWORD<\/td>\n<td valign=\"top\" width=\"252\">Enable \/ disable detailed logging<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"130\">FileLogLocation<\/td>\n<td valign=\"top\" width=\"103\">Folder path<\/td>\n<td valign=\"top\" width=\"112\">REG_SZ<\/td>\n<td valign=\"top\" width=\"252\">The folder where the trace file is stored (don\u2019t specify the file name!)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>NOTE<\/strong>: The trace file will grow continuously, enabling trace file for a longer period is not recommended.<\/p>\n<p>Optionally it\u2019s possible to start the <em>Relay Server <\/em>interactively (showing a graphical interface) instead of as a service. This enables you to see what clients are connected and additional detailed information about the <em>Relay Server<\/em>. Starting the <em>Relay Server <\/em>interactive is done via the following command line:<\/p>\n<pre>\"%ProgramFiles%\\RES Software\\Workspace Manager\\Relay Server\\relayserver.exe\" \/interactive<\/pre>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Relay-Server-Interactive.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;\" title=\"RES Workspace Manager Relay Server - Interactive\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2013\/12\/RES-Workspace-Manager-Relay-Server-Interactive_thumb.png\" alt=\"RES Workspace Manager Relay Server - Interactive\" width=\"554\" height=\"215\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h6><\/h6>\n<h1>Resources<\/h1>\n<ul>\n<li><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ms143432.aspx\" target=\"_blank\">Maximum Capacity Specification for SQL Server<\/a><\/li>\n<li><a href=\"https:\/\/blog.ressoftware.com\/index.php\/2012\/11\/07\/design-recommendation-relay-servers\/\" target=\"_blank\">Design recommendation: Relay Servers<\/a><\/li>\n<li><a href=\"https:\/\/blog.ressoftware.com\/index.php\/2012\/11\/30\/dynamic-assignment-relay-servers-for-roaming-agents\/\" target=\"_blank\">Dynamic assignment Relay Servers for roaming Agents<\/a><\/li>\n<li><a href=\"https:\/\/blog.ressoftware.com\/index.php\/2013\/01\/03\/settings-up-workspace-manager-2012-with-ms-sql-windows-authentication\/\" target=\"_blank\">Setting up Workspace Manager 2012 with MS SQL Windows Authentication<\/a><\/li>\n<li><a href=\"https:\/\/tinyurl.com\/av9wzgn\" target=\"_blank\">Getting Started with RES Workspace Manager SR4 Relay Server<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>.<\/p>","protected":false},"excerpt":{"rendered":"<p>With the release of RES Workspace Manager 2012 a new component was introduced: the Relay Server. In this article I\u2019ll explain what the Relay Server is, how it can help you in your Workspace Manager (WM) environment and reveal some of its mysteries. 1. Introduction 2. Use case(s) 3. Requirements 4. Security 5. Installation 6. [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[571,291],"tags":[492,553,618],"class_list":["post-5174","post","type-post","status-publish","format-standard","hentry","category-demystified-other","category-workpace-manager","tag-demystified","tag-relay-server","tag-res-workspace-manager"],"_links":{"self":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/5174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/comments?post=5174"}],"version-history":[{"count":34,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/5174\/revisions"}],"predecessor-version":[{"id":6881,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/5174\/revisions\/6881"}],"wp:attachment":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/media?parent=5174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/categories?post=5174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/tags?post=5174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}