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.
Since the instance number is 00, I visited port number 8000. XSEngine is up and running.
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.
Since the instance number is 01, I visited port number 8001. The welcome page did not appear. 🙁 Why??? 😕
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.
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
2. Visit the welcome page. XSEngine is up and running. 😆
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.
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.
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.
4. Visit the welcome page. XSEngine is up and running!
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.
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.
3. Now you can find the dedicated ‘xsengine’ service. Keep in mind 30146(internal communication), 30147(SQL) and 30148(HTTP) are assigned to it.
4. Configure HTTP access, add wdisp/system_2 on the system layer, use port number 3$(SAPSYSTEM)48
5. Add the tenant database alias name to DNS.
6. Visit the welcome page. XSEngine is up and running!
Want more?
Till now we’ve configured HTTP access to SYSTEMDB, DB1, DB2 and visited the welcome page successfully.
SYSTEMDB
DB1
DB2
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.
We assume the following credentials.
<database>: <username>/<password>
SYSTEMDB: SYSTEM/Manager0
DB1: SYSTEM/Manager1
DB2: SYSTEM/Manager2
SYSTEMDB
I failed to login with the password Manager1 and Manager2 which means this XS server only belongs to SYSTEMDB.
DB1
Failed to login with the password Manager0 and Manager2 which means this XS server only belongs to DB1.
DB2
Failed to login with the password Manager0 and Manager1 which means this XS server only belongs to DB2.
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. 🙂
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
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
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
Hi Nicholas,
Thanks for sharing your conversion experience. I have not tried it yet. I'll give you update later.
Best regards,
Wenjun
Hi Nicholas,
In guide it explains
I believe this might be the reason in your case.
Regards
Angad
Hi Angad,
Thanks. i believe the statement was just recently updated as it was not specified months ago.
Thanks again,
Nicholas
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.
After applying the procedure to configure HTTP access, and creating a new one db the parameters were changed to:
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
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
Hello Mauricio,
Did you resolve this error?
We're getting the same error message but we can't find a solution.
Thanks in advance.
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
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)?
Hello Wenjun,
worked just fine!
Thanks and Regards
-Seb.
Thanks for sharing. I was struggling with this since configuring SPS9 with MDC
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
Cheers
Angad
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.
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
Hello Annao,
Which revision are you on ? because you setup this configure directly at the webdispatcher layer form the "systemdb"
Williams
I cannot get this working in SPS 11 with only a SYSTEM Database. Any assistance would be appreciated.
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
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
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
And the database is systemdb...
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
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.
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?
Great blog, Wenjun. Thanks a lot.
Satish Kumar
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