Microsoft Lync Server
Header

En su momento había publicado un artículo sobre el licenciamiento de Lync 2010/2013​ (Licenciamiento Lync Server 2013), pero ahora necesitamos saber como asignar de que forma correcta estas licencias a los distintos usuarios. Además,  os mostaré cómo podemos revisar que usuarios tenemos habilitados en Lync y con que tipo de licencia (Standard, Enterprise o Plus)

Licencias Lync.jpg
Una vez que hemos adquirido las licencias para nuestros usuarios de Lync, debemos saber como "asignarlas", pero el problema es que no tenemos ninguna opción directa para aplicar la configuración que necesitan los usuarios. Lo que debemos hacer es habilitar a los usuarios en Lync y posteriormente configurando las distintas opciones, de tal forma que podamos ajustar las opciones disponibles de los usuarios en función de las licencias adquiridas. En el artículo que había publicado sobre las licencias de Lync 2013 (Licenciamiento Lync Server 2013),  en donde explicaba las diferencias entre los tipos de licencias disponibles para los usuarios:

  • CAL de Lync Standard (para usar mensajería instantánea y presencia)
  • CAL de Lync Enterprise (para usar audio, vídeo y conferencia web)
  • CAL de Lync Plus (para usar características de telefonía IP empresarial)

Ahora debemos saber como "asiganar" cada licencia a los usuarios que vayamos habilitando en Lync. Veamos por cada tipo de licencia que configuración debemos aplicar a cada usuarios:
  • CAL de Lync Standard (para usar mensajería instantánea y presencia)
Debemos habilitar el usuario en Lync sin más opciones, para ello podemos hacerlo mediante el Panel de Control de Lync o PowerShell y luego debemos crear una directiva de Conferencias para deshabilitar ciertas configuraciones (AllowIPAudio, AllowIPVideo, AllowUserToScheduleMeetingsWithAppSharing, EnableDataCollaboration) para que los usuarios no lo puedan utilizar.  Lo primero es habilitar al usuario en Lync, para ello tenemos el siguiente cmdlet:
 
Enable-CsUser -Identity <usuario> -RegistrarPool <fqdn-pool> -SipAddressType SamAccountName  -SipDomain dominio
 
Con este cmdlet podemos crear la directiva de Conferencia deshabilitar los servicios no disponibles para esta licencia
 
New-CsConferencingPolicy -Identity UsersCalStandard -AllowIPAudio $false -AllowIPVideo $false -AllowUserToScheduleMeetingsWithAppSharing $false -EnabeDataCollaboration $false
 
Ahora solo debemos asignarla a los usuarios los cuale solo tenemos una CAL de Lync Standard, para ello tenemos el siguiente cmdlet:
 
Grant-CsConferencingPolicy -Identity <usuario> -PolicyName UsersCalStandard
 
Con esta configuración, tendríamos los usuarios asignados a la licencia CAL de Lync Standard
  • CAL de Lync Enterprise (para usar audio, vídeo y conferencia web)
Estos usuarios son los habilitados casi por defecto, únicamente debemos configurar la directiva de Conferencia Global (o podemos crear otra) para establecer a True los servicios disponibles para esta licencia (AllowIPAudio, AllowIPVideo, AllowUserToScheduleMeetingsWithAppSharing, EnableDataCollaboration) . Lo primero será habilitar a los usuarios en Lync, aquí os dejo el cmdlet que necesitáis:
 
Enable-CsUser -Identity <usuario> -RegistrarPool <fqdn-pool> -SipAddressType SamAccountName  -SipDomain dominio
 
Y con este cmdlet podemos ver la directiva de conferencias global: Set-CsConferencingPolicy -Identity UsersCalEnterprise -AllowIPAudio $True -AllowIPVideo $True -AllowUserToScheduleMeetingsWithAppSharing $True -EnableDataCollaboration $True
 
Que_Licencias_Tienen_Mis_Usuarios_en_Lync_1.png
  • CAL de Lync Plus (para usar características de telefonía IP empresarial)
Para habilitar la licencia de CAL Plus únicamente debemos habilitar la opción Enterprise Voice, aquí tenéis el cmdlet necesario: Set-CsUser -Identity <usuario> -EnterpriseVoiceEnabled $True. Con esto ya tenemos el usuario habilitado para poder utilizar las características de telefonía IP Empresarial, de esta forma estamos consumiendo una licencia de CAL de Lync Plus.
 
