IBM Connections Administration

Christoph Stoettner

+49 173 8588719

christoph.stoettner@panagenda.com

Christoph Stoettner

  • Senior Consultant bei panagenda

    • IBM Domino seit 1999

    • IBM Connections seit 2009

  • Schwerpunkt

    • Migrationen, Installationen

    • Performance Analysen

  • Focus auf

    • Monitoring, Security

    • panagenda ConnectionsExpert

Agenda

  • Admin Schnittstellen

  • Daily Jobs

  • Wöchentliche Maintenance

  • Rechteverwaltung

  • Backup & Restore

  • Component Pack

  • Troubleshooting

  • 3rd Party Tools

Administrative Schnittstellen

Integrated Solution Console - ISC

isc welcome
Mit Google Chrome Probleme bei manchen Eingabefeldern.

Integrated Solution Console - ISC (2)

  • Sehr lange Klickpfade / verschachtelt

  • Änderungen werden zuerst temporär gespeichert

isc save
  • Vor dem Speichern Überprüfung möglich

isc review

Integrated Solution Console - ISC (3)

  • Speichern: Änderungen werden in DMGR Masterkonfiguration übernommen

    • Konfiguration der Nodes muss anschliessend synchronisiert werden

  • System Administration ▸ Nodes

    • Node(s) markieren und "Full Synchronize"

isc fullsynchronize

Integrated Solution Console - ISC (4)

  • Oder automatische Synchronisation aktivieren

    • System Administration ▸ Console Preferences

    • "Synchronize changes with Nodes" aktivieren

isc synchronizewithnode isc synchronizewithnode2

Integrated Solution Console - ISC (5)

  • Bei mehreren WebSphere Umgebungen

    • Console Identity setzen

    • System Administration - Console Identity

isc console1
isc console3

wsadmin.bat|sh

  • Kommandozeilen Tool für die WebSphere Application Server Administration

  • Unterstützt zwei Programmiersprachen

    • JACL

      • eigentlich überholt

      • manche Kommandos sind aber nur in JACL abgebildet (SPNEGO Konfiguration)

    • Jython

      • Python Implementierung unter Java

      • kann also von Java aufgerufen werden und Java Kommandos ausführen

wsadmin.bat|sh - Remote

wsadmin unterstützt zwei Modi "remote" und "local"
  • Gleichzeitig Änderung von verschiedenen Clients möglich

wsadmin.sh|bat -conntype SOAP \
               -lang jython|JACL \  (1)
               -host host_name  \   (2)
               -user wasadmin \
               -password password \
               -port port_number    (3)
1Jython oder JACL
2host_name - DMGR-Hostname
3port_name - Default: 8879

wsadmin.bat|sh - Credentials

  • soap.client.properties

com.ibm.SOAP.loginUserid=
com.ibm.SOAP.loginPassword=
  • Passwort mit PropFilePasswordEncoder hashen

/opt/IBM/WebSphere/AppServer/bin/PropFilePasswordEncoder.sh \
    /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/properties/soap.client.props \
    com.ibm.SOAP.loginPassword

Passwort ist nur gehasht und kann zurückberechnet werden. Das Kennwort ist aber an mehreren Stellen im Config-Ordner auf gleiche Art gehasht gespeichert.

wsadmin.bat|sh - Conntype NONE

  • Funktioniert auch wenn WebSphere nicht gestartet

  • Oft letzte Rettung bei Anmeldeproblemen

  • Immer im Dmgr-Profil\bin ausführen

cd /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin
./wsadmin.sh -conntype NONE
cd D:\IBM\WebSphere\AppServer\profiles\Dmgr01\bin
wsadmin.bat -conntype NONE
Security deaktivieren (innerhalb wsadmin)
wsadmin> securityoff
wsadmin> exit

wsadmin - Connections Admin Kommandos

  • Jedes Modul hat ein eigenes Skript mit Bibliotheken

  • laden mit:

execfile('connectionsConfig.py')
execfile('<modul>Admin.py') (1)
1<modul>: activities, blogs, communities, dogear, files, forums, gadgets, homepage,
metrics, mobile, news, oauth, profiles, search oder wikis
Beispiel
execfile("searchAdmin.py")
SearchService.addBackupIndexTask("WeeklIndexBackup", "0 0 2 ? * SAT", "0 10 2 ? * SAT")
SearchService.refreshTasks()

DB2 Data Studio

  • nach DB2 V9.7 kein Command Center mehr mitinstalliert

    • alte Version funktioniert noch, aber Probleme mit Binary Feldern

  • Überprüfung der Datenbanken nur über Konsole

db2 connect to peopledb
db2 select * from empinst.employee
  • Zusätzlichen Client installieren

    • DB2 Data Studio 4.1.1.0

    • JDBC Client (z.B. DBeaver, DBVisualizer, squirrelSQL, …​)

  • Connections Datenbanken sind nicht dokumentiert!

Direkte Änderungen in Datenbanken sind nicht supportet!

