Skip to Content
Author's profile photo Former Member

Exposing HTTP access to multitenant database containers in SAP HANA SPS09

Intro

Hi everyone, recently I just installed SAP HANA SPS09 and wanted to try something new. Since multitenant database containers (MDC) is a major feature in SPS09, I installed SAP HANA in single container mode and multiple containers mode as well. As you know, I’m a fan of SAP HANA, especially XS, so after adding both SAP HANA systems into SAP HANA Studio, I just visited XSEngine welcome pages directly. Just like after installing Apache Tomcat, you’ll first visit the welcome page to check if the web server is running correctly.

For the single container mode, everything looked fine. But for the multiple containers mode, I failed to visit the welcome page… It seemed like hide and seek game in XSEngine. So where is XSEngine hidden and how can I visit the welcome page? 😕 I did some research and wanted to share with you my experience exposing HTTP access to multitenant database containers in SAP HANA SPS09.

Single container mode (instance 00)

Everything looked fine just like before.

/wp-content/uploads/2014/12/1__604450.png

Since the instance number is 00, I visited port number 8000. XSEngine is up and running.

/wp-content/uploads/2014/12/2__604448.png

Multiple containers mode (instance 01)

I logged on to system database container, so that’s SYSTEMDB as you can see in the following screen shot. First of all, you cannot find the ‘xsengine’ service which you can find in the single container mode.

/wp-content/uploads/2014/12/3__604548.png

Since the instance number is 01, I visited port number 8001. The welcome page did not appear. 🙁 Why??? 😕

/wp-content/uploads/2014/12/4__604549.png

Configure HTTP access to multiple containers

The first idea came to my mind was searching the solution in SAP HANA Administration Guide. Bingo! You can find the solution from Configure HTTP Access to Multitenant Database Containers and follow the procedure. Here I won’t explain the procedure again, but I’ll give some screen shots and highlight some key points for you.

Before jumping into the configuration part, I highly recommend you to first have a look at Multitenant Database Containers – SAP HANA Administration Guide – SAP Library in order to have an overview of MDC. From the architecture diagram below, you can see some points:

1. The internal web dispatcher, which is introduced as a service inside SAP HANA SPS09, accept all HTTP requests and dispatch them to different databases. That’s why you’ll see in the following part, most configurations take place in webdispatcher.ini.

2. Only index server in tenant database by default

3. For system database, the XS server is embedded in the name server. That’s why you cannot find the ‘xsengine’ service in the landscape.

4. For tenant database, the XS server is embedded in the index server.

6.PNG

Configure HTTP access to SYSTEMDB

1. Logged on to system database container -> Administration -> Configuration -> webdispatcher.ini -> profile -> change wdisp/system_0 on the sytem layer

  • Changing the port number from 8 to 14, 3<instance>14 is the internal port number reserved for the embedded XS server of the system database.
  • Replacing the default SRCURL=/ parameter with the SRCVHOST parameter, specifying the fully qualified domain name (FQDN) of the physical host as the value

/wp-content/uploads/2014/12/5__604565.png

2. Visit the welcome page. XSEngine is up and running. 😆

/wp-content/uploads/2014/12/7__604566.png

Configure HTTP access to DB1

What about creating a tenant database and visiting its XSEngine? Let’s give it a shot.

1. Logged on to system database container -> SQL console -> run the following SQL


CREATE DATABASE DB1 SYSTEM USER PASSWORD Manager1;










For better understanding, I logged on to DB1 and you can see only the index server belongs to DB1 as we discussed in the architecture diagram. Since the XS server is embedded in the index server, you cannot find it as well.

/wp-content/uploads/2014/12/9__604622.png

2. Logged on to system database container -> Administration -> Configuration -> webdispatcher.ini -> profile -> add wdisp/system_1 on the system layer

By default, new tenant databases are assigned 3 port numbers, one for each of the following:

  • Internal communication (3<instance>40-3<instance>97)
  • SQL (3<instance>41-3<instance>98)
  • HTTP (3<instance>42-3<instance>99)

We did not assign the port number when we created the tenant database DB1, so 30140(internal communication), 30141(SQL) and 30142(HTTP) these three port numbers are assigned to DB1. That’s why we configure the port number to 3$(SAPSYSTEM)42 in the following screen shot.

/wp-content/uploads/2014/12/8__604567.png

