 Hello, everyone. Welcome to this session. I'm Sadashiva. This is Rama. We both work for HP Enterprise at Sunnyvale location. Today's session is about true installation, configuration, and debugging the installation issues. Before we actually start the installation, I'd like to go over some of the concepts of the true. Before that, I'd like to know how many of you are already using the true here. Can you raise the hands? Very few. So assume rest all new to this session. So this session is basically installation, configuration, and debugging. So this is the true statement. Provide scalable, reliable cloud database and provisioning functionality for both relational and non-relational database engines. And work continue to improve its fully future and extensible open source framework. The true mission statement. So the true is basically it exposes the restful API. And it stores the persistent data in the infrastructure database. Maintains its own database. When we are configuring, it keeps its metadata into the infrastructure database. So it has various components. Basically, I want to show the picture before I go all these concepts. So I think one slide is the architecture slide is missing. So one thing, give me one second please. Cool. So it has various components. One is the true API services, which is basically it provides the restful API. And it implements the WSGI. When the request comes from the user, it receives the request and it sends the request for the authentication to the authentication server, whichever is responsible to authenticate the user. So typically a keystone here. So it has also another component called task manager. It listens to the message in queue. Requests are posed to the task manager. Task manager executes the request by invoking the appropriate routines. This is the configuration file. So it's a true task manager confile to define which one is the entry point. Task manager handles some of the operations, instance creation, deletion, interactions with the other services, like NOVA, Cinder, Swift, and all. So another service called conductor service, true conductor, receives updates, various types of status updates from the guest agents. Some cases, it has to update the infrastructure database. It always keeps listening on to the messaging queue. It listens to the, it keeps checking the guest agent's heartbeats. And this is the configuration file where you can go and modify some of the configuration stuff for the conductor services. True strategies are the ones where the developers, they can implement their new implementations. It has the kind of specifications we can go through. If you wanted to integrate or if you wanted to support any new data store, new database, this is the place where you wanted to look into it. So there is another thing called true extensions. It's basically a true command. We call it as a true call sits as an extinctions. Basically, a true database list, no database create, true database create. These are the commands it supports, basically. So next, this is another important thing. They call it as flavors, where we define how much memory you want to use, how much disk space, the number of CPUs, and all. Basically, whenever we try to create the instance, we specify the flavor. When we pick this flavor equal to something, say, my flavor name is a small or middle or high. So you define all these parameters with that name. When you are creating the instance, we'll give the demo. When we are giving the demo, we'll show you the command. That will tell you basically, true create my instance and the flavor equal to a small. So what is small is you can define all these things. So true also supports the backup and restore. It is not responsible to perform actual backup and restore. It supports the actual data store to perform the backup and restore. It can launch the new instances from the backup also. You can backup. Then you create a new instance from the backup. Backups can be incrementally known, that one. And this is the configuration file, trueguestagent.conf, where you can modify any backup and restore-related configuration files. So replication, replica kind of mirroring. So it won't actually perform the replication, but it supports whatever the actual data store is responsible to do the replication. So this is the true create name of the instance. There's one example. How do you replicate? So that is something called a configuration group. Configuration group, basically, you have a set of parameters. While when you're configuring your instance, they can use the set of parameters to configure your instance. You create a configuration group, then you assign, attach the configuration group to the instance, basically. So here it mentions, during the launch of guest instance, task manager renders the configuration trial to provide the guest. So it has the key value pairs data there. Configuration group can be attached to the database instance. So in this one, trow list, get the instance ID, trow configuration list, get the configuration group ID, and attach trow configuration attach instance ID, then the configuration group ID. So configuration when you try to create the group, it has a name, value, and data store name. It creates with the ID. You attach that ID to the instance ID. These are the few data stores that are supported. Data store is nothing but a database. It can be adbms relational or non-relational. To name a few, MySQL, Mongo, Redis, Apache, Cassandra, Couchbase, Perconown, Post-JR, SQL, Redis, MariaDB. The first three, they also support the clustering. Clustering is nothing but a group of instances where the data can be replicated into the multiple instances. One can be primary. The other two can be, say, other two can be the slaves. If you're creating a MySQL or a Mongo cluster with the three instances, one can be primary. Two other two can be slaves. In Mongo case, you can write to the primary. You can read from all the three. In order to write, it has to be a primary node all the cases in the Mongo case. So HP has also, Vertica, we have not listed here. So these are just to name a few. There are many data stores that are supported. User can easily go and write their APIs, consume these APIs to write their own, plug in to support their data stores. So now we'll start the actual installation and see how it goes. If people have any questions, we can take the questions. Now or we can take later also. So we'll talk about how we install. I mean, one of the big thing, I want to try Trove and how do we get to install it? Now if you go and look in the wiki page or Google search for Trove installation, you get actually plenty of resources. And then you can actually get lost. And none of them work or take you all the way through. So what we did is we tried it out and then see what's the best sort of instructions. And then we came up with this. So what we chose, I used VirtualBox. I spun off a VM with 16 GB RAM. And I installed Ubuntu 14.04. And then I started following the instructions there. I mean, these instructions will work most of the time. And then sometimes if it doesn't work, we'll tell you where it may fail. So sometimes you may have to make some config changes to your machine. If you go through the document, it'll tell you to create this to user and things like that. So go complete that. And then you clone this repository. So do a git clone on the URL. And what you get is all the integration scripts for Trove installation that will work with DevStack. Now, in this installation, we are specifically choosing DevStack to integrate with Trove. We can also integrate with in the production level Trove. There are other commercial providers from HP Enterprise and then Tesora, who will make the installation much simpler and easier. But here we have chosen to do with DevStack so that it kind of provides a learning experience. So do a git clone. It'll download the required scripts for Trove and DevStack. Now, some of the suggestions that you might want to get through your installation. First thing is make sure you set your proxies. So if you are behind the corporate wall, you'll probably need proxies. And if git protocol doesn't work for you, change it to HTTPS. So what you do is go to tilde, Trove integration, or wherever you did the git clone. Go to scripts and then edit the redstack.rc. Now, this particular redstack.rc contains all the configuration information for you to get through the Trove and DevStack installation. So I have a sample code change there that will help you get there. So this clone, actually, let me go back. So once you have that script, then you go to cd, Trove integration, and then run this redstack install. Now, what this does is you have the git repo, and then it also downloads the DevStack from the git. And then it brings up the whole stack of all the services that DevStack comes up with. Primarily, this installation will bring up the three processes, the Trove API, Trove Task Manager, and the other process that is required for Trove. So this will run for some time, maybe half an hour or whatever, and then when you get a screen like this. So what happened when we were trying to install, we ran into other issues in terms of user permissions? And I suspect there is some kind of a subtle bug integrating Trove with the reference to user permission. So I just manually went and changed it to get through that. So once you get this, at least you're sure that the installation went through fine. We'll validate it in subsequent steps more in detail. So at least it says that you have DevStack up and running, and it gives you access to the DevStack URL. And it'll also print the password. So this password is the one that comes with the redstack.rc. It's kind of fixed. You can actually change it to whatever you want. So the next step is to kickstart the build init image commands for MySQL. So we are trying to create a MySQL data store here because that's the simplest to get around. Even though you can work with MongoDB or any other database, as long as you can get the image and then load it into Glance and then spin off and integrate it with DevStack. So run redstack, kickstart MySQL. So in the same command, you can actually replace MySQL with MongoDB or whatever. So once that is done, actually you'll get a screen like this, which, well, at least it says, OK, you're on track. You've got all your stuff integrated into DevStack control. So one thing that I guess you almost always run into errors. I mean, I've not seen you DevStack running all the way to the end unless you start on a very clean installation. So you'll have trouble. So fix the errors, which may involve you installing the latest or the proper version of PIP or the Python libraries, which by default, the script should take care of it. But just in case, should you run into errors? So one simple way would be to run unstack, which will shut down all the processes. And then solve the DevStack process. And then you run clean.sh so that everything is cleaned up. And then you run your previous command that you're running previously. So it'll bring up again if whatever processes are not running. So now that you have your Trove and DevStack installed, one thing is, OK, is the installation right? I mean, did I get everything set up correctly? So if you actually go through, access the DevStack directory. I think that's something that the script creates when it actually clones the DevStack repository. And then you source. So go to see DevStack. And then source the OpenRC resource file. Pass your username, project, and then the password. Now this password is the one that comes. It's kind of preset for you in that letstack.rc file, and which you can actually change it to whatever you want. And then the simple, let's try the simple thing first. So run TroveList, which will actually give the list of data source. Now in your case, when you run on fresh installation, it's going to be empty. But we did something before, so it shows up data source. So at least we have come this far. So let's take the next step. The next step. I think so with the previous scripts that we run, it also creates the endpoints for the services. Now if you run OpenStack Catalog List, it'll actually show you the list of services that are provided. And then you can see that Trove is listed here. And then it has got a public API URL. So I think so we have come this far. I mean, I'm going to post these slides, or if you can give me your email, I can send it to you. So the simple thing what we'll do is what? We'll create a database. So what I do is I create a data store. So what I do is Trove create. I give it a name, and then followed by the flavor and the volume size. So I'm not giving any data store name. The type, which is by default picks up my SQL, because I have only one. So the moment you run that, you'll see you'll get a response something similar to this. And the two things that I would want to observe are the ID, of course, and then the status. So it's in a build state as of now. So it may take a couple of minutes for the data store to get live. So what you can do is do a Trove show, and then you just give the ID, and it's going to give you the latest status on that. So actually, I want to give a demo of some of this what I'm doing, so you can actually see what it's doing, and then we'll also go to the configuration files and things like that. So this gives you the complete status of your database instance. You observe that the status becomes active, and if there is any error in creating that instance, it's going to need to access the log files and then find out what's gone wrong. So now that we have created an instance, database instance, let's create a database and let's connect to it. So the way you do it is use a Trove database create command and then followed by the ID of the data store, which we created here, and then give it a name. So I'm going to give it my first database, whatever. Now you also need to create a user to access that. So right now, so what you do is do a Trove user create, and then you reference the database instance, and then your password, and then give it a name, my first database. OK, now you have everything done. So now let's connect to the database. So you use a MySQL command, client. So give the username password, and then the IP address. Now if you're wondering where you got the IP address from, you have IP address here. So behind the scene, a VM is spun off. So it goes to NOVA. So if you actually type NOVA list, and then you grep for this, you'll actually find this instance too. So you connect to the database, and then you can see that the database that we created is visible there. So let's see the configuration. So you might want to configure all the three services. And where do you find this configuration information? All the configuration is under the host slash ETC Trove. Now in production, typically what happens is all these services are installed on the control. So if you have three controls, you have all three of them running on the controllers. And so if you want to modify, you go to each controller, and then modify configuration file under the slash ETC Trove. So the Trove conductor is a configuration for the conductor service. And then the Trove.conf is a general configuration for the API. And then you have the same thing for the task manager. And there's also a configuration file, Trove guestagent.conf. So this configuration is not used by the host. This is actually a positive of the guest image. So when you create a database instance, it creates a guest image. So the request goes to NOVA. And then that's where this file would be sitting. So for our pro installation, by default, we are using NOVA networking. However, if you want to choose Neutron instead of NOVA, then you have to make the following changes in the local.conf file. Now once you do that, then you have to rerun the whole stack again. But I just noticed that in the most recent version, there's actually even a simpler way of doing this, which I'm going to show it to you in the first part of the demo. So sometimes your instance may end up in an error state. And then you have to find out what's happening. So the way you can do that is go to slashopt-stack-logs and then on the host. Or if it's on the controller, so you'll find that. And then you can access the log files and see where your system is failing. And as with all OpenStack product CLIs, you always have the debug option. So I would always, if I think there's anything wrong, just try the debug option, and you'll see actually what's happening underneath. And that's a very useful tool to debug. So this is where your logs are, and this is how they look like. Now sometimes, you might see that the NOVA is not reporting any error, but that your database instance is an error state. So what you can do in that case is you can log on to the corresponding instance, the NOVA, the VM, and then check for logs. So the way I would do SSH. So in our situation, the keys are automatically created underneath, so you don't have to worry. I just SSH Ubuntu and then IP address, and it'll just take me there. And then access the var log throw. And remember, we briefly talked about the true guest in the config file for the controller. So you can also check the true guest.log file. And specifically, if you have errors before launching the guest again, they are under var log upstart true guest.log. So this is where the log is. Sometimes you can also use a simple NOVA console log dash log and then the instance ID. So this instance ID is different than the instance ID that you get using true show. So you have to access the right instance ID. So there's more information at this URL. And what I'm going to do now is I'm going to change my screen and see if I can access. OK, I don't know how to make it show here. Sorry, my screen froze. Give me a second. Just give me a few minutes. My VPN went down. This one. Give me a minute. I'll reconnect my VPN. Hopefully, we can get the demo going. So in the meantime, if anyone has any questions on the installation configuration, we can take the questions. In a production environment, do you recommend doing it on the controller nodes, the Trove stack? Or would you like to do it on a separate VM? Or is there any guidelines for that? So a typical production, I want to say, more like doing on a controller node. And we have a demo on the horizon part also. OK, go ahead, please, if you have any other questions. Yes, just one minute. Do it in a VM? Have you guys tried to do it in a VM? Maybe separate a VM, not to go into controllers? Have you tried that? Can you please repeat the question, sorry? Have you tried putting the Trove into a separate VM, other than controllers? So the demo of what we are doing is a typical VM. But the controller node, we don't have at this point now. But we recommend the production in the controller nodes. OK. Yeah, you are right. Question, does Trove allow to configure which storage will be used for database? For example, I have several Cinder backends. I want a particular database to be resized on SSD pool. Can I control this? Can you please repeat the question? So you have a backup on the Cinder? Not backup. I have multi-backend. Multi-backend? Yes. So I have, let's say, SSD pool, and they want that. So how do you get this window there? This specific database will resize on my SSD pool. Can we control this? So if you have a database, a particular database, you can resize with support. So if you're talking about resizing a database, we can support. Say you have a database of, say, one gig. We always support increasing the resize. So you cannot decrease the size. Say, for example, in this case, one size gig, if you have a backup, and if you wanted to resize to two gig, that's fine. But if it is below one gig, we don't support. My question was not about resizing. I have two pools of disks. Let's say SATA and this is D. Can I control on which pool my database will be built? Which pool, you mean, to say? OK. I'll take the question later, maybe. I have one more question. Is there an API that Trove has that can be integrated in Horizon? So Horizon actually comes up here. We don't have the demo part. I think we missed that part. Actually, it is there already. So what I'm saying is all the commands that you show for creating and checking status of our database, is that also can be done from Horizon? Actually, the Horizon version for Trove, but the default version that you get to DevStack, doesn't have all the features. But the Tesoro, our other providers, may actually provide a much better user experience in terms of that. So basically, there are some products. Even the HP has a product. Through that one, you can create, you can resize, you can increase the volume size, and all those can be done. I just wanted to relay the question that he asked. I also had the same question. I think, when you're installing, when you're creating a new data store, let's say MySQL or MongoDB, and you have a choice of storage, SSD versus SATA or whatever, in Cinder, can you choose that for Mongo, I want to go SATA, for MySQL, I want to go SSD? Let me have the answer to this question. I'll get back to you that time. Well, actually, that's a too complex a question for us to answer, honestly, because we concentrated on basic stuff of installation and configuration and other things. Now, I think, if you talk to any guys who deal with production version, I think they may have a better answer. Well, so I'm trying to get some demo. I think we have some questions. Yeah, go ahead. Voila. My question is very simple. In your experience, what's the biggest database sizing that you are integrating? Have you ever integrated a trial with Oracle? So we have done a lot of things on MySQL and Mongo. So we have created, we don't have the production environment, but we have the test databases creating with a 10-gigging doll, above that also size, in the gigs only, not more than that, because the size was very small resources we have available. We have not tried the Oracle. We tried the Redis. We tried the HP Vertica. We tried MySQL and Mongo, Mongo with the clusters. And Sharding, we tried the Sharding also. Well, I'm just waiting for the instance to get active. So we're talking briefly about the configuration information. So if you go to CDTRO, so this is the file that actually has most of the configuration information, which you can actually modify. And briefly, we're talking about Neutron. So remember, I was saying, by default, we are using no-one networking for this TRO DevStack integration. Change that to true, and then you can set it up to work with Neutron. And then you have your configuration file to configure your TRO services. Well, I guess we are close to our time. Any further questions related to installation configuration? So once you install TRO, this service, I'm assuming, is accessible to your tenants, right? So anybody? Yes. OK. And when I create a TRO instance, can I also specify, I think, that the questions that other people are asking is kind of critical, right? Because if I have a database, I want to make sure that my database is stored on a secure location and not using fmr on this. When I'm creating a TRO instance, can I specify a volume, for instance, from sender? We can specify. We can attach the volume. Yeah, you can attach the volume. Right. So that would probably answer the question for the other guys. Right. OK. So is there a CLI here, like a TRO? Yeah, yeah. Actually, OK. Let me. If you sender attached value or something, we can do that once and create them. Actually, I don't know how to scroll that. Yeah, actually, yeah. If you do TRO help, it'll actually give you a list of all the APIs that you can use. Thank you. Thank you all. Thank you, guys. Thanks for listening.