Browser

  • Einige Module haben mit entsprechenden Rechten eine Administrationsschnittstelle

  • Security Rolle Admin der jeweiligen Applikation muss geändert werden

Änderung startet automatisch die Applikation neu!

Security role to user/group mapping

  • Admin Rolle zuordnen

    • Applications ▸ Application Types ▸ WebSphere Enterprise Applications ▸ ApplikationsnameSecurity role to user/group mapping

homepage adminrole
  • Gruppe oder einzelne Benutzer hinzufügen

Homepage Administration

homepage adminpage
Admin-Rolle in Homepage
  1. "My Page" deaktivieren

  2. Widget Cache leeren

  3. Widgets registrieren

Alternativ mit wsadmin

Search Administration

Admin-Rolle in Search
search serverStatus

Communities Administration

Admin-Rolle in Communities
  1. Hinzufügen von Quickr Places

  2. Steuerung des Crawler

  3. Anzahl Communities im Community Catalog

sncomm admin

Blogs Administration

Admin-Rolle in Blogs
  • Konfiguration der Blogs Einstellungen

  • einziges Modul das Konfiguration in DB speichert

blogs admin
blogs admin2

Connections Gatekeeper (1)

Admin-Rolle in Common
gatekeeper1

Connections Gatekeeper (2)

gatekeeper2
Änderungen im Gatekeeper sind nicht supportet!

Admin Rolle in Common

{"admin":"true"}
{"admin":"false"}

Connections Einstellungen (XML)

  • Konfiguration erfolgt in XML-Dateien

    • dmgr-Profil/config/Zelle/LotusConnections-Config

Nicht direkt editieren!
  • Besser über wsadmin aus- und einchecken

wsadmin.sh -lang jython
execfile("connectionsConfig.py")
LCConfigService.checkOutConfig("/tmp", AdminControl.getCell())
  • wsadmin Session geöffnet lassen

  • /tmp/LotusConnections-config.xml editieren/speichern

LCConfigService.checkInConfig("/tmp", AdminControl.getCell())

wsadmin checkIn|checkOut

  • Beim checkIn erfolgt Syntaxüberprüfung gegen die XSD-Datei

    • vermeidet Tippfehler

    • manche Settings erfordern eine exakte Reihenfolge

    • bei Fehlermeldungen auch die XSD überprüfen ob Setting enthalten

  • Alternativ Editor mit Validation

  • Nicht valide Config → Applikation(en) starte(t|n) nicht mehr

xmllint --noout --schema files-config.xsd files-config.xml
files-config.xml validates
Test-Xml -Path D:\temp\files-config.xml -SchemaPath d:\temp\files-config.xsd

Tägliche Admin-Aufgaben

Log Analyse

  • Log-Dateien sollten täglich geprüft werden

    • Elasticsearch, Logstash & Kibana (ELK-Stack), Fluent, Splunk

  • WebSphere

    • SystemOut.log aller Application Server

  • HTTP Server

    • Error Log

  • DB2

    • Db2diag.log

Log Rollover aktivieren (DB2, HTTP) sonst ist das Log zu groß für den Editor.

Suche

  • zentrale Komponente

  • Wichtig für Benutzerzufriedenheit

  • Suche basiert auf Apache Lucene

  • Index kann mit http://www.getopt.org/luke/ analysiert werden

  • Indizierung läuft alle 15 bzw. 20 min

    • Last Update Timestamp zeigt letzte Aktualisierung

search timestamp

Was passiert bei der Indizierung

  • alle Seiten der Basislisten (Seedlists) werden geholt

  • Speicherung im Filesystem

    • /opt/IBM/Connections/data/local/search/persistence

    • D:\IBM\Connections\data\local\search\persistence

  • Dateiinhalte werden extrahiert und im Filesystem gespeichert

    • SHARED_DIRECTORY/search/extracted

  • lokal gespeicherte Seedlists werden durchgegangen

  • Seedlist entries werden in Lucene Dokumente indiziert

  • Dokument in Lucene Index geschrieben

  • Wiederholung bis alle Seedlist Seiten analysiert sind

Search serverStats

  • Muss seit 6.0 aktiviert werden (search-config.xml)

  • Prüfen ob nur aktuelle SearchNodes enthalten sind

search-config.xml
<property name="statisticsService">
    <propertyField name="serviceEnabled" value="true" />
</property>
search serverStats

Search serverStats mit Problemen

search serverStats2
  • Vier Searchnodes in einem Zwei-Node-System

  • Bei Migration nicht bereinigt

  • Homepage-DB läuft voll (Rekord 150GB)

    • Table: SR_INDEX_DOCS

Search serverStatus

  • Dokumentation searchStatus Seite

  • guter Startpunkt für Fehlersuche und Funktionsprüfung

  • vier Statusfarben

    • blau:

      • Information: keine Aktion erforderlich

    • grün:

      • Konfiguration in Ordnung

    • gelb:

      • Warnung: Einstellung überprüfen

    • rot:

      • Problem: sollte dringend überprüft werden