3. Add the tenant database alias name to DNS. As I’m not able to do that, I just add an entry to the local “hosts” file on Windows. You can find the path in the following screen shot.

/wp-content/uploads/2014/12/10__604614.png

4. Visit the welcome page. XSEngine is up and running!

11.PNG

Add a dedicated ‘xsengine’ service and configure HTTP access

Don’t like the embedded XS server? What about adding a dedicated ‘xsengine’ service? Now let’s create another tenant database DB2 and add a dedicated XS server. You can find details from Add a Service to a Tenant Database – SAP HANA Administration Guide – SAP Library.

1. Logged on to system database container -> SQL console -> run the following SQL


CREATE DATABASE DB2 SYSTEM USER PASSWORD Manager2;





Identical to DB1, only the index server belongs to DB2, still no ‘xsengine’ service. Besides, you can imagine 30143(internal communication), 30144(SQL) and 30145(HTTP) these three port numbers are assigned to DB2.

/wp-content/uploads/2014/12/12__604623.png

2. Run the following SQL to add the dedicated ‘xsengine’ service. Replace <hostname> with yours.


ALTER DATABASE DB2 ADD 'xsengine' AT LOCATION '<hostname>:30146';





If you use an occupied port number, the following error will appear.

13.PNG

3. Now you can find the dedicated ‘xsengine’ service. Keep in mind 30146(internal communication), 30147(SQL) and 30148(HTTP) are assigned to it.

/wp-content/uploads/2014/12/14__604640.png

4. Configure HTTP access, add wdisp/system_2 on the system layer, use port number 3$(SAPSYSTEM)48

/wp-content/uploads/2014/12/15__604641.png

5. Add the tenant database alias name to DNS.

/wp-content/uploads/2014/12/16__604685.png

6. Visit the welcome page. XSEngine is up and running!

17.PNG

Want more?

Till now we’ve configured HTTP access to SYSTEMDB, DB1, DB2 and visited the welcome page successfully.

SYSTEMDB

/wp-content/uploads/2014/12/7__604566.png

DB1

11.PNG

DB2

17.PNG

From above three URLs, you can find different hostnames but the same port number. That’s how the internal web dispatcher in SAP HANA works, mapping various hostnames to various databases.

But how can we make sure there are three XS servers, not just one XS server? 😕 Let’s use Web IDE to confirm this. In order to use Web IDE, first we need to grant a role to the SYSTEM user in SYSTEMDB, DB1 and DB2 respectively.

/wp-content/uploads/2014/12/18__604661.png

We assume the following credentials.

<database>: <username>/<password>

SYSTEMDB: SYSTEM/Manager0

DB1: SYSTEM/Manager1

DB2: SYSTEM/Manager2

SYSTEMDB

/wp-content/uploads/2014/12/19__604662.png

I failed to login with the password Manager1 and Manager2 which means this XS server only belongs to SYSTEMDB.

22.PNG

DB1

Failed to login with the password Manager0 and Manager2 which means this XS server only belongs to DB1.

/wp-content/uploads/2014/12/20__604671.png

DB2

Failed to login with the password Manager0 and Manager1 which means this XS server only belongs to DB2.

/wp-content/uploads/2014/12/21__604672.png

Wrap-up

In this blog post, we’ve first learned some basics about multitenants database containers (MDC) including the architecture at a high level. In SAP HANA SPS09, the HTTP access to MDC is not configured/exposed by default. We need to configure them manually. Thus besides SYSTEMDB we created two tenant databases DB1 and DB2, and successfully exposed HTTP access to these containers. In addition, we also learned how to add a dedicated ‘xsengine’ service.

Hope you enjoyed reading my blog and exposing HTTP access to MDC successfully. 🙂

