OpenStack upgrade with minimal downtime with 2 nodes - openstack

I'm looking for a solution on how to upgrade 2 OpenStack nodes with minimal downtime of running virtual machines.
Our current situation is that we have one node working as controller with about 50 live virtual machines running on it.
We have second server with the same HW specification as the one with running OpenStack (Same blade in blade cluster). This used to be a VMware server but last year we continously migrated all virtual machines to OpenStack.
We can install the second node to be either controller or compute node.
My research is focused on what's the best way to upgrade to higher version with minimal downtime of live virtual machines.
Any suggestions please? Thank you.

You should have no downtime on your Virtual Machines when upgrading OpenStack. The OpenStack services can be restarted at anytime and should only affect API requests. The only potential impact on running virtual machines would be if you need to update something like OVS or the Operating System (includes things like kvm).

Related

Unable to Create Azure Storage Queue Messages with ASP.NET 4.6.1 App

I have an old ASP.NET 4.6.1 app running in a VM on Azure.
I’m trying to create messages in an Azure Storage Queue and nothing is happening when I run it on production VM. However, on my dev machine, it works fine and I can create messages in the same queue that I’m trying to access from the production VM.
The call to the queue is within a try catch block and it’s not throwing any errors.
Another important point is that I had use the old/deprecated WindowsAzure.Storage NuGet package as that’s the one that seems to work on this ASP.NET MVC 4.6.1 app.
Any idea what could be the issue here? Because I don’t see any errors, I’m not sure how to go about fixing this problem.
According to MS Docs, one troubleshooting option you can try is "Redeploy Windows virtual machine to new Azure node"
The doc says,
If you have been facing difficulties troubleshooting Remote Desktop
(RDP) connection or application access to Windows-based Azure virtual
machine (VM), redeploying the VM may help.
Source: https://learn.microsoft.com/en-us/azure/virtual-machines/troubleshooting/redeploy-to-new-node-windows
See also additional troubleshooting steps:
Restart the virtual machine
Recreate the endpoint / firewall rules / network security group
(NSG) rules
Connect from different location, such as a different Azure virtual
network
Recreate the virtual machine
There are various reasons when you cannot start or connect to an application running on an Azure virtual machine (VM). Reasons include the application not running or listening on the expected ports, the listening port blocked, or networking rules not correctly passing traffic to the application.
Source: https://learn.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshoot-app-connection
This might be network Firewall issue. Open azure portal from production vm machine. You can even try to manually see the storage and upload files from web.

asp.net MVC 5 hosting setup

Note: because there is no windows hosting that satisfies me at the moment, I'm developing my application in PHP and host them on a linux VPS.
Since Windows Server 2016 supports Docker and you are able to create .net 4.5 images, I thought why not review my applications and hosting plans.
Because I'm not a fan of hosting websites directly on a VPS with IIS (setup and configuration seems clumsy), I thought this "infrastructure" seems ideal for me.
A Windows 2016 VPS
A Linux based VPS
For each asp.net application, create a docker image based on microsoft/iis. This means that for the application, there is nothing left to be configured, right? This application will run on the Windows 2016 server.
On the Linux VPS, I will have nginx configured to have all the configuration for SSL certificates and optimizations. Nginx will have proxies that point to the Windows 2016 VPS on specific ports for the different applications.
I think this architecture has scaling possibilities, less configuration on the Windows VPS, more room for improvement? It should even be possible to do this with Ansible if I'm not wrong.
I only need hosting, nothing related to email, ftp, ... That's why I'm not using shared and/or cloud hosting.
Does this architecture seem fine?
Am I missing something?
Would you still just use a Windows VPS for hosting asp.net applications, even if this architecture is possible?
Does this all seem possible with Ansible? I only have basic experience with it.
I don't see anything wrong in your proposal. Remember you can use ansible inside the Linux image's Dockerfile. Maybe you can find that it is an overkill but it should work.
Probably you will find some problems linking your Linux / Windows containers. But I don't see anything short stopping.
Go ahead and post your results. Also if you encounter some walls just ask here and we will try to help.
Regards
because there is no windows hosting that satisfies me at the moment, I'm developing my application in PHP and host them on a linux VPS.
Would you mind telling us a bit about your requirement of Windows Hosting?
For each asp.net http://asp.net/ application, create a docker image based on microsoft/iis. This means that for the application, there is nothing left to be configured, right?
Once fully functional pre-configured image is prepared, you don't have to perform any other changes to your main image. The main image is only modified when you want to update any application in the image or looking to make any changes or update Windows OS.
Does this architecture seem fine?
NGINX reverse proxy works with IIS backend, so, this proposed architecture is achievable. Initial setup of connecting Linux VPS NGINX web server to individual Windows docker image is slightly complex. If you are successful doing that, the next challenge will be adding subsequent dockers to Windows Hyper-V. Here, I don't see actual purpose of using Docker images to host ASP.Net http://asp.net/ applications, when you can easily deploy pre-installed VMs through Windows HyperVisor.
As far as Ansible is concerned, I don't have much idea about this product, but as seen on their website Ansible can automate the dockers.