Search serverStatus - Registerkarten

  • Server Status

    • analysiert SystemOut.log der Search Applikation

    • Versionsdatei der Crawlersuche

  • Initial Indexing Exceptions

    • Ausnahmebedingungen bei der initialen Erstellung der Suche

  • SystemOut Log Exceptions

    • letzte Meldungen der Suche im SystemOut.log

  • Überprüfung von Basislisten (Seedlist Validation)

    • Check ob Seedlisten laden kann

  • SAND-Überprüfung (SAND Validation)

    • Überprüft die Dateien des SAND Index

Search serverStatus - ResumeToken

  • Vergleich ResumeToken - Zeitstempel

  • ResumeToken ok

  • Zeitanzeige der Suche veraltet

  • Überprüfung der Scheduler

    • Ausführzeit in Vergangenheit

    • Neustart der Suche erforderlich

  • Achtung bei BackgroundIndex

    • Doku: Deaktivieren der Scheduler

    • Aktivieren nicht vergessen

    • Nicht sichtbar im Scheduler

search result
search seedlist

Search serverStatus - Scheduled Tasks

  • "RUNNING" für mehrere Stunden

  • Next running in der Vergangenheit

  • Ursachen:

    • DMGR läuft nicht, wurde unterbrochen

    • Scheduler hängen geblieben

Execfile(“connectionsConfig.py”)
Scheduler.listAllTasks()
…
Search tasks
15min-search-indexing-task    RUNNING   Mon Sep 14 06:46:00 CEST 2018 0 1/15 0,2-23 * * ?
20min-file-retrieval-task     SCHEDULED Mon Sep 14 07:01:00 CEST 2018 0 1/20 0,2-23 * * ?
nightly-optimize-task         SCHEDULED Tue Sep 15 01:30:00 CEST 2018 0 30 1 * * ?
nightly-sand-task             SCHEDULED Tue Sep 15 01:00:00 CEST 2018 0 0 1 * * ?
…
[root@cnx-was bin]# date
Mon Sep 14 20:54:31 CEST 2018

Profiles - Benutzersynchronisation

  • Abgleich LDAP und peopledb

    • min. 2x täglich ausführen

    • Sollte regelmäßig überprüft werden

  • Überblick

    • TDISOL\employee.*

  • Weitere Analyse mit

    • tdisol\logs\ibmdi.log

    • Eventuell muss DEBUG Einstellung erhöht werden

      • profiles_tdi.properties (debug_*=true)

      • etc/log4j.properties (log4j.rootCategory)

  • Ursache häufig abhängig vom sync_updates_hash_field

TDI - Benutzersynchronisation

  • Vor Problemen Gedanken machen

  • Sync_updates_hash_field

    • UID

    • GUID

    • E-Mail

  • Beispiel CIO Max Müller geht in Rente

    • 6 Monate später kommt ein neuer Auszubildender mit gleichem Namen

    • Was passiert?

Fehlerhaft synchronisierte User lassen sich nur schwer bereinigen

Profiles – Extended Role

  • Rolle nötig um Communities für externe Benutzer anzulegen

  • Externe Benutzer über eigenes TDISOL

  • Ersteller benötigt die EMPLOYEE.EXTENDED Rolle

  • Anzeige Benutzer mit EMPLOYEE.EXTENDED Rolle

extended-role.sql
Connect to PeopleDB;
SELECT r.PROF_DISPLAY_NAME, r.PROF_MAIL, r.PROF_UID, e.ROLE_ID
    from EMPINST.EMP_ROLE_MAP e
    left join EMPINST.EMPLOYEE r
    ON e.PROF_KEY = r.PROF_KEY
    WHERE e.ROLE_ID = 'employee.extended';
connect reset;
db2 -tvf extended-role.sql

Profiles – Extended Role setzen

  • Einzelne Benutzer

# Mailadresse
ProfilesService.setRole('Christoph.Stoettner@example.com',EMPLOYEE_EXTENDED)

# UserId
ProfilesService.setRoleByUserId('cstoettner', EMPLOYEE_EXTENDED)
  • Batch mit Liste (TXT zeilengetrennt)

# Mailadresse
ProfilesService.setBatchRole(EMPLOYEE_EXTENDED, 'profiles-email.txt')

# UserId
ProfilesService.setBatchRoleByUserId(EMPLOYEE_EXTENDED, 'profiles-userid.txt')

Communities

  • verschiedene tägliche Aufgaben fallen an

  • verwaiste Communities ohne aktive Owner

  • die maximale Größe für Dateiuploads ist erreicht (Quota)

  • Community Inhalt ist veraltet und soll archiviert werden

  • Communities sollen thematisch anders gruppiert werden

    • Subcommunities sollen eigenständig werden

    • eigenständige Communities sollen zu Subcommunities werden

  • Gelöschte Communities wiederherstellen

Community – Mitglieder und Besitzer hinzufügen per Browser

Admin benötigt die DSX-Admin Rolle
In Subcommunities können nur Mitglieder / Eigentümer der Hauptcommunity hinzugefügt werden