Assigned Tags

      25 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Paul Aschmann
      Paul Aschmann

      Hello Wenjun,

       

      I have finally got my SPS09 instance up and running and after some trouble finding XS Engine on my MDC found your post. Thank you very much - the blog is well written and provides a great overview of the new capabilities and fundamentals without having to dig too much into the documentation.

       

      Cheers, Paul

      Author's profile photo Former Member
      Former Member
      Blog Post Author

      Hi Paul,

       

      Thank you for reading my blog. Yeah, it's the purpose of writing this blog. I'd like to share my experience with others using some of my thoughts and vivid example&window dumps. I think people can understand it better than just reading the plain-text document. I'm glad you liked it.

       

      Best regards,

      Wenjun

      Author's profile photo Nicholas Chang
      Nicholas Chang

      Hi Wenjun,

       

      Nice blog and thanks!

       

      Just for sharing:

       

      However, above only apply to new installation but not conversion from single database to MDC.

       

      In our case, after conversion, xsengine is still visible in Tenant Database (this is correct as per the admin guide) with SID = TST ; existing port no = 30507

       

       

       

      Logically, the http port for tenant DB should either 30503 + 2 = 30505 OR 30507 itself. Unfortunately, i've configured and tried both port 30505 and 30507 to access xsengine but both are not working.

       

      Finally , found out that the correct port is 30508 in order to access xsengine for TST tenant DB which is kinda weird.

       

      SID=TST,EXTSRV=http://localhost:3$(SAPSYSTEM)08,SRCVHOST=*********

       

      Just wonder is this normal or do you have the same for converted MDC system?

       

      Thanks,

      Nicholas Chang

      Author's profile photo Former Member
      Former Member
      Blog Post Author

      Hi Nicholas,

       

      Thanks for sharing your conversion experience. I have not tried it yet. I'll give you update later.

       

      Best regards,

      Wenjun

      Author's profile photo Former Member
      Former Member

      Hi Nicholas,

       

      In guide it explains

       

      8-04-2015 3-40-01 PM.jpg

      I believe this might be the reason in your case.

       

      Regards

      Angad

      Author's profile photo Nicholas Chang
      Nicholas Chang

      Hi Angad,

       

      Thanks. i believe the statement was just recently updated as it was not specified months ago.

       

      Thanks again,

      Nicholas

      Author's profile photo Mauricio Ramírez Cuevas
      Mauricio Ramírez Cuevas

      Hello Gentlemen,

       

      I have a similar case, I've recently converted to MDC,  after that  I can still see the xsengine service running for the existing database.

       

      HANA-08-07-2015_02.49.17 p.m..png

      After applying the procedure to configure HTTP access, and creating a new one db the parameters were changed to:

      HANA-08-07-2015_02.51.27 p.m..png

       

      I used the port 08  as is mentioned in the guide for my first tenant db, however I'm not able to get access to xs welcome page for that database.

       

      systemdb.customerdomain.com:8000 -- it works

      scm.customerdomain.com:8000   -- does not work

      hs1.customerdomain.com:8000    -- it works

       

      webdispatcher trace shows :

       

      [Thr 139907953792768] *** WARNING => Connection request to localhost:30008 failed (NIECONN_REFUSED)

      [Thr 139907953792768] *** ERROR => no valid HTTP destination server available for system 'SCM' rc=7 {00030090} [http_route.c 3674]

      [Thr 139907953792768] *** WARNING => Connection request to localhost:30008 failed (NIECONN_REFUSED)

       

      Do you have any recomendations?

      Thank you

      Author's profile photo Mauricio Ramírez Cuevas
      Mauricio Ramírez Cuevas

      It looks like this is a known issue:

       

      SAP Note 2132353 - 503 Service not available for XS Engine after conversion to multi-tenant database container system

       

      I'll aply the WA.

      Regards

      Author's profile photo Sergio Torres
      Sergio Torres

      Hello Mauricio,

      Did you resolve this error?

      We're getting the same error message but we can't find a solution.

       

      Thanks in advance.

      Author's profile photo Robert Meyer
      Robert Meyer

      Hi Wenjun,

       

      great tutorial and explanations, saved us a lot of headache today :-). Unfortunately we're still stuck at assigning the "sap.hana.ide.roles::Developer" role to the SYSTEM user in our tenant databases. It simply won't show up in the "Select Roles" dialogue

       

      /wp-content/uploads/2015/01/select_roles_in_tenant_635379.png

       

      We did not modify the SYSTEM user created with the tenant. Furthermore, when I'm trying to login to the Developer IDE in the tenant's (non-embedded) xsengine, the browser just darkens the screen (as if he's trying to check the passwords) and then hangs there forever.

       

      Any idea? 🙁 Maybe it's a DNS issue as we haven't registered the hostname of the tenant (just in the hosts file as you did)?

      Author's profile photo Sebastian Wiefett
      Sebastian Wiefett

      Hello Wenjun,

       

      worked just fine!

       

      Thanks and Regards

      -Seb.

      Author's profile photo Former Member
      Former Member

      Thanks for sharing. I was struggling with this since configuring SPS9 with MDC

      Author's profile photo Former Member
      Former Member

      Thanks for sharing.

       

      We have similar set-up with multi-tenancy configured. We can get to XS enginee of each database. However, when we trying a run Fiori analytical app (configured on SAP Gateway with SAP Web dispatcher) it throws an error

       

      "system not found"

       

      I have also created a discussion here http://scn.sap.com/message/15874258

       

      Cheers

      Angad

      Author's profile photo Former Member
      Former Member

      Hello,

       

      I'm following the sap.help Configure HTTP Access to Multitenant Database Containers and I can't see under xsengine.ini file the Public_url Section and add the Http_url for each Tenant...

       

      Any suggestion?

       

      Thanks a lot.

      Author's profile photo Flavio Arcaya Bravo
      Flavio Arcaya Bravo

      Hello Dear,

       

      I want to Configure HTTP(S) Access to Multitenant Database Container , but when I go to confuration I can't find the webdistpacher.ini file , do you know how i can to configurate this  file manually.?

       

      Many thanks.

       

      Arnao

      Author's profile photo Williams Ruter
      Williams Ruter

      Hello Annao,

      Which revision are you on ? because you setup this configure directly at the webdispatcher layer form the "systemdb"

       

      Williams

      Author's profile photo Darren Martin
      Darren Martin

      I cannot get this working in SPS 11 with only a SYSTEM Database.  Any assistance would be appreciated.

      Author's profile photo Williams Ruter
      Williams Ruter

      Hey Martin,

      use the following SQL command from the system database to access your tenant database over the web:

       

      ALTER SYSTEM ALTER CONFIGURATION ('xsengine.ini', 'database', '<tenant_DB_name>') SET ('public_urls', 'http_url') = 'http://<virtual_hostname>:80<instance>' WITH RECONFIGURE;

       

      Keep in mind that you will have to call your tenant db only by the virtual hostname define in your SQL statement.

       

      Williams

      Author's profile photo Darren Martin
      Darren Martin

      Actually, what I had was fine.  But what I did mess up was somehow 127.0.0.1 got deleted from the hosts file...strange because I added new entries via yast.

       

      Anyway it is working

      Author's profile photo Former Member
      Former Member

      Hello,

       

      I've followed the steps and It always connect with the xsengine of systemdb. I've configured the http port for each tenant but always is the systemdb database.

       

      How can I check?

       

      Revision is 112

       

       

      /wp-content/uploads/2016/07/saphana1_992718.png

      And the database is systemdb...

       

      /wp-content/uploads/2016/07/saphana_992719.png

      Author's profile photo Williams Ruter
      Williams Ruter

      Hello Ruben,

      In SP11+ you do not proceed this way, from the configuration tab filter on "xsengine.ini" and open the "public_urls" parameter, then double clic on "http_urls or https_urls".

       

      The parameter panel will open and in the selection choose your tenant and specify you url.

      You can check on one of my documentation where i explain how to do it.SAP Hana Dynamic Tiering setup on Multi-tenant database with DWF

       

      Wiliams

      Author's profile photo Former Member
      Former Member

      Thanks a lot Ruter,

       

      It was configured in 96 revision after that I updated to 112 and it doesn't work.

       

      Now It's working perfectly.

      Author's profile photo Vishal Bagherwal
      Vishal Bagherwal

      Thanks Wenjun, any plans to write about new tenant DB with XS advance, what changed from communication perspective? What if I dont want to installa XS advance?

      Author's profile photo Former Member
      Former Member

      Great blog, Wenjun. Thanks a lot.

      Satish Kumar

      Author's profile photo Mohammed Razal Velekode Nazar
      Mohammed Razal Velekode Nazar

      Thanks for the Great Blog!!!!

      In case if you are looking for a case where you cannot create host alias, you may use the below SRCSRV scenario where you can have custom port number for each Tenant DB's.

      Case you have to enable port XXXX for a given Tenant DB ABC, following should be added to webdispatcher

      icm/server_port_x=PROT=HTTP,PORT=XXXX,PROCTIMEOUT=600
      icm/system_x=SID=ABC, NAME=ABC, EXTSRV=http://localhost:<xs-http-port>, SRCSRV=*:XXXX

      Thanks,
      Razal