Hey Conquest Users and Admins. I've been working on our setup for many many months and have finally got it to do everything we need it to do. So, I thought I'd share my configs in case anyone else is interested in doing the same type of thing.
Prior to Conquest... We have two PACS servers, PACS01 192.168.1.11 and PACS02 192.168.1.12 for redundancy and failover purposes. Lets say ALL modalities are currently sending DICOM images to PACS01's IP/AE Title and then there's a problem with PACS01 or we need to do an update. To prevent downtime, we have to come in and physically touch every modality device and swap it over to PACS02 192.168.1.12 which can take a LOT of time. Then we can do our repairs or upgrades PACS01, THEN we can do it all over again. Swap all the modalities back over to PACS01, make the repairs or upgrades to PACS02 No bueno.
With Conquest... Conquest is set up as our DICOM router and sits in front of our PACS servers. All Modalities send their DICOM images to Conquest instead of the two PACS server. Then in the senario above where we need to failover to PACS02 to resolve an issue on PACS01, we just edit the configs to point Conquest to PACS02 instead of having to touch every modality device in our facility. This is MUCH simpler and faster.
My setup includes (2) two Ubuntu 12.04 LTS linux servers running Conquest 1.4.17c for DICOM routing, keepalived for network failover, and IPVS (via keepalived) for round robin network load balancing.
The configs are almost exactly the same on both Conquest servers with minor differences for Conquest01/conquest02.
Our Network Setup...
Conquest01 192.168.1.21
Conquest02 192.168.1.22
Conquest VIP 192.168.1.23 <--- This is where all modalities will be sending DICOM images
PACS01 192.168.1.11
PACS02 192.168.1.12
Our /conquest/dicom.ini is the same on both Conquest01 and Conquest02 servers. The only thing I believe we edited beyond the defaults is the last line ImportConverter0.
# This file contains configuration information for the DICOM server# Example Linux version using SqLite# Copy this file to dicom.ini to use it[sscscp]MicroPACS = sscscpEdition = Personal# Network configuration: server name and TCP/IP port#MyACRNema = CONQUESTSRV1TCPPort = 5678# Reference to other files: known dicom servers; database layout; sopsACRNemaMap = acrnema.mapkFactorFile = dicom.sqlSOPClassList = dgatesop.lst# Host for postgres or mysql only, name, username and password for databaseSQLHost = localhostSQLServer = ./data/dbase/conquest.db3Username = dontcarePassword = dontcarePostGres = 0MySQL = 0SQLite = 1UseEscapeStringConstants = 0DoubleBackSlashToDB = 0#IndexDBF = 1#PackDBF = 0#LongQueryDBF = 1000# Configure databaseTruncateFieldNames = 10MaxFieldLength = 254MaxFileNameLength = 255FixPhilips = 0FixKodak = 0UIDPrefix = 99999.99999EnableReadAheadThread = 1PatientQuerySortOrder =StudyQuerySortOrder =SeriesQuerySortOrder =ImageQuerySortOrder =EnableComputedFields = 1TCPIPTimeOut = 300FailHoldOff = 60RetryDelay = 100QueueSize = 128WorkListMode = 0WorkListReturnsISO_IR_100 = 1DebugLevel = 5Prefetcher = 0LRUSort =AllowTruncate =DecompressNon16BitsJpeg = 1UseBuiltInJPEG = 1IgnoreOutOfMemoryErrors = 0PadAEWithZeros = 0FileNameSyntax = 3# Configuration of compression for incoming images and archivalDroppedFileCompression = unIncomingCompression = unArchiveCompression = as# Names of the database tablesPatientTableName = DICOMPatientsStudyTableName = DICOMStudiesSeriesTableName = DICOMSeriesImageTableName = DICOMImagesDMarkTableName = DICOMAccessUpdatesRegisteredMOPDeviceTable = RegisteredMOPIDsUIDToMOPIDTable = UIDToMOPIDUIDToCDRIDTable = UIDToCDRID# Banner and host for debug informationPACSName = CONQUESTSRV1OperatorConsole = 127.0.0.1# Configuration of disk(s) to store imagesMAGDeviceThreshhold = 0MAGDevices = 1MAGDevice0 = ./data/ImportConverter0 = forward to PACS01 org %u; destroy; # This forwards DICOM images to PACS01 with the AE Title of the originating sending modality, then destroys Conquest's copy of the files#ImportConverter0 = forward to PACS02 org %u; destroy; # Uncomment this line to make PACS02 the destination for DICOM images
Our /conquest/acrnema.map is the same on both Conquest01 and Conquest02 servers.
For Failover with Keepalived and roud robin loadbalancing with IPVS you'll need to first install Keepalived and then update this script on both servers, there's a small difference between Conquest01's version and Conquest02's version of this config file.
(for Ubuntu)
Conquest01's /etc/keepalived/keepalived.conf
# Virtual IP for Image Destinationvrrp_instance VI_1 { # initial state state MASTER interface eth0 # arbitary unique number 0..255 # used to differentiate multiple instances of vrrpd virtual_router_id 1 # for electing MASTER, highest priority wins. # to be MASTER, make 50 more than other machines. priority 100 virtual_ipaddress { 192.168.1.23/24 } # Invoked to master transition notify_master "/etc/keepalived/bypass_ipvs.sh del 192.168.1.23" # Invoked to backup(slave) transition notify_backup "/etc/keepalived/bypass_ipvs.sh add 192.168.1.23" # Invoked to fault transition notify_fault "/etc/keepalived/bypass_ipvs.sh add 192.168.1.23"}# Virtual IP & Physical Conquest Serversvirtual_server 192.168.1.23 5678 { delay_loop 10 lb_algo wlc # Round Robin lb_kind DR # Direct Routing# persistence_timeout 50 nat_mask 255.255.255.0 protocol TCP# Physical MASTER (Conquest01) real_server 192.168.1.21 5678 { weight 1 TCP_CHECK { connect_timeout 1 connect_port 5678 } }# Physical BACKUP (Conquest02) real_server 192.168.1.22 5678 { weight 1 TCP_CHECK { connect_timeout 1 connect_port 5678 } }}
Conquest02's /etc/keepalived/keepalived.conf
The only difference here are these two lines.
Instead of state MASTER, change it to state BACKUP
Instead of priority 100, change it to priority 50
Next, and Finally, add this script to both Conquest servers and don't forget to make it executable.
BOOM! DONE! FINISHED!