Community – Mitglieder und Besitzer hinzufügen mit wsadmin

  • DSX-Admin Rolle ein Sicherheitsproblem

  • wsadmin verwenden

  • UUID der Community benötigt

community uuid

wsadmin: UUID finden

wssadmin>execfile("communitiesAdmin.py")

wsadmin>allComm=CommunitiesService.fetchAllComm()

wsadmin>CommunitiesListService.filterListByName(allComm,"Search Test")

[{lastModBy=[Admin Connections, 0989A11C-D85F-0B59-C125-7E7C003FFAE6],
created=09/09/15 13:27:20 CEST, tags=[test], type=private, name=Search Test,
uuid=351ace81-4ebf-4f47-af50-815799d3d353, memberSize=1, lastMod=10/09/15 08:58:45 CEST,
description=Testing Search , createdBy=[Admin Connections,
0989A11C-D85F0B59-C125-7E7C003FFAE6]}, {lastModBy=[Communities Administrator,
-Communities-Administrator-ID-], created=11/09/15 12:08:24 CEST, tags=[],
type=public, name=Search Test, uuid=e2f4589d-bfc9-4c1d-9320-98b60588e6ff, (1)
memberSize=2, lastMod=11/09/15 12:40:37 CEST, description=, createdBy=[Admin Connections,
0989A11C-D85F-0B59-C125-7E7C003FFAE6]}]
1uuid=

MemberRole

  • 0 = Mitglied

  • 1 = Eigentümer