Una vez que tenemos los usuarios habilitados y con sus configuraciones adicionales en función de la licencia asignada, aquí os dejo algunos cmdlets que os permitirá buscar usuarios en función del tipo de licencia:
 
Usuarios con CAL de Lync Standard: todos los usuarios que tienen la directiva de conferencias UsersCalStandard
 
Get-CsUser -Filter {ConferencingPolicy -eq "UsersCalStandard" -and EnterpriseVoiceEnabled -eq $False} | FT DisplayName
 
Usuarios con CAL de Lync Enterprise: todos los usuarios que tienen la directiva de conferencias UsersCalEnterprise
 
Get-CsUser -Filter {ConferencingPolicy -eq "UsersCalEnterprise" -and EnterpriseVoiceEnabled -eq $False} | FT DisplayName
 
Usuarios con CAL de Lync Plus: todos los usuarios que tienen habilitado su opción de EnterpriseVoice
 
Get-CsUser -Filter {EnterpriseVoiceEnabled -eq $False} | FT DisplayName
 
Usuarios con CAL de Lync Standard y Plus
 
Get-CsUser -Filter {ConferencingPolicy -eq "UsersCalStandard" -and EnterpriseVoiceEnabled -eq $True} | FT DisplayName
 
Usuarios con CAL de Lync Standard y Enterprise
 
Get-CsUser -Filter {ConferencingPolicy -eq "UsersCalEnterprise" -and EnterpriseVoiceEnabled -eq $False} | FT DisplayName
 
Usuarios con CAL de Lync Standard y Plus
 
Get-CsUser -Filter {ConferencingPolicy -eq "UsersCalStandar" -and EnterpriseVoiceEnabled -eq $True} | FT DisplayName
 
Usuarios con CAL de Lync Standard, Enterprise y  Plus
 
Get-CsUser -Filter {ConferencingPolicy -eq "UsersCalEnterprise" -and EnterpriseVoiceEnabled -eq $True} | FT DisplayName
 
Como podéis apreciar, debemos habilitar los usuarios en Lync y asignar ciertas directivas para permitir o denegar las opciones de Conferencia disponibles. Para los usuarios de las CAL Plus es simplemente habilitar la opción de EntepriseVoice en las opciones del usuario.
 
Espero que os sea de utilidad!!!!

Algo debemos tener siempre presente en cualquier infraestructura a implementar, es que debe​ estar siempre actualizada. No solo a nivel de sistema operativo, sino también de toda las herramientas que hayamos implementado, además de los servicios adyacentes a la solución. Por ejemplo, cuando implementamos Lync tenemos varios componentes que debemos mantener actualizados:

  • Sistema Operativo
  • Lync Server
  • SQL Server Express
    • Lync Server Enterprise: RTCLOCAL, LYNCLOCAL
    • Lync Serve Standard: RTCLOCAL, LYNCLOCAL, RTC

Update_SQL_2012_SP1_Lync 2013_1.png

