3 Temmuz 2012 Salı

Çoklu Dynamips Servisi için Dynagen Örnek Çalışması


http://stdioe-tr.blogspot.com/2012/07/coklu-cisco-router-simulasyonu-icin.html bağlantısında Çoklu Cisco Router Similasyonu için bir Dynagen & Dynamips örnek çalışmasını anlatmıştım. Bu yazımda ise, birden fazla dynamips servisini birden kullanan bir dynagen uygulaması anlatacağım. Ayrıca dynagen performans optimizasyonu hakkında bir detaydan bahsedeceğim


Bu örnekte 3 adet dynamips servisimiz olacak. Her dynamips servisi ise 3 adet sanal yönlendirici barındıracak ve 9 sanal yönlendirici de birbirine bağlı olacaklar. İlk dynamips servisi R1, R2 ve R3 yönlendiricilerini, ikinci dynamips servisi R4, R5 ve R6 yönlendiricilerini ve üçüncü dynamips servisimiz ise R7, R8 ve R9 yönlendiricilerini içerecekler. Bu 9 yönlendirici konfigüresyon dosyasında 3 erli guruplar halinde ayrı gibi görünselerde, mantıksal olarak her biri bir diğerine bağlı olacaklar.


Topolojimiz ve bağlantılar;


1-) dynamips servislerinin farklı port numaraları ile başlatılması,

ismail@ismail-ThinkPad-T410:~$ dynamips -H 7200 &
ismail@ismail-ThinkPad-T410:~$ dynamips -H 7301 &
ismail@ismail-ThinkPad-T410:~$ dynamips -H 7402 &

2-) dynamips konfigürasyon dosyasının topolojiye göre oluşturulması,

###############################1-Dynamips-1#############################
[localhost:7200]
  udp=10000
  workingdir = /tmp/workingdy1

[[3725]]
  image = /tmp/c3725-adventerprisek9-mz.124-15.T13.bin
  ram = 128
  #idlepc =  ?? # We will talk about this, later.
  ghostios = true
  sparsemem = true
  idlemax = 100 
  disk0=128

 [[Router R1]]
  model = 3725
  console = 2001
  autostart = false
  S0/0 = R2 S0/0

 [[Router R2]]
  model = 3725
  console = 2002
  autostart = false
  S0/0 = R1 S0/0
  S0/1 = R3 S0/0

 [[Router R3]]
  model = 3725
  console = 2003
  autostart = false
  WIC0/0 = WIC-2T
  S0/0 = R2 S0/1 
  S0/1 = R7 S0/1

###############################1-Dynamips-1#############################

###############################2-Dynamips-2#############################
[localhost:7201]
  udp=11000
  workingdir = /tmp/workingdy2

[[3725]]
  image = /tmp/c3725-adventerprisek9-mz.124-15.T13.bin
  ram = 128
  #idlepc =  ?? # We will talk about this, later.
  ghostios = true
  sparsemem = true
  idlemax = 100 
  disk0=128

 [[Router R4]]
  model = 3725
  console = 2004
  autostart = false
  S0/0 = R5 S0/0
  S0/1 = R8 S0/1

 [[Router R5]]
  model = 3725
  console = 2005
  autostart = false
  S0/0 = R4 S0/0
  S0/1 = R6 S0/0

 [[Router R6]]
  model = 3725
  console = 2006
  autostart = false
  S0/0 = R5 0/1

###############################2-Dynamips-2#############################

###############################3-Dynamips-3#############################
[localhost:7202]
  udp=12000
  workingdir = /tmp/workingdy3

[[3725]]
  image = /tmp/c3725-adventerprisek9-mz.124-15.T13.bin
  ram = 128
  #idlepc =  ?? # We will talk about this, later.
  ghostios = true
  sparsemem = true
  idlemax = 100 
  disk0=128

 [[Router R7]]
  model = 3725
  console = 2007
  autostart = false
  S0/0 = R9 S0/0
  S0/1 = R3 S0/1

 [[Router R8]]
  model = 3725
  console = 2008
  autostart = false
  WIC0/0 = WIC-2T
  S0/0 = R9 S0/1
  S0/1 = R4 S0/1

 [[Router R9]]
  model = 3725
  console = 2009
  autostart = false
  S0/0 = R7 0/0
  S0/1 = R8 0/0

###############################3-Dynamips-3#############################

Yukarıdaki konfigürasyon metnini sample2.net ismi ile /tmp dizini altına kayıt ettim. Yine bu örnekte de working dizinlerine ihtiyacım olacak, oluşturuyorum:
ismail@ismail-ThinkPad-T410:~$ mkdir /tmp/workingdy1
ismail@ismail-ThinkPad-T410:~$ mkdir /tmp/workingdy2
ismail@ismail-ThinkPad-T410:~$ mkdir /tmp/workingdy3

