To me, it looks like PR #1449 is still relevant since it is minimizing the
number of fetches required when the code is run and PR #1356 just made sure
code was run only when it needed to be.

*Will STEVENS*
Lead Developer

*CloudOps* *| *Cloud Solutions Experts
420 rue Guy *|* Montreal *|* Quebec *|* H3J 1S6
w cloudops.com *|* tw @CloudOps_

On Sun, Mar 20, 2016 at 4:55 PM, Remi Bergsma <rberg...@schubergphilis.com>
wrote:

> Hi Martin,
>
> Thanks, will have a look at it!
>
> These scripts are in the systemvm.iso in the CloudStack release, so not in
> the template. If you build a custom package or war to update your
> management servers you can use it already. Otherwise you need the next
> release.
>
> Regards, Remi
>
> Sent from my iPhone
>
> > On 20 Mar 2016, at 21:36, martin kolly <martin.ko...@senselan.ch> wrote:
> >
> > Hi Remi
> >
> > PR #1449 created as requested. Tests in our environment showed that it
> speeds up the router configuration quite a bit.
> >
> > In the meantime https://github.com/apache/cloudstack/pull/1356 seems to
> be merged which resolves CLOUDSTACK-9255. So not sure if PR#1449 is still
> of interest..
> >
> > Do you know when the system vm with these fixes (PR1356) is available on
> http://cloudstack.apt-get.eu/systemvm/ ?
> >
> > regards
> > Martin
> >
> >
> >> On 03/18/2016 09:45 PM, Remi Bergsma wrote:
> >> Hi Martin,
> >>
> >> Thanks for the fix, didn’t catch you attachment first time.
> >>
> >> Would it be possible for you to send a Pull Request? Is this patch
> against master or a release branch? Generally speaking it’s best to make a
> PR against a release branch, 4.7 would be fine I guess in this case. Once
> it’s a PR we can test it.
> >>
> >> Regards,
> >> Remi
> >>
> >>
> >> From: martin kolly <martin.ko...@senselan.ch<mailto:
> martin.ko...@senselan.ch>>
> >> Reply-To: "dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>"
> <dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>>
> >> Date: Friday 18 March 2016 at 11:58
> >> To: "dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>" <
> dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>>
> >> Subject: Issue: CLOUDSTACK-9255 Unable to start VM DomainRouter due to
> error in finalizeStart
> >>
> >> Hi All
> >>
> >> We are facing the same issue as reported by Milamber (Ticket 9255)
> https://issues.apache.org/jira/browse/CLOUDSTACK-9255. When deploying a
> couple of VMs or Port Forwarding's the re-deployment of the router with
> cleanup fails.
> >>
> >> We found that iptables configuration takes a lot of time, this
> eventually leads to a timeout on the management server "Unable to start VM
> DomainRouter due to error in finalizeStart, not retrying"
> >>
> >> Environment:
> >> - Cloudstack 4.8
> >> - KVM (local storage)
> >> - hosts/mgr on Ubuntu 14.04
> >>
> >> We tested with a simple set of four forwarding rules, here the setup:
> >>
> >> root@r-96-VM:~# cat /etc/cloudstack/forwardingrules.json
> >> {
> >>     "185.20.146.56": [
> >>         {
> >>             "internal_ip": "10.100.1.95",
> >>             "internal_ports": "22:22",
> >>             "protocol": "tcp",
> >>             "public_ip": "185.20.146.56",
> >>             "public_ports": "22:22",
> >>             "type": "forward"
> >>         }
> >>     ],
> >>     "185.20.146.79": [
> >>         {
> >>             "internal_ip": "10.100.1.42",
> >>             "internal_ports": "22:22",
> >>             "protocol": "tcp",
> >>             "public_ip": "185.20.146.79",
> >>             "public_ports": "22:22",
> >>             "type": "forward"
> >>         },
> >>         {
> >>             "internal_ip": "10.100.1.42",
> >>             "internal_ports": "8443:8443",
> >>             "protocol": "tcp",
> >>             "public_ip": "185.20.146.79",
> >>             "public_ports": "8443:8443",
> >>             "type": "forward"
> >>         },
> >>         {
> >>             "internal_ip": "10.100.1.42",
> >>             "internal_ports": "53:53",
> >>             "protocol": "udp",
> >>             "public_ip": "185.20.146.79",
> >>             "public_ports": "53:53",
> >>             "type": "forward"
> >>         }
> >>     ],
> >>     "id": "forwardingrules"
> >>
> >> The definition for every port forwarding seems to take at ~1.5 seconds.
> >>
> >> python /opt/cloud/bin/configure.py.timed
> /etc/cloudstack/forwardingrules.json
> >>
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 22 -j
> DNAT --to-destination 10.100.1.42:22
> >> time : 0.000965118408203
> >> -A PREROUTING -d 185.20.146.79/32 -i eth0 -p tcp -m tcp --dport 22 -j
> DNAT --to-destination 10.100.1.42:22
> >> time : 0.395485162735
> >> -A OUTPUT -d 185.20.146.79/32 -p tcp -m tcp --dport 22 -j DNAT
> --to-destination 10.100.1.42:22
> >> time : 0.395533084869
> >> -j SNAT --to-source 10.100.1.1 -A POSTROUTING -s 10.100.1.0/24 -d
> 10.100.1.42/32 -o eth0 -p tcp -m tcp --dport 22
> >> time : 1.16180706024
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 22 -j
> MARK --set-xmark 0x2/0xffffffff
> >> time : 1.16329216957
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 22 -m
> state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
> 0xffffffff
> >> time : 1.16407108307
> >> -A FORWARD -i eth2 -o eth0 -p tcp -m tcp --dport 22 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> >> Total time for creating Policy : 1.53959512711
> >> ----------------------------------------------
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 8443
> -j DNAT --to-destination 10.100.1.42:8443
> >> time : 0.000781059265137
> >> -A PREROUTING -d 185.20.146.79/32 -i eth0 -p tcp -m tcp --dport 8443
> -j DNAT --to-destination 10.100.1.42:8443
> >> time : 0.378201007843
> >> -A OUTPUT -d 185.20.146.79/32 -p tcp -m tcp --dport 8443 -j DNAT
> --to-destination 10.100.1.42:8443
> >> time : 0.37822508812
> >> -j SNAT --to-source 10.100.1.1 -A POSTROUTING -s 10.100.1.0/24 -d
> 10.100.1.42/32 -o eth0 -p tcp -m tcp --dport 8443
> >> time : 1.14627504349
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 8443
> -j MARK --set-xmark 0x2/0xffffffff
> >> time : 1.1477329731
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 8443
> -m state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
> 0xffffffff
> >> time : 1.14850592613
> >> -A FORWARD -i eth2 -o eth0 -p tcp -m tcp --dport 8443 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> >> Total time for creating Policy : 1.52321791649
> >> ----------------------------------------------
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p udp -m udp --dport 53 -j
> DNAT --to-destination 10.100.1.42:53
> >> time : 0.000754117965698
> >> -A PREROUTING -d 185.20.146.79/32 -i eth0 -p udp -m udp --dport 53 -j
> DNAT --to-destination 10.100.1.42:53
> >> time : 0.383729934692
> >> -A OUTPUT -d 185.20.146.79/32 -p udp -m udp --dport 53 -j DNAT
> --to-destination 10.100.1.42:53
> >> time : 0.383754968643
> >> -j SNAT --to-source 10.100.1.1 -A POSTROUTING -s 10.100.1.0/24 -d
> 10.100.1.42/32 -o eth0 -p udp -m udp --dport 53
> >> time : 1.14376091957
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p udp -m udp --dport 53 -j
> MARK --set-xmark 0x2/0xffffffff
> >> time : 1.14526605606
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p udp -m udp --dport 53 -m
> state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
> 0xffffffff
> >> time : 1.14599299431
> >> -A FORWARD -i eth2 -o eth0 -p udp -m udp --dport 53 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> >> Total time for creating Policy : 1.52742600441
> >> ----------------------------------------------
> >> -A PREROUTING -d 185.20.146.56/32 -i eth2 -p tcp -m tcp --dport 22 -j
> DNAT --to-destination 10.100.1.95:22
> >> time : 0.000700950622559
> >> -A PREROUTING -d 185.20.146.56/32 -i eth0 -p tcp -m tcp --dport 22 -j
> DNAT --to-destination 10.100.1.95:22
> >> time : 0.382349014282
> >> -A OUTPUT -d 185.20.146.56/32 -p tcp -m tcp --dport 22 -j DNAT
> --to-destination 10.100.1.95:22
> >> time : 0.382384061813
> >> -j SNAT --to-source 10.100.1.1 -A POSTROUTING -s 10.100.1.0/24 -d
> 10.100.1.95/32 -o eth0 -p tcp -m tcp --dport 22
> >> time : 1.1425909996
> >> -A PREROUTING -d 185.20.146.56/32 -i eth2 -p tcp -m tcp --dport 22 -j
> MARK --set-xmark 0x2/0xffffffff
> >> time : 1.14400196075
> >> -A PREROUTING -d 185.20.146.56/32 -i eth2 -p tcp -m tcp --dport 22 -m
> state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
> 0xffffffff
> >> time : 1.14468812943
> >> -A FORWARD -i eth2 -o eth0 -p tcp -m tcp --dport 22 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> >> Total time for creating Policy : 1.52619600296
> >> ----------------------------------------------
> >>
> >> Having a closer look at configure.py how the iptables rules are
> defined. We think that it is not efficient to lookup these values for every
> policy:
> >>
> >> def forward_vr(self, rule):
> >>
> >> fw1 = "-A PREROUTING -d %s/32 -i %s -p %s -m %s --dport %s -j DNAT
> --to-destination %s:%s" % \
> >>               (
> >>                 rule['public_ip'],
> >>                 self.getDeviceByIp(rule['public_ip']),
> >>                 rule['protocol'],
> >>                 rule['protocol'],
> >>                 self.portsToString(rule['public_ports'], ':'),
> >>                 rule['internal_ip'],
> >>                 self.portsToString(rule['internal_ports'], '-')
> >>               )
> >> fw2 = "-A PREROUTING -d %s/32 -i %s -p %s -m %s --dport %s -j DNAT
> --to-destination %s:%s" % \
> >>               (
> >>                 rule['public_ip'],
> >>              self.getDeviceByIp(rule['internal_ip']),
> >>                 rule['protocol'],
> >>                 rule['protocol'],
> >>                 self.portsToString(rule['public_ports'], ':'),
> >>                 rule['internal_ip'],
> >>              self.portsToString(rule['internal_ports'], '-')
> >> .....
> >>
> >>
> >> Defining these values once at the beginning would be much more
> efficient, no ?
> >>
> >> def forward_vr(self, rule):
> >>
> >>        pub_interface = self.getDeviceByIp(rule['public_ip'])
> >>        int_interface = self.getDeviceByIp(rule['internal_ip'])
> >>        pub_ports = self.portsToString(rule['public_ports'], ':')
> >>        int_ports = self.portsToString(rule['internal_ports'], '-')
> >>        int_network = self.getNetworkByIp(rule['internal_ip'])
> >>
> >>  fw1 = "-A PREROUTING -d %s/32 -i %s -p %s -m %s --dport %s -j DNAT
> --to-destination %s:%s" % \
> >>               (
> >>                 rule['public_ip'],
> >>                 pub_interface,
> >>                 rule['protocol'],
> >>                 rule['protocol'],
> >>                 pub_ports,
> >>                 rule['internal_ip'],
> >>                 int_ports
> >>               )
> >>
> >>  fw2 = "-A PREROUTING -d %s/32 -i %s -p %s -m %s --dport %s -j DNAT
> --to-destination %s:%s" % \
> >>               (
> >>                 rule['public_ip'],
> >>                 int_interface,
> >>                 rule['protocol'],
> >>                 rule['protocol'],
> >>                 pub_ports,
> >>                 rule['internal_ip'],
> >>                 int_ports
> >>               )
> >> .....
> >>
> >> If we run the configure.py with these modifications we have the
> following:
> >>
> >> root@r-96-VM:~#  python /opt/cloud/bin/configure_modified.py
> /etc/cloudstack/forwardingrules.json
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 22 -j
> DNAT --to-destination 10.100.1.42:22
> >> time : 0.000349044799805
> >> -A PREROUTING -d 185.20.146.79/32 -i eth0 -p tcp -m tcp --dport 22 -j
> DNAT --to-destination 10.100.1.42:22
> >> time : 0.000686883926392
> >> -A OUTPUT -d 185.20.146.79/32 -p tcp -m tcp --dport 22 -j DNAT
> --to-destination 10.100.1.42:22
> >> time : 0.000943899154663
> >> -j SNAT --to-source 10.100.1.1 -A POSTROUTING -s 10.100.1.0/24 -d
> 10.100.1.42/32 -o eth0 -p tcp -m tcp --dport 22
> >> time : 0.00131487846375
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 22 -j
> MARK --set-xmark 0x2/0xffffffff
> >> time : 0.00161194801331
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 22 -m
> state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
> 0xffffffff
> >> time : 0.00186896324158
> >> -A FORWARD -i eth2 -o eth0 -p tcp -m tcp --dport 22 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> >> Total time for creating Policy : 0.00216102600098
> >> ----------------------------------------------
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 8443
> -j DNAT --to-destination 10.100.1.42:8443
> >> time : 0.000232934951782
> >> -A PREROUTING -d 185.20.146.79/32 -i eth0 -p tcp -m tcp --dport 8443
> -j DNAT --to-destination 10.100.1.42:8443
> >> time : 0.000478029251099
> >> -A OUTPUT -d 185.20.146.79/32 -p tcp -m tcp --dport 8443 -j DNAT
> --to-destination 10.100.1.42:8443
> >> time : 0.00071907043457
> >> -j SNAT --to-source 10.100.1.1 -A POSTROUTING -s 10.100.1.0/24 -d
> 10.100.1.42/32 -o eth0 -p tcp -m tcp --dport 8443
> >> time : 0.000991106033325
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 8443
> -j MARK --set-xmark 0x2/0xffffffff
> >> time : 0.00136613845825
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p tcp -m tcp --dport 8443
> -m state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
> 0xffffffff
> >> time : 0.00174498558044
> >> -A FORWARD -i eth2 -o eth0 -p tcp -m tcp --dport 8443 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> >> Total time for creating Policy : 0.00219202041626
> >> ----------------------------------------------
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p udp -m udp --dport 53 -j
> DNAT --to-destination 10.100.1.42:53
> >> time : 0.000226974487305
> >> -A PREROUTING -d 185.20.146.79/32 -i eth0 -p udp -m udp --dport 53 -j
> DNAT --to-destination 10.100.1.42:53
> >> time : 0.000502824783325
> >> -A OUTPUT -d 185.20.146.79/32 -p udp -m udp --dport 53 -j DNAT
> --to-destination 10.100.1.42:53
> >> time : 0.000762939453125
> >> -j SNAT --to-source 10.100.1.1 -A POSTROUTING -s 10.100.1.0/24 -d
> 10.100.1.42/32 -o eth0 -p udp -m udp --dport 53
> >> time : 0.00103092193604
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p udp -m udp --dport 53 -j
> MARK --set-xmark 0x2/0xffffffff
> >> time : 0.00134587287903
> >> -A PREROUTING -d 185.20.146.79/32 -i eth2 -p udp -m udp --dport 53 -m
> state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
> 0xffffffff
> >> time : 0.00158596038818
> >> -A FORWARD -i eth2 -o eth0 -p udp -m udp --dport 53 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> >> Total time for creating Policy : 0.00182485580444
> >> ----------------------------------------------
> >> -A PREROUTING -d 185.20.146.56/32 -i eth2 -p tcp -m tcp --dport 22 -j
> DNAT --to-destination 10.100.1.95:22
> >> time : 0.000264167785645
> >> -A PREROUTING -d 185.20.146.56/32 -i eth0 -p tcp -m tcp --dport 22 -j
> DNAT --to-destination 10.100.1.95:22
> >> time : 0.000508069992065
> >> -A OUTPUT -d 185.20.146.56/32 -p tcp -m tcp --dport 22 -j DNAT
> --to-destination 10.100.1.95:22
> >> time : 0.000750064849854
> >> -j SNAT --to-source 10.100.1.1 -A POSTROUTING -s 10.100.1.0/24 -d
> 10.100.1.95/32 -o eth0 -p tcp -m tcp --dport 22
> >> time : 0.00102114677429
> >> -A PREROUTING -d 185.20.146.56/32 -i eth2 -p tcp -m tcp --dport 22 -j
> MARK --set-xmark 0x2/0xffffffff
> >> time : 0.00138115882874
> >> -A PREROUTING -d 185.20.146.56/32 -i eth2 -p tcp -m tcp --dport 22 -m
> state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
> 0xffffffff
> >> time : 0.00165915489197
> >> -A FORWARD -i eth2 -o eth0 -p tcp -m tcp --dport 22 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> >> Total time for creating Policy : 0.00196814537048
> >> ----------------------------------------------
> >>
> >> Location of configure.py:
> >>
> https://github.com/apache/cloudstack/blob/master/systemvm/patches/debian/config/opt/cloud/bin/configure.py
> >>
> >> The modified scripts are attached. Thanks for your feedback.
> >>
> >> regards
> >> Martin
> >
>

Reply via email to