Adding a World
Documentation on this page is intended for customers of HeroEngine managing their own server(s).
|
- This is an Advanced-level tutorial intended on how to set up the hardware and software for a new World in HeroEngine. For other types of instructions, see the Tutorials page.
See also: Master Control Console
Prerequisites for setting up a World
- Server Machine - initial setup, see Server setup
- Database Schemas
- Executables - ones you currently run (see Category:Processes)
- Configurations - the services schema for each executable you run
World Creation Introduction
At some point, you will find that you want to create additional worlds either as your development process matures requiring the addition of QA/Integration/Developer Test/Public Test worlds. For the typical use case, the addition of a new world entails:
- the setup and configuration of a new physical server
- export of another world upon which the new world will be based
- Creation of a new world which includes configuration and a data import to the database
Master Control Console supports both the export of existing worlds and creation/configuration/import for new worlds.
Installing Executables
1. Run the launcher using the config files specific to your company to install the FireStorm Daemons and HJServers. This will not work just by executing launcher.exe. There will be different files available for each licensee and/or world. There should be either be an individualized download page setup for your company, or files can also be obtained from the MMO Platform downloads page.
2. After the executables install, we need to create a couple of files:
- (optionally) Create the authorizedUsers.lst in the FireStorm Daemons Directory. This file restricts the authentication of users by only allowing those that are listed in this list. You can have only one entry per line. Examples: To allow everyone you can use an "*" without the quotes. To allow everyone with the prefix he- you can use he-*. Or to allow Mike add Mike to the list. For example, to allow everyone the file would have a single line with the following:
*
- Create the Machine_specific.cfg in the FireStorm Daemons Directory This file lists the proper IPs to bind on for internal and external servers. If the file does not exist, Fireup will scan the available IP addresses in the machine and use the first one it finds. Here is an example of the file:
____________ |
<FireStorm> |
- Create a directory (this is a folder in windows) named log in the FireStorm Daemons Directory. This only has to be done on the server running Master Control.
Setup Configurations for Master Control
See World Editor for instructions on using Master Control Console to generate world configurations and import world schemas.
For the initial setup of the support schemas, see Database schemas
Edit Config files on physical server the World will run on
Go to where the FireStorm Daemons are installed (C:\program files\Firestorm Daemons)
Sample fireup daemon config file. This is the default one installed by the installer.
<FireStorm> <masterControlTransport>tcp:mastercontrol.heroengine.com:62455</masterControlTransport> </FireStorm>
2. Edit LoopFireup.bat
Sample LoopFireup.bat
:top FireStormDaemonsProd.sal "..\hj servers prod\HJServersProd.sal" _FireupDaemon.exe --application-uname=fireup goto top
Final Steps
- Start the LoopFireup Daemon on your server
- Shutdown and restart Master control
- /shutdown
- Reconnect to Master Control
- Find and highlight your new world and press 'Fireup'
It's not uncommon for services to take longer than alloted to them to startup and you may get a 'time out' error. Usually you can ignore these errors and press 'Fireup' to continue to startup processes.
Adding a machine
The following steps explain how to use the Master Control Console to add another machine to the world for areas to run on:
- From the Master Control Console open the config editor with the Edit Config button.
- Select Fireup Daemons, then click the Add button.
- Enter the windows name of the machine and select the Server Group for that world.
- Click Save, then Exit
- Type /shutdown in the chat window to restart Master Control.
- Setup the new machine. See HeroEngine Server: Windows Server 2008.
To add a world, follow the steps at the top of this page, though you can skip the database parts of the directions for adding a world, just follow the sections about installing and configuring the new machine.
Note: Master Control’s load balancing system will evenly distribute dynamic processes between all running servers in a group. The daemon definitions in Master Control specify which server group dynamic processes such as Area Servers, Dude Managers, Repository Servers, and Physics Servers will run on.
Running Multiple Worlds on a Single Physical Server
Overview
The typical installation assumes that you utilize at least one physical server per world called a HeroEngine Server or World Server (a single database machine can service tens of worlds simultaneously). However, there are two different methods you can utilize that allow you to run multiple worlds on a single physical machine:
- Through the Use of Virtualization Technologies
- Configuration Changes
When Should You Run Multiple Worlds on a Physical Server?
The typical use cases for running multiple worlds on the same machine are:
- Individual worlds have low CPU usage
- Individual worlds are expected to have low user population (think max tens of users not hundreds or thousands)
- You need to run multiple development servers for individual developers to utilize for testing
- Space/Cost/Energy requirements do not allow for individual machines per world
When Should You NOT Attempt to Run Multiple Worlds on the Same Physical Server?
- For Production, a World should always have its own physical server and generally its own machine cluster (though there are situations where you might choose to have production worlds share a set of servers in a shared machine cluster group)
- More than a limited number of people will be logging into the worlds
Using Virtualization
Our own use of virtualization was driven a need to be able to spin up fresh worlds for limited numbers of users without excessively increasing our hardware needs. Through the use of Xen and VM images, we can quickly set up a VM in a pristine starting state to host a newly created world created using Master Control's World Creation with a database export of one of our World Templates.
The HeroEngine Servers are all run virtual machines created using Xen running on Debian Linux and it is this virtualization technology with which we have the most familiarity. Virtualization Technologies vary in their capabilities, supported OSes, hardware support, and technical expertise necessary to install/maintain them. If you choose to utilize a Virtualization Technology, your own analysis of those factors may produce a different answer that what we came up with for our needs.
While we are happy to discuss our usage in general terms, we are not set up to support the usage of any particular virtualization technology and it is up to you to choose and administer the virtualization technology that matches your needs.
Benefits:
- Does not require the elaborate configuration changes that would otherwise be required
- Relatively quick to add/replace worlds depending on your needs
- Allows Worlds at different release levels to be simultaneously run
Limitations:
- Virtualization Overhead
- Requires in-house knowledge of another complex technology
- Hardware support
Our typical configuration for a physical machine intended to run VMs is an eight core CPU with at two gigabyte of memory available for each core allowing us to utilize one core for the Xen hypervisor running on Debian Linus and the remaining seven cores to run specific individual worlds often in a mix of Windows Server 2008 and Linux CentOS. The windows VMs also utilize QEMU for some functionality.
The major stumbling blocks in running HeroEngine Virtualized are:
- System administrators must be comfortable setting up and administering the Virtualization Technology as well as making/using VM images
Through Configuration Changes
This is an atypical use case, and is not generally recommended. And it will not work when needing to use multiple releases of HeroEngine binaries, such as when testing an upgrade strategy.
It is possible, though uncommon, to run multiple worlds on the same physical server through extensive configuration changes during the world creation process.
Benefits:
- Does not require in-house knowledge of virtualization
Limitations:
- Requires extensive configuration changes
- All worlds must use identical binaries, that means they must be running at the same release level
The major issue that must be overcome when running multiple worlds on the same physical server is that there are a variety of processes that bind to specific ports or ranges of ports (controlled through configuration via Master Control Console. That means with multiple worlds on the same machine they are (using their default configured values) attempting to bind to the same ports which results in a variety of unexpected behaviors which boil down to "things do not work right".
Using Master Control Console, you will need to edit the following configuration values selecting different values for the new world you are attempting to run on the machine.
Parm Name | Parm Type | Description | Default value |
Universe Parameters
Due to inheritance used by Configuration Parameters, you can make these changes at the Universe Level and it will percolate through provided that individual Processes are not overriding the Universe Parameter. Your default configuration may have some process level parameters set so it is important to verify and change or remove those overrides.
Changing poRouterPort
, requires you change defaultPORouterTransport
and ServiceDirectoryMatrixTransports
as well.
defaultPORouterTransport | string | Transport string which identifies how to communicate with the Post Office Router process | tcp:localhost:63333 |
If you change poRouterPort
or you utilize a single service directory to support the multiple worlds you will need to change ServiceDirectoryMatrixTransports
to update the new port or point all the worlds to the same port for the service directory.
ServiceDirectoryMatrixTransports | string | which service directories to talk to | <pipe separated Service Directory PO Matrix Tranport strings> |
You might choose to set each world to utilize a different DirectedProcessPortRange
so that you can control access at the firewall.
DirectedProcessPortRange | string | range of tcp/ip ports to bind to for outward facing ports on the directed processes | 10001-19999 |
Process Parameters
The SERVICE_DIRECTORY_DAEMON (<worldname>)
needs to be told to utilize a different port by changing the DudeManagerTransport
.
DudeManagerTransport | string | The transport string which specifies the port on which to listen for clients | tcp::10357 |
The REPOSITORY_DUDE_MANAGER_DAEMON (<worldname>) needs to be told to utilize a different port by changing the <code>DudeManagerTransport
. NOTE this must be a different one that you told the SERVICE_DIRECTORY_DAEMON to use.
DudeManagerTransport | string | The transport string which specifies the port on which to listen for clients | tcp::10357 |
Configure World to Talk to the Same Service Directory
Odds are you want to utilize the same service directory for all of the worlds running on a particular machine, however by default each world has its own service directory created. Modify the ServiceDirectoryMatrixTransports
to talk to your "main" service directory for your worlds by adding it to the parameter value using pipe "|" to separate each service directory to which you wish it to communicate.
tcp:hjflame.heroengine.com:64333|tcp:hjember.heroengine.com:64333|tcp:servicedirectory.play.net:63333
If you do not utilize the same service directory, then you will need to make sure that your Deploys also deploy an updated .cfg files that point to the appropriate service directory.
ex. HeroBlade.cfg
(optionally) Configure World to Talk to the Same Dream Manager Server
If you want to share tasks between your multiple worlds, you need to configure the worlds to talk to the same Dream Server by updating DreamManagerMatrixTransports
.
See also
- For use if you are running a world on an older version of HeroEngine, and need to upgrade to a newer version of HeroEngine