3-) Working dizinleri hazır. Şimdi dynagen servisi başlatılmaya hazır. Sorun çözme hakkında bir şeyler göstermek için bir hata yapıyorum,

ismail@ismail-ThinkPad-T410:~$ dynagen /tmp/sample2.net 
Reading configuration file...

Shutdown in progress...
Shutdown completed.
Shutdown in progress...
Shutdown completed.
Shutdown in progress...
Shutdown completed.
*** Warning:  Connecting R6 S0/0 to R5 0/1 resulted in:
 malformed destination interface: R5 0/1
*** Warning:  Connecting R9 S0/0 to R7 0/0 resulted in:
 malformed destination interface: R7 0/0
*** Warning:  Connecting R9 S0/1 to R8 0/0 resulted in:
 malformed destination interface: R8 0/0

*** Error:  errors during loading of the topology file, please correct them
Shutdown in progress...
Error: could not communicate with dynamips server localhost
It may have crashed. Check the dynamips server output.
Exiting...
Press ENTER to exit
[3]+  Segmentation fault      (core dumped) dynamips -H 7202
ismail@ismail-ThinkPad-T410:~$ 

Normalde bir hattın her iki ucu için de bağlantı tanımlayabilirsiniz. Ancak görüldüğü gibi dynagen servisi bu çift tanımlamayı kabul etmiyor. R5 yönlendiricisinde, " S0/1 = R6 S0/0" bağlantısını kaldırıyorum. Aynı şekilde R7 yönlendiricisinden, "  S0/0 = R9 S0/0" bağlantısını ve R8 yönlendiricisinden, " S0/0 = R9 S0/1" bağlantısını kaldırıyorum. Bu düzenlemeden sonra sample2.net dosyası aşağıdaki gibi son halini alıyor;






###############################1-Dynamips-1#############################
[localhost:7200]
  udp=10000
  workingdir = /tmp/workingdy1

[[3725]]
  image = /tmp/c3725-adventerprisek9-mz.124-15.T13.bin
  ram = 128
  #idlepc =  ?? # We will talk about this, later.
  ghostios = true
  sparsemem = true
  idlemax = 100
  disk0=128

 [[Router R1]]
  model = 3725
  console = 2001
  autostart = false
  S0/0 = R2 S0/0

 [[Router R2]]
  model = 3725
  console = 2002
  autostart = false
  #S0/0 = R1 S0/0
  S0/1 = R3 S0/0

 [[Router R3]]
  model = 3725
  console = 2003
  autostart = false
  #S0/0 = R2 S0/1
  S0/1 = R7 S0/1

###############################1-Dynamips-1#############################

###############################2-Dynamips-2#############################
[localhost:7201]
  udp=11000
  workingdir = /tmp/workingdy2

[[3725]]
  image = /tmp/c3725-adventerprisek9-mz.124-15.T13.bin
  ram = 128
  #idlepc =  ?? # We will talk about this, later.
  ghostios = true
  sparsemem = true
  idlemax = 100
  disk0=128

 [[Router R4]]
  model = 3725
  console = 2004
  autostart = false
  S0/0 = R5 S0/0
  S0/1 = R8 S0/1

 [[Router R5]]
  model = 3725
  console = 2005
  autostart = false
  #S0/0 = R4 S0/0
  S0/1 = R6 S0/0

 [[Router R6]]
  model = 3725
  console = 2006
  autostart = false
#  S0/0 = R5 0/1

###############################2-Dynamips-2#############################

###############################3-Dynamips-3#############################
[localhost:7202]
  udp=12000
  workingdir = /tmp/workingdy3

[[3725]]
  image = /tmp/c3725-adventerprisek9-mz.124-15.T13.bin
  ram = 128
  #idlepc =  ?? # We will talk about this, later.
  ghostios = true
  sparsemem = true
  idlemax = 100
  disk0=128

 [[Router R7]]
  model = 3725
  console = 2007
  autostart = false
  S0/0 = R9 S0/0
  #S0/1 = R3 S0/1

 [[Router R8]]
  model = 3725
  console = 2008
  autostart = false
  S0/0 = R9 S0/1
  #S0/1 = R4 S0/1

 [[Router R9]]
  model = 3725
  console = 2009
  autostart = false
#  S0/0 = R7 0/0
#  S0/1 = R8 0/0

###############################3-Dynamips-3#############################