Lo que siempre tenemos actualizado es el Sistema Operativo y el Lync Server, pero algo muy importante también es que tengamos actualizado el SQL Server Express instalado en todos los servidores de Lync …. Estas actualizaciones nos llegan por el servicio de actualizaciones local o bien mediante WSUS si lo tenemos desplegado, pero yo recomienmdo que antes de actualizar la versión de SQL Server tengamos un backup actualizado y a mano (Lync Server 2013: Backup con PowerShell) y luego nos "lanzamos" a actualizarlo. También os comento que es un paso más que trivial, pero si he visto que algunos clientes aún tienen esa actualización pendiente e imagino que será por "miedo" al que podrá pasar. La instalación como digo es trival y vosotros no tenéis nada que hacer, simplemente pulsar en Instalar en la ventana de actualizaciones y se instalará de forma automática sin vuestra intervención. Pero antes, me gustaría dejaros aquí un script de Pat Richard (MVP de Lync) que nos permite saber que versión de SQL Server tenemos instalada en nuestro servidor de Lync: getInfo-SqlServer.rargetInfo-SqlServer.rar (http://www.ehloworld.com/1697)
Update_SQL_2012_SP1_Lync 2013_4.png
 
Ahora iniciamos el proceso de instalación de la actualización y esperamos a que finalice y se reinicie el servidor
Update_SQL_2012_SP1_Lync 2013_3.png
Una vez que hemos reiniciado el servidor, volvemos a lanzar el script y podemos ver que ya se ha actualizado al SP1 del SQL Server Express 2012 del servidor
Update_SQL_2012_SP1_Lync 2013_5.png
 
Lo único que debéis tener en cuenta son dos cosas:
  • Backup actualizado: simplemente por si pasa algo muy muy raro o lo hacéis sobre una versión de Lync Standard
  • Reincio del servidor (recomendado): tendréis una ventana de corte basado en el tiempo de reinicio del servidor e inicio de los servicios de los servidores
Me repito, la actualización del SQL Server Express 2012 local es trivial, no tendréis problemas, pero nunca está de más tener el backup a mano por si pasase cualquier cosa muy muy muy rara. Pero vamos, la idea es que tengáis claro que no solo hay que actualizar el Sistema Operativo y Lync Server, sino también el resto de soluciones instaladas en el servidor/es.
Espero que os sea de utilidad!!!

Es posible que en algún momento os encontréis con que el proceso LysSvc.exe os esté consumiendo un alto % de CPU, lo que hará que el servidor se encuentre con un rendimiento muy degradado. Esto hará que el sistema se vuelva inestable y los servicios que se ejecutan sobre el servidor dejen de responder en tiempo, teniendo problemas incluso para enviar un IM a otro usuario ….

LYSS_High_CPU_Usage_1.png

El proceso LysSvc.exe se utiliza para la integración del archivado y el UCS (Unified Contact Store),  por diseño utiliza los EWS de Exchange y SQL para el almacenamiento. El problema viene dado cuando se reinicia un Front-END de forma no controlada o se han eliminado un Front-END  y se han quedado datos huérfanos. Esto puede probar que el proceso LysSvc.exe no sepa que hacer con ellos, y entra en un bucle que degradará el rendimiento de nuestro servidor. Para comprobar que eso es así, debemos analizar algunos datos desde el monitor de sistemas revisando los contadores:Current number of Storage Service stale queue items desde la opción LS:LYSS – Storage Service API. Abrimos el Monitor de Rendimiento de nuestro servidor y pulsamos en Agregar (Control + N)

 LYSS_High_CPU_Usage_4.png

Buscamos el contador LS:LYSS – Storage Service API

LYSS_High_CPU_Usage_5.png
y seleccionamos el contador LYSS – Current number of Storage Service stale queue items

LYSS_High_CPU_Usage_6.png

Ahora seleccionamos el tipo de gráfico, porque lo que queremos ver es un informe

LYSS_High_CPU_Usage_7.png

LYSS_High_CPU_Usage_8.png
Si nos encontramos valores superiores a 50.000  (este no es mi caso como se ve en el ejemplo) debemos ejecutar el siguiente comando CleanuUpStorageServiceData.exe que viene con las Resource Kit de Lync 2013 (http://technet.microsoft.com/en-us/library/jj945604.aspx) para que elimine todos los datos húerfanos del grupo de servidores y el proceso LysSvc.exe recupere la normalidad. Para ello nos vamos a la siguiente ruta: "C:\Program Files\Microsoft Lync Server 2013\ResKit\StorageService" y ejecutamos la aplicación CleanupStorageServiceData.exe desde una línea de comandos:

LYSS_High_CPU_Usage_9.png

Cuando finalice la ejecución de este proceso, el sistema volvería a la normalidad en cuestión de minutos. Pero que ocurre cuando el problema no viene dado por los valores recomenados no se superan, porque el proceso LysSvc.exe no depende de ningún servicios, simplemente se ejecuta y poco más. La única forma que yo he encontrado para detenerlo es Finalizando el proceso desde el administrador de tareas:

LYSS_High_CPU_Usage_2.png

Con esto el proceso se "recicla" y se vuelve a ejecutar con normalidad y de forma instantánea, solo tenemos que dejar abierto el Administrador de tareas y lo podemos ver en ejecución pero con un uso de CPU del 0% (entre 0% y 5% serían los valores normales)

LYSS_High_CPU_Usage_3.png
El proceso vuelve a funcionar con normalidad y el servidor recupera la estabilidad en cuestión de segundos, la solución no es muy ortodoxa pero al no depender de más servicios y dada su naturaleza no presenta problema alguno para los servicios del pararlo de tal forma. Una vez que el proceso vuelve a la ejecución (casi de forma instantánea) sus procesos vuelven a ejecutarse con total normalidad.

Espero que os sea de utilidad!!!

Como sabéis para publicar los servicios web de Lync necesitamos hacerl mediante un reverse-proxy (Lync Server: Reverse-Proxy requisito indispensable), y como la TMG 2010 Microsoft ha decidido ya hace algún tiempo no darle continuidad nos hemos tenido que ir buscando soluciones alternativas. Una de las que nos ofrece MSFT y de forma gratuita es IIS ARR, lo que nos permite de forma sencilla publicar nuestros servicios (Cómo podemos publicar nuestros servicios de Lync (Exchange, WAC, …) vía reverse-proxy (IIS ARR)), pero es posible que nos encontremos que hay usuarios con dispostivos móviles Android / iPhone que presenten problemas y cortes en sus sesiones con el siguiente mensaje: La información del servidor ha cambiado. Reinicia Lync

Your_server_configuration_has_changed_1.jpg

 Por defecto cuando publicamos los servicios para Lync via IIS ARR cambiamos el valor Proxy Timeout a 200 segundos (valor recomendado por MSFT: http://technet.microsoft.com/es-ES/library/gg429712.aspx)

Your_server_configuration_has_changed_3.jpg

Con dispositivos con iOS o Android debemos aumentar este tiempo por encima de los 900 segundos, por ejemplo 960 segundos

Your_server_configuration_has_changed_4.jpg

Por que comento que por encima de los 900 segundos, porque si abrimos el Web.config del UCWA Ext/Int (C:\Program Files\Microsoft Lync Server 2013\Web Components\Ucwa\Ext) veremos los siguientes valores por defecto:

Your_server_configuration_has_changed_6.jpg
En este caso lo normal es que no sea el Proxy quien se encargue de cerrar la conexión, de tal que forma que si el sistema lo hará por defecto en 900 segundos nosotros le demos un valor por encima del mismo. El establecerlo a 960 es porque he visto ingenieros que lo han establecido a ese valor, pero la verdad tampoco han espeficado el porqué.  Yo creo que con subirlo por encima de los 900 segundos si el problema es la desconexión por inactividad, debería quedar resuelto.

El causante de las desconexiones debería ser en este caso el IIS ARR con los valores recomendados por Microsoft, porque por ejemplo mirar lo que comentan en un KB sobre los dispositivos con Android:

On the Android device platform, the Lync application can run in the background. Therefore, unlike other mobile device platforms, push notifications are not required for Android devices. The only way to exit the Lync application on an Android device is to explicitly sign out of Lync. This version of the Lync application is not supported on devices with Tegra 2 chipsets.
 
Para dispositivos Windows Phone o IOS, mirad los tiempos de desconexión:
 
On Windows Phone, Lync signs out automatically if the user has not used the application for a period of time, as follows:
  • If the user has enabled push notifications, Lync signs out after 10 days of inactivity.
  • If the user has not enabled push notifications, Lync signs out after 1 hour.

On iPhone and iPad, Lync signs out automatically if the user has not used the application for a period of time, as follows:

  • If the mobile client has not contacted the server for 10 days due to loss of network connectivity or other issues.

Como vemos cada cliente Lync tiene su particularidad en cuanto a las desconexiones, por lo que si el problema es que se desconecta antes de completarse ese tiempo establecido, el problema está en el IIS ARR o Proxy que hayamos configurado.

Espero que os sea de utilidad!!

 

Para los usuarios de Android ya tenéis disponible la versión de Lync para tablets y nuevas mejoras muy interesantes, aquí tenéis el enlace de descarga
Lync_2013_Android_Mayo_2014_1.PNG
Aquí tenéis un enlace de Microsoft sobre los requisitos para la instalación de esta versión: http://technet.microsoft.com/en-us/library/hh690980.aspx
  • The Android device must be running Android 4.0 or a later phone- or tablet-oriented operating system, including tablets, except those with the Tegra2 chip.
  • The device must have a 1.2 GHz dual core or higher CPU.
  • The device camera (front/rear) resolution should be VGA or higher.
  • Other hardware requirements should be aligned with Android 4.0 Compatibility Definition Document.