wsadmin>newowners=["homer.simpson@panastoeps.local", "christoph.stoettner@panastoeps.local"]
wsadmin>CommunitiesService.addMembersToCommunityByEmail("Search Test,1,newowners)
0091E: Multiple communities found with name: Search Test.
WASX7015E: Exception running command: "CommunitiesService.addMembersToCommunityByEmail("Search Test", 1, newowner)"; exception information:
javax.management.RuntimeMBeanException
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: CLFRM0091E: Multiple communities found with name: Search Test.
wsadmin>CommunitiesService.addMembersToCommunityByEmail("e2f4589d-bfc9-4c1d-9320-98b60588e6ff", 1, newowner)
addMembersToCommunityByEmail request processed

Community Reparenting

  • Eingeführt in IBM Connections 4.5 CR3

  • Verschieben von Communities unter verschiedenen Voraussetzungen:

    • Subcommunities können nicht direkt in eine andere Community umgehängt werden

    • Communities mit Subcommunities können nicht zu Subcommunities werden

  • Community-Eigentümer in der übergeordneten Community

    • als Eigentümer in die neue Subcommunity kopiert

  • Subcommunity-Mitglieder und -Eigentümer

    • als Mitglieder in die neue übergeordnete Community kopiert

Move Community

Community Reparenting - Zugriffsebenen

Übergeordnete CommunitySubcommunity vor ZuordnungSubcommunity nach Zuordnung

Öffentlich

Öffentlich

Nicht geändert

Öffentlich

Moderiert

Nicht geändert

Öffentlich

Eingeschränkt

Nicht geändert

Moderiert

Öffentlich

Moderiert

Moderiert

Moderiert

Nicht geändert

Moderiert

Eingeschränkt

Nicht geändert

Eingeschränkt

Öffentlich

Eingeschränkt

Eingeschränkt

Moderiert

Eingeschränkt

Eingeschränkt

Eingeschränkt

Nicht geändert

Community Papierkorb

  • Eingeführt mit Version 5.0

  • Default Purge Interval ist 90 Tage

  • Task läuft täglich um 3 Uhr morgens

    • d.h. auch mit daysToDelete=0 landen gelöschte Communities erst im Papierkorb

    • endgültiges Löschen dann um 3 Uhr

<comm:scheduledTasks>
...
<comm:task name="fullDelete" description="Fully delete Communities in trash"
           interval="0 0 3 ? * *" startby=""
           enabled="true" scope="cluster" type="internal"
           targetName="" mbeanMethodName="" serverName="unsupported" />
...
<!-- Number of days after which a soft-deleted community will be fully deleted -->
<comm:daysToDelete>90</comm:daysToDelete>

Community Undelete - Browser

  • Community Eigentümer können auch im Browser wiederherstellen

community trash browser
  • Community ohne Eigentümer können mit wsadmin wiederhergestellt werden

Community Undelete - Undelete

wsadmin>execfile("communitiesAdmin.py")
wsadmin>CommunitiesService.getSoftDeletedCommunityUuidList("2018-08-20")
  • Liste mit Communities die vor dem 20.8.2018 gelöscht wurden

wsadmin>execfile("communitiesAdmin.py")
wsadmin>CommunitiesService.getSoftDeletedCommunityUuidList()
  • Liste mit allen gelöschten Communities im Papierkorb

[{lastModBy=[Christoph Stoettner, B157E78B-E5D7-52D6-C125-7E7C003FF9D0],
created=15/09/18 23:38:53 CEST, tags=[], type=public, name=My community,
uuid=9b229afb-8034-4dff-93a7-d24eefbcacb1, memberSize=2, lastMod=15/09/18 23:40:11 CEST,
description=Description, createdBy=[Admin Connections, 0989A11C-D85F-0B59-C125-7E7C003FFAE6]}]
  • Undelete

CommunitiesService.unDeleteCommunity("9b229afb-8034-4dff-93a7-d24eefbcacb1")

Activities Trash

  • Bug

  • Scheduler schreibt Fehler ins Log

A parent row cannot be deleted because the relationship "ACTIVITIES.OA_NODE.FK_NODE_PARENT"
  • Ignorieren oder Scheduler deaktivieren

oa-config.xml
<!-- ContentTrashAutoPurgeJob - every day @ 3 AM  -->
<task name="ContentTrashAutoPurgeJob" description="Permanently removes Activities attachment trash from disk"
      interval="0 0 3 * * ?" startby=""
      enabled="true" scope="cluster" type="class"   (1)
      targetName="com.ibm.openactivities.jobs.ContentTrashAutoPurgeJobWS"
      mbeanMethodName="" serverName="unsupported" >
1enabled="false"

Wöchentliche Admin-Aufgaben

Files Policies und Library Größen

  • Library nicht mit CCM / FileNet verwechseln

  • Gemeint ist die maximale Uploadgrenze für Benutzer und Communities

    • Default: 500MB

  • Anzeige der vorhandenen Libraries:

FilesLibraryService.browseCommunity("title","true",1, 100)
FilesLibraryService.browsePersonal("title","true",1, 100)
  • Erstellen einer 2GB Policy

    • Zahl für Integer zu groß, daher L nicht vergessen

execfile("filesAdmin.py")
FilesPolicyService.add(“Test", 2147483648L)

Ausgabe FilesLibraryService.browse*

  • Anzeige jeweils einer Library

wsadmin>FilesLibraryService.browsePersonal("title","true",1, 1)
[{maximumSize=524288000, size=0, percentUsed=0.0, summary=, orphan=false, createDate=Tue Aug 04 10:28:00
CEST 2015, policyId=00000000-0000-0000-0000-000000000000, externalContainerId=null, themeName=,
label=0989A11C-D85F-0B59-C125-7E7C003FFAE6, title=Admin Connections, ownerUserId=df9f0fb0-3b1d-473e-b77b298c85f46bcc,
type=personal, id=7262baae-0fc9-46b5-a027-908226f1d91b, externalInstanceId=null,
lastUpdate=Tue Aug 04 10:28:00 CEST 2015}]
wsadmin>FilesLibraryService.browseCommunity("title","true",1, 1)
[{maximumSize=524288000, size=3014413, percentUsed=0.005749536514282227, summary=, createDate=Mon Jul 27
12:29:24 CEST 2015, policyId=00000000-0000-0000-0000-000000000001, externalContainerId=11fbc5ff-76ac4e67-a64b-eee2ba20f5bf,
themeName=default, label=Wf2768f8b39b6_4dab_adf4_2a58ec803c04, title=Barmenia -
Test 2, ownerUserId=00000000-0000-0000-0000-000000000000, type=community, id=ec86968c-1f09-44fe-9dc5-
e2c6677b9f0e, externalInstanceId=Wf2768f8b39b6_4dab_adf4_2a58ec803c04, lastUpdate=Mon Jul 27 12:30:01
CEST 2015}]

Files Policies und Library Größen

  • Zuweisen der Policy zu einem Benuter oder Community

    • Liste vorhandene Policies (Anzeige von 25 Stk)

FilesPolicyService.browse("title", "true", 1, 25)
[{maximumSize=524288000, title=!Default for Community Files, id=00000000-0000-0000-0000-000000000001},
{maximumSize=524288000, title=!Default for Community Wikis, id=00000000-0000-0000-0000-000000000003},
{maximumSize=20971520, title=!Default for Guest Users, id=00000000-0000-0000-0000-000000000004},
{maximumSize=524288000, title=!Default for Non-Community Wikis, id=00000000-0000-0000-0000-000000000002},
{maximumSize=524288000, title=!Default for Personal Files, id=00000000-0000-0000-0000-000000000000},
{maximumSize=2147483648, title=Test, id=58d6add6-f55d-446e-abf5-c15a733bd662}]
  • Man benötigt die UUID der Community oder GUID des Benutzers

FilesLibraryService.assignPolicy(libraryId, policyId)
FilesLibraryService.assignPolicy("9b229afb-8034-4dff-93a7-d24eefbcacb1","58d6add6-f55d-446e-abf5-c15a733bd662")

Archiv für Communities

  • Leere restricted Community "Archiv" erstellen

    • Mitglieder: nur ein Admin oder Admingruppe

    • Für Standardbenutzer nicht sichtbar und auch in Suche nicht angezeigt

  • Mitgliederliste der zu archivierende Community

    • exportieren

    • alle entfernen

  • Verschieben in die Archiv-Community (Subcommunity)

Entgültiges Löschen nach 6/12 Monaten

Maintenance / Regelmäßige Aufgaben

Datenbank Optimierung

  • Regelmäßige Durchführung von REORG und RUNSTAT

    • Minimum nach großen Datenänderungen (Update)

    • einmal monatlich während eines Wartungsfenster wäre perfekt

  • Datenbanken müssen dazu offline sein

  • Skripte liegen in [Connections-Root]/xkit/connections.sql

    • reorg.sql

    • updatestats.sql bzw. runstats.sql

    • zum DB2 kopieren, für Instance Owner erreich- und ausführbar

  • db2 –td@ –vf reorg.sql

Datenbank Optimierung - Skripte

export CNX_ROOT=/opt/IBM/Connections
find ${CNX_ROOT}/xkit/connections.sql \
    \( -name reorg.sql -o -name runstats.sql -o -name updatestats.sql \) \
    | grep -v smartcloud | sort

/opt/IBM/Connections/connections.sql/activities/db2/reorg.sql
/opt/IBM/Connections/connections.sql/activities/db2/runstats.sql
/opt/IBM/Connections/connections.sql/blogs/db2/reorg.sql
/opt/IBM/Connections/connections.sql/blogs/db2/runstats.sql
/opt/IBM/Connections/connections.sql/communities/db2/reorg.sql
/opt/IBM/Connections/connections.sql/communities/db2/runstats.sql
/opt/IBM/Connections/connections.sql/dogear/db2/reorg.sql
/opt/IBM/Connections/connections.sql/dogear/db2/runstats.sql
/opt/IBM/Connections/connections.sql/files/db2/reorg.sql
/opt/IBM/Connections/connections.sql/files/db2/updateStats.sql
/opt/IBM/Connections/connections.sql/forum/db2/reorg.sql
/opt/IBM/Connections/connections.sql/forum/db2/runstats.sql
/opt/IBM/Connections/connections.sql/homepage/db2/reorg.sql
/opt/IBM/Connections/connections.sql/homepage/db2/updateStats.sql
...

Security

Anmeldung erzwingen

Soll wirklich jeder Internetbenutzer die Kontaktdaten Ihrer Mitarbeiter mit Mailadresse und oft Telefonnummer durchsuchen können?

Anmeldung an allen Modulen erzwingen

Everyone muss auf everyone bleiben → Loginseite

Anmeldung erzwingen - Reader Rolle

reader role
2. Everyone → All authenticated in Application Realm

Anmeldung erzwingen

reader role2
Beim Speichern startet Applikation automatisch neu

Community / Wiki Ersteller einschränken

  • Communities

community creator
  • Wikis

wiki creator
Default: Jeder authentifizierte Benutzer darf Wikis/Communities anlegen!

Community / Wiki Ersteller einschränken - Wichtig

  • Manchmal nicht erwünscht, daß jeder Communities anlegen darf

  • Subcommunities können nur von Eigentümern einer Community angelegt werden

    • Also diesen die Rolle zuordnen, oder ein Admin Owner jeder Community

community-creator müssen auch wiki-creator sein, sonst kein Wiki in Community

Backup & Restore

Backup

  • Viele Kunden installieren Connections mittels

    • IBM Connections Dokumentation

    • Tutorials

    • Tipps

  • Keine dieser Anleitungen erwähnt Backups

  • Festplattendefekte bedeuten Datenverlust

    • auch RAID, Snapshot oder SAN kann Probleme verursachen

    • Fehler können immer passieren

  • Datenbank Backup bei laufender DB (über Dateibackup)?

    • Offline Backup bei globalen Installationen?

Restore

  • Restore bedeutet in den meisten Fällen Datenverlust

  • Anwendungen schreiben primär in eigene Datenbanken

  • Trigger über Events / MessageBus

    • Activitystream

    • Notification

  • Restore einzelner Datenbank inkonsistent

    • kein selektiver Restore möglich

Backup DB2

  • DB2 unterstützt Online Backups

    • man muss es nur aktivieren

  • Konfiguration benötigt ein Offline Backup und den Neustart der Datenbank

  • Danach jederzeit Online Backup möglich

  • Ich bevorzuge unkomprimierte Backups

    • gebrannt durch Restore-Probleme

db2 update database configuration for BLOGS using LOGARCHMETH1 LOGRETAIN
AUTO_DEL_REC_OBJ ON num_db_backups 1 rec_his_retentn 0 logarchmeth1 disk:/opt/db2logs
db2stop && db2start
db2 backup database BLOGS to /opt/backup
db2stop && db2start
db2 backup database BLOGS online to /opt/backup INCLUDE LOGS

DB2 Backup

DB2 Datenbankgröße

  • Wie bereits bei der Suche erwähnt

  • DB Größen mit mehr als 5GB (unkomprimiert z.B. im Dump sichtbar) problematisch

  • Search Nodes als Ursache

  • Migration von CCM fehlerhaft

    • Config mit lokalem WebSphere User

    • Bei der Migration UUID nicht migriert → für CCM ein neuer User

    • Rekord knapp 250 GB durch 4 Log-Nachrichten in DB pro Sekunde

Backup Shared Directory

  • Customization

  • provision/webressources (wichtige Jars für Common App)

  • Hochgeladene Dateien

    • Activities

    • Blogs

    • Files

    • Wikis

    • CCM (Bibliotheken)

  • CCM Objectstore

  • Unbedingt zeitnah vor oder nach DB Backup

WebSphere Application Server Konfiguration

  • backupConfig erstellt Sicherung

    • Konfiguration

    • Profile

    • Installierte Applikationen

./backupConfig.sh /opt/install/Websphere-config-date +%Y%m%d -nostop -username wasadmin -password password
  • Wiederherstellung in neue WebSphere Installation möglich

Backup – Was noch?

  • IBM HTTPServer

    • conf/httpd.conf

    • htdocs/*

    • SSL Keystore (Welcher wird verwendet?)

grep ^KeyFile /opt/IBM/HTTPServer/conf/httpd.conf | awk '{print $2}'
  • Connections (/opt/IBM/Connections)

    • Skripte

    • CCM

    • ear-Dateien

  • Suchindex (cnxLocalData/search/index)

Backup - Was noch? (2)

  • IBM Installation Manager

    • enthält Daten zu allen installierten Komponenten (Installation und Uninstall)

    • Windows

  • %ApplicationData%\IBM\Installation Manager

    • Linux

  • /var/ibm/InstallationManager

Optional - 3rd Party Applikationen

  • CCM

    • ear enthält Datenbank Encryption key

  • Forms Experience Builder / Surveys

    • /var/ibm/forms

    • c:\ibm\forms

  • IBM Connections Docs

  • Touchpoint

    • Customization

    • HTTPSERVER/htdocs/touchpoint

Backup pink

  • Volumes (NFS Shares)

[root@orientme ~]# ls /pv-connections/ -al
drwxrwxrwx   9 usr   grp    234  2. Mär 2018  customizations
drwxr-xr-x   2 usr   grp      6 19. Dez 2017  esbackup
drwxr-xr-x   4 usr   grp     29 19. Dez 2017  esdata-0
drwxr-xr-x   4 usr   grp     29 19. Dez 2017  esdata-1
drwxr-xr-x   4 usr   grp     29 19. Dez 2017  esdata-2
drwxrwxrwx   3 usr   grp     18 19. Dez 2017  mongo-node-0
drwxrwxrwx   3 usr   grp     18 19. Dez 2017  mongo-node-1
drwxrwxrwx   3 usr   grp     18 19. Dez 2017  mongo-node-2
drwxrwxrwx   4 usr   grp     35 19. Dez 2017  solr-data-solr-0
drwxrwxrwx   4 usr   grp     35 19. Dez 2017  solr-data-solr-1
drwxrwxrwx   4 usr   grp     35 19. Dez 2017  solr-data-solr-2
drwxrwxrwx   5 usr   grp     41  1. Mär 2018  zookeeper-data-zookeeper-0
drwxrwxrwx   5 usr   grp     41  1. Mär 2018  zookeeper-data-zookeeper-1
drwxrwxrwx   5 usr   grp     41  1. Mär 2018  zookeeper-data-zookeeper-2

Backup – Wie oft?

  • Minimum täglich

    • Datenbanken

    • Shared Directory

  • Regelmäßig (ein- bis mehrmals wöchentlich)

    • Konfiguration

      • WebSphere

      • Connections

      • CCM

      • IBM HTTPServer (inkl. Plugin und SSL Keys)

      • TDI Solutions Verzeichnis

Restore unbedingt testen!

Integrität Dateien Modul – Dateien / Wikis

  • Nach Restore sollte ein übereinstimmender Stand zwischen Datenbank und Shared Directory gegeben sein

wsadmin>execfile("filesAdmin.py")
Connecting to WebSphere:name=FilesAdminService,type=LotusConnections,cell=cnxCell01,node=cnxNode01,*
Files Administration initialized.
wsadmin>FilesDataIntegrityService.checkFiles("/opt/install/filesintegrity")
The file integrity check has started and will continue to run in the background until complete. Please
check the server logs for completion status and messages.
  • SystemOut.log

[16/09/15 20:36:19:851 CEST] 000000d4 DataIntegrity I EJPVJ9123I: The task Data integrity check has begun execution at 16 September 2015 20:36:19 CEST.
[16/09/15 20:36:20:005 CEST] 00000227 CheckDataInte I EJPVJ9343I: The data integrity check succeeded and the database and file system are consistent. 0 unused file(s) were moved to /opt/install/filesintegrity.
[16/09/15 20:36:20:005 CEST] 00000227 CheckDataInte I EJPVJ9366I: The task Data integrity check has finished at 16 September 2015 20:36:20 CEST.
  • analog: WikisDataIntegrityService.checkFiles

IBM Connections pink

The product formerly known as pink (TPFKAP)

  • In der Namensfindung

  • Basiert auf Kubernetes und Docker

    • Bis 6.0.0.5 IF1 nur mit IBM Cloud Private

      • CentOS / Red Hat

      • Docker CE / Docker EE

  • 6.0.0.6

    • Helmbasierte Installation

    • Kubernetes / Helm als Voraussetzung

    • Kein Zwang mehr zu IBM Cloud Private

  • Ziel: Continous Delivery

    • Häufigere Updates

Administration von Kubernetes

  • Kubernetes Dashboard

  • Rancher

  • Visualizer

  • Kommandozeile

    • kubectl

    • kubectx

    • kubens

    • helm

Authorization

  • User greift auf Connections zu, Weiterleitung zu Orient Me

  • Redirect auf BLUE (/homepage/login)

  • Authentifizierung mit BLUE (LDAP, SSO)

    • LtpaToken, JSESSIONID

  • BLUE fordert einen PINK Token an (/social/auth/token)

    • Erstellt einen JWS Token Cookie

  • BLUE leitet zurück zu PINK (/social)

  • PINK prüft auf LtpaToken und JSESSIONID

  • PINK authorisiert den Benutzer nach Check gegen Profiles API

Pinke Pods

  • ComponentPack (offizieller Name von Pink)

    • bereits jetzt 78 Pods

    • Metrics

    • Orientme

    • Customizer

  • Zusätzlich noch Kubernetes System

[root@orientme ~]# kubectl get pods -n connections | grep -v RESTART | wc -l
77
[root@orientme ~]# kubectl get pods -n kube-system | grep -v RESTART | wc -l
5
[root@orientme ~]# kubectl get pods --all-namespaces | grep -v RESTART| wc -l
94

kubectl get pods

[root@orientme ~]# kubectl get pods -n connections | grep zookeeper

NAME                                     READY     STATUS    RESTARTS   AGE
zookeeper-0                              1/1       Running   6257       106d  (1)
zookeeper-1                              1/1       Running   0          106d
zookeeper-2                              1/1       Running   0          106d
1zookeeper-0 läuft seit 106 Tagen und ist in der Zeit 6257 Mal neugestartet

Logs

  • Filesystem

[root@theodore ~]# ls /var/log/containers/zoo*
/var/log/containers/zookeeper-0_connections_zookeeper-8f7adb4701e06579d9e87a4f8a264e474ee58a4a70adc170b57951a86effaa73.log
/var/log/containers/zookeeper-0_connections_zookeeper-b0fd645398b5970669450a90113f9b676d2c48d3fb5c481bd39745fc4c3fb151.log
/var/log/containers/zookeeper-1_connections_zookeeper-867cb4244ab48745ef1d39baceba010e078d32e24c379b4eeec48d1a364d293e.log
/var/log/containers/zookeeper-2_connections_zookeeper-0cfd7f984e4b3f64c108d460c338352209ed9affc9a5b108c61f8fe51c33cf40.log

[root@orientme ~]# ls /var/log/containers/ | wc -l
131
  • kubectl

kubectl logs -n connections zookeeper-0
kubectl logs -n connections zookeeper-1
kubectl logs -n connections zookeeper-2

Logs on Steroids - Kubetail

  • Installation

wget https://raw.githubusercontent.com/johanhaleby/kubetail/master/kubetail
sudo mv kubetail /usr/local/bin
sudo chmod +x /usr/local/bin/kubetail
  • Ausführung

[root@orientme ~]# kubetail zookeeper -n connections
Will tail 3 logs...
zookeeper-0
zookeeper-1
zookeeper-2
[zookeeper-2] 2018-09-06 10:07:10,927 [myid:3] - INFO  [ProcessThread(sid:3 cport:-1)::PrepRequestProcessor@487] - Processed session termination for sessionid: 0x2658fc24d747982
[zookeeper-1] 2018-09-06 10:07:10,911 [myid:2] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /10.1.50.185:39506
  • Farbig hinterlegt

Legacy / Blue (WebSphere) Client Requests

blue pink1

Component Pack Client Requests

blue pink2

Pods identifizieren

  • Based on four frontend microservices

    • orient-web-client (1)

    • itm-services (2)

    • community-suggestions (3)

    • middleware-graphql

    • and many more backend microservices

  • Get logs

    • kubectl get pods -n connections

    • kubectl logs -n connections *

orientme identify

Orientme

orientme flow new

Sanity (ab 6.0.0.5)

# Check Port für Sanity
[root@orientme ~]# kubectl get services -n connections |grep -i sanity
sanity                  10.0.0.164   <nodes>       3000:30918/TCP
pink sanity3

Performance

Performance

  • Alle Komponenten regelmäßig prüfen

  • SAN IO ist wichtig

    • Schwer zu monitoren

    • Message Store

    • Dateien

    • Docs

  • PMI (WebSphere ISC) ist ein guter Start

    • Database Connections

    • Database Wait Time

    • JVM (Memory)

3rd Party Tools

Unterstützung bei der Administration

 

thanks