dynamips servislerini 7200, 7201 ve 7202 portları üzerinden zaten çalıştırmışdık. Ancak dynagen servisimiz başarısı olduğu için, bazı dynamips servislerinin de çökmüş olma olasılığı sözkonusu. Bu sebeple öncelikle dynamips servislerinin tamamının çalışmaya devam ettiğinden emin olmalıyız.



ismail@ismail-ThinkPad-T410:~$ ps -ef | grep dynamips
ismail    3811  3756  1 10:15 pts/0    00:00:14 dynamips -H 7200
ismail    3829  3756  1 10:16 pts/0    00:00:14 dynamips -H 7201
ismail    4017  3756  0 10:27 pts/0    00:00:00 grep --color=auto dynamips


Aldığımız cevaba göre, bir dynamips servisi çökmüş ve diğer ikisi çalışmaya devam ediyor. Ben tüm dynamips servislerini öldürüp, hepsini baştan çalıştırmayı tercih ediyorum. Bunun için 3811 ve 3829 PID noları ile tek tek öldürmek de mümkün (kill -9 3811 gibi..) ancak pkill ile tümünü birden öldürmek daha pratik geliyor,



ismail@ismail-ThinkPad-T410:~$ pkill dynamips
[1]-  Terminated              dynamips -H 7200
[2]+  Terminated              dynamips -H 7201
ismail@ismail-ThinkPad-T410:~$ 


ve şimdi çalışan dynamips servisi kalmadı,
onları tekrar baştan başlatabilirim ve dynagen topolojisini yükleyebilirim;



ismail@ismail-ThinkPad-T410:~$ dynamips -H 7201 &
ismail@ismail-ThinkPad-T410:~$ dynamips -H 7202 &
ismail@ismail-ThinkPad-T410:~$ dynamips -H 7203 &
ismail@ismail-ThinkPad-T410:~$ dynagen /tmp/sample2.net 
Reading configuration file...
...
...
...
Dynagen management console for Dynamips and Pemuwrapper 0.11.0
Copyright (c) 2005-2007 Greg Anuzelli, contributions Pavel Skovajsa

=> 


Nihayetinde dynagen topologiyi yükledi. Yukarıda dynagen konsoluna düştüğümüzü görüyorsunuz. Burada "start R1" gibi yönlendirici isimlerine start komutları göndererek onları tek tek başlatabiliriz. Ya da "start /all" ile hepsini birden başlatmak da mümkün.

Bilgisayarımızda 9 adet sanal yönlendirici çalışıyor.. Sanırım şimdi performans için biraz optimizasyon yapmak gerekebilir. Bunun için "idlepc" parametresinin değerini tespit edip dynagen konfigürasyon dosyasında yerine yazmamız gerekiyor. idlepc değeri her yönlendirici için farklı değerler alabilir ve onu öğrenmek için ilgili yönlendiriciyi başlatıp, "idlepc get Rx" komutu ile ilgili yönlendirici için idlepc değerlerini listeyebiliriz.


=> start R1
=> idlepc get R1
Please wait while gathering statistics...

Please wait while gathering statistics...
Done. Suggested idling PC:
   0x60c08128 (count=22)
   0x60c08164 (count=33)
   0x60c08180 (count=35)
   0x60c081c0 (count=66)
   0x62b2823c (count=45)
   0x60c08bf8 (count=23)
   0x60c08c20 (count=20)
   0x614b0e34 (count=38)
   0x62b2b134 (count=20)
   0x6026bca4 (count=30)
Restart the emulator with "--idle-pc=0x60c08128" (for example)
   1: 0x60c08128 [22]
   2: 0x60c08164 [33]
   3: 0x60c08180 [35]
   4: 0x60c081c0 [66]
   5: 0x62b2823c [45]
   6: 0x60c08bf8 [23]
   7: 0x60c08c20 [20]
   8: 0x614b0e34 [38]
   9: 0x62b2b134 [20]
  10: 0x6026bca4 [30]
Potentially better idlepc values marked with "*"
Enter the number of the idlepc value to apply [1-10] or ENTER for no change: 
No changes made
=> 


Eğer listelenen idlepc değerlerinden herhangi birinin önünde "*" karakteri var ise, bu önerilen değerdir, kullanabiliriz. Ağer henüz bir değer önerilmemiş ise, "idlepc get Rx" komutu ile tekrar değerler üretilmesini isteyebiliriz. "*" 'li satır tespit ettiğimizde hedefimize ulaşmışız demektir.

1 yorum:

  1. Router la ilgili problemlerinizde size yardımcı olabilecek bi kaynak: router help

    YanıtlaSil