ServiceStack Docker architecture

I'm wondering if anyone with bigger brains has tackled this.
I have an application where each customer has a separate webapp in Azure. It is Asp.net MVC with a separate virtual directory that houses ServiceStack. The MVC isn't really used, the app is 99% powered by ServiceStack.
The architecture works fine, but as we get more customers, we have to manage more and more azure webapps. Whilst we can live with this, the world of Containers is upon us and now that ServiceStack supports .net core, I have a utopian view of deploying hundreds of containers, and each request for any of my "Tenants" can go to any Container and be served as needed.
I think I have worked out most of how to refactor all elements, but there's one architectural bit that I can't quite work out.
It's a reasonably common requirement for a customer of ours to "Try" a new feature or version before any other customers as they are helping develop the feature. In a world of lots of Containers on multiple VMs being served by a nginx container (or something else?) on each VM, how can you control the routing of requests to specific versioned containers in a way that doesn't require the nginx container to be redeployed (or any downtime) when the routing needs changing - e.g. can nginx route requests based on config in Redis?
Any advise/pointers much appreciated.
G
Whilst it isn't Azure-specific we've published a step-by-step guide to publishing ServiceStack .NET Core Docker Apps to Amazon EC2 Container Service which includes no-touch nginx virtual host management by running an Instance of jwilder/nginx-proxy Docker App to automatically generate new nginx Virtual Hosts for newly deployed .NET Core Docker Apps.
The jwilder/nginx-proxy isn't AWS-specific and should work for any Docker solution that explains how it works in its introductory blog post.
Using nginx-proxy is a nice vendor-neutral solution for hosting multiple Docker instances behind the same nginx reverse-proxy, but for Scaling your Docker instances you'll want to use the orchestration features in your preferred cloud provider, e.g. in AWS you can scale the number of compute instances you want in your ECS cluster or utilize Auto Scaling where AWS will automatically scale instances based on usage metrics.
Azure's solution for mangaging Docker Instances is Azure Container Service which lets you scale instance count using the Azure acs command-line tool.
Our company is working on the same thing. We were working with kubernetes and building our own reverse proxy with nodejs. This reverse proxy would read customer settings from a certain cache and redirect you to the right environment.
But Depending on the architecture i would advice to just have 2 environments running with both there relative urls: 1 for production and one for the pilot/test environment. Whenever a customer goes to the pilot environment url he will use the same database but just an upgraded version of the WebApp.
Of course this will not work if working with an ORM and database migrations are included. (Which is probably the case when you are using servicestack)

Installing FreePBX as a Virtual machine

I have been trying to launch FreePBX as a VM on Openstack. The launching is successful. but the during the installation time I get the following error:Some first boot error occured and the system is not properly setup. Check to see if you have internet access and re-run /etc/pbx_first_boot.sh.!! any suggestions?
I haven't a solution for your problem, but as a contribution to this community I can tell my FreePBX runs smoothly since 5 years as a Virtual Machine on VMWare ESXi (hosted on a local physical server Dell PowerEdge 1950) managing 100 extensions and up to 15 concurrent external channels.
Abhishek, are you using centos or ubuntu. Try to install "PBX in a Flesh" great product and have FreePBX stable and bugfree.

deploy solution to azure virtual machine

i have a .net solution, with a Mvc 4.5 web, a c# server dll, another webservice layer dll, etc.
I want to deploy it on a azure virtual machine xx.cloudapp.net:8080
There are many guids on how to deploy a new website on azure, but since this solutions contains a lot of dlls, i need a virtual machine.
I didnt found any guide on how to do it, can you please give me a link or something?
You don't have to use Virtual Machines to install DLLs - you can do this with Cloud Services (web/worker role) as well, via startup tasks. As long as these DLLs are easy to fetch (e.g. blob storage) and quick to install, you can take that route. Many do just that, since this allows you to work with stateless OS VMs (where you don't worry about maintaining the OS, or making copies of a VM when wanting to scale out to multiple instances).
That said: To install to a Virtual Machine, you'd typically copy files to your VM somehow (maybe fetching from a CI engine, possibly ftp'ing the files, whatever procedure you'd typically use with a Windows server). And you'd use RDP for gaining access to the desktop.
Once you have the VM set up just how you want it, you can then create an image of the VM and add it to your personal gallery, whereby you can then spin up additional VMs based on that image. Unlike Cloud Services, each Virtual Machine will then take on a life of its own (and live in its own VHD in its own blob), where you'd have to distribute both OS updates and app updates to each VM as the need arises.

Resources