Sorry

This feed does not validate.

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendation.

Source: http://feeds.feedburner.com/SaschaDittmann

  1. <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. >
  9.  
  10. <channel>
  11. <title>Sascha Dittmann</title>
  12. <atom:link href="https://www.sascha-dittmann.de/feed/" rel="self" type="application/rss+xml" />
  13. <link>https://www.sascha-dittmann.de</link>
  14. <description>Über .NET, SQL Server und die Cloud</description>
  15. <lastBuildDate>Tue, 05 Sep 2017 17:08:10 +0000</lastBuildDate>
  16. <language>de-DE</language>
  17. <sy:updatePeriod>
  18. hourly </sy:updatePeriod>
  19. <sy:updateFrequency>
  20. 1 </sy:updateFrequency>
  21. <generator>https://wordpress.org/?v=6.1.4</generator>
  22. <item>
  23. <title>Time Machine Backups nach Microsoft Azure</title>
  24. <link>https://www.sascha-dittmann.de/2017/09/time-machine-backups-nach-microsoft-azure/</link>
  25. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  26. <pubDate>Tue, 05 Sep 2017 16:54:15 +0000</pubDate>
  27. <category><![CDATA[Cloud Computing]]></category>
  28. <category><![CDATA[Apple]]></category>
  29. <category><![CDATA[Azure File Storage]]></category>
  30. <category><![CDATA[Backup]]></category>
  31. <category><![CDATA[Cloud]]></category>
  32. <category><![CDATA[MacOS]]></category>
  33. <category><![CDATA[Microsoft Azure]]></category>
  34. <category><![CDATA[SMB]]></category>
  35. <category><![CDATA[Time Machine]]></category>
  36. <guid isPermaLink="false">https://www.sascha-dittmann.de/?p=12039</guid>
  37.  
  38. <description><![CDATA[Seit einigen Jahren verwende ich eine Apple Time Capsule, um meine Time Machine Backups an einem zentralen Ort speichern zu können.
  39. Bislang hatte das für mich auch vollkommen ausgereicht.
  40. Seitdem ich jedoch immer mehr unterwegs bin, habe ich nach einer Lösung gesucht, die ich auch von unterwegs nutzen kann.
  41. In diesem Blog Post zeige ich deshalb, wie man Time Machine Backups nach Microsoft Azure machen kann.]]></description>
  42. <content:encoded><![CDATA[<p style="display: inline-block;">
  43. <img decoding="async" alt="Time Machine Backups nach Microsoft Azure" class="alignleft size-thumbnail" height="150" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure-150x150.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; border: 0px none;" width="150" /><strong>Seit einigen Jahren verwende ich eine Apple Time Capsule, um meine Time Machine Backups an einem zentralen Ort speichern zu k&ouml;nnen.<br />
  44. Bislang hatte das f&uuml;r mich auch vollkommen ausgereicht.<br />
  45. Seitdem ich jedoch immer mehr unterwegs bin, habe ich nach einer L&ouml;sung gesucht, die ich auch von unterwegs nutzen kann. </strong>
  46. </p>
  47. <p>
  48. Anfangs habe ich hierf&uuml;r eine externe Platte mit USB Anschluss benutzt.<br />
  49. Jedoch war dies einerseits nicht besonders praktisch, da ich ein zus&auml;tzliches Ger&auml;t mit mir rumschleppen musste.<br />
  50. Und andererseits ist es nicht besonders sinnvoll die Backups, sowie das zu sichernde MacBook, am gleichen Ort aufzubewahren.
  51. </p>
  52. <p>
  53. Deshalb m&ouml;chte ich heute zeigen, wie man Time Machine Backups nach Microsoft Azure sichern kann.
  54. </p>
  55. <p>&nbsp;</p>
  56. <h2>
  57. Einen Fileshare im Azure Portal anlegen<br />
  58. </h2>
  59. <p style="display: inline-block;">
  60. <a href="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure01.png" target="_blank"><img decoding="async" loading="lazy" alt="New Azure Storage Account" class="alignleft size-medium wp-image-12044" height="177" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure01-300x177.png" style="border: 0px none;" width="300" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure01-300x177.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure01-768x454.png 768w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure01-1024x605.png 1024w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure01-150x89.png 150w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure01.png 1355w" sizes="(max-width: 300px) 100vw, 300px" /></a>Zuerst m&uuml;sste hierf&uuml;r ein Storage Account anlegen.<br />
  61. Dazu meldet ihr euch am Azure Portal an.<br />
  62. Anschlie&szlig;end klickt ihr auf das Plus-Symbol (oben links), dann auf Storage und dann auf Storage Account.
  63. </p>
  64. <p style="display: inline-block;">In dem ge&ouml;ffneten Blade gebt ihr den Namen des neuen Storage Accounts, die Ressource-Gruppe und die Azure-Region an.<br />
  65. Als Replikationstyp langen LRS (f&uuml;r drei Kopien in der ausgew&auml;hlten Region) oder GRS (f&uuml;r drei zus&auml;tzliche Kopien in der Geschwisterregion) vollkommen aus.
  66. </p>
  67. <p><a href="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure02.png" target="_blank"><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure02-474x1024.png" alt="" width="474" height="1024" class="alignnone size-large wp-image-12045"  style="border: 0px none;" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure02-474x1024.png 474w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure02-139x300.png 139w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure02-768x1659.png 768w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure02-69x150.png 69w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure02.png 840w" sizes="(max-width: 474px) 100vw, 474px" /></a></p>
  68. <p>
  69. Sobald das Storage Account erstellt ist, navigiert ihr zu dem Files-Dienst&#8230;
  70. </p>
  71. <p>
  72. <a href="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure03.png" target="_blank"><img decoding="async" loading="lazy" alt="Azure File Service" class="alignnone size-medium wp-image-12046" height="114" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure03-300x114.png" style="border: 0px none;" width="300" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure03-300x114.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure03-150x57.png 150w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure03.png 730w" sizes="(max-width: 300px) 100vw, 300px" /></a>
  73. </p>
  74. <p>
  75. &#8230;und legt dort einen neuen Fileshare an.
  76. </p>
  77. <p>
  78. <a href="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure04.png" target="_blank"><img decoding="async" loading="lazy" alt="Create File Share" class="alignnone size-medium wp-image-12047" height="215" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure04-300x215.png" style="border: 0px none;" width="300" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure04-300x215.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure04-768x552.png 768w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure04-150x108.png 150w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure04.png 1011w" sizes="(max-width: 300px) 100vw, 300px" /></a>
  79. </p>
  80. <p>&nbsp;</p>
  81. <h2>Fileshare mounten</h2>
  82. <p>
  83. Anschlie&szlig;end k&ouml;nnt ihr im Finder im MacOS euch mit dem Fileshare verbinden.</p>
  84. <p><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure05.png" alt="Connect to Server... (Menu)" width="612" height="467" class="alignnone size-full wp-image-12048" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure05.png 612w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure05-300x229.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure05-150x114.png 150w" sizes="(max-width: 612px) 100vw, 612px" /></p>
  85. <p><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure06.png" alt="Connect to Server... (Dialog)" width="486" height="231" class="alignnone size-full wp-image-12049" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure06.png 486w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure06-300x143.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure06-150x71.png 150w" sizes="(max-width: 486px) 100vw, 486px" /></p>
  86. <p>
  87. Ihr werdet dann aufgefordert den Benutzernamen und das Passwort f&uuml;r die Verbindung anzugeben.<br />Welche ihr am besten auch in der Keychain speichert.</p>
  88. <p><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure07.png" alt="Attempting to connect to the server" width="420" height="162" class="alignnone size-full wp-image-12050" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure07.png 420w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure07-300x116.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure07-150x58.png 150w" sizes="(max-width: 420px) 100vw, 420px" /></p>
  89. <p><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure08.png" alt="Enter user credentials" width="430" height="283" class="alignnone size-full wp-image-12051" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure08.png 430w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure08-300x197.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure08-150x99.png 150w" sizes="(max-width: 430px) 100vw, 430px" /></p>
  90. <p>
  91. Beides findet ihr unter Access Keys im Azure Portal.
  92. </p>
  93. <p><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure09-1024x251.png" alt="Azure Storage Access Keys" width="618" height="151" class="alignnone size-large wp-image-12052" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure09-1024x251.png 1024w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure09-300x74.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure09-768x189.png 768w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure09-150x37.png 150w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure09.png 1507w" sizes="(max-width: 618px) 100vw, 618px" /></p>
  94. <blockquote>
  95. <p>Damit ihr euch mit dem Fileshare verbinden k&ouml;nnt, muss der Port 445 in den entsprechenden Firewalls freigegeben sein.
  96. </p>
  97. </blockquote>
  98. <p>&nbsp;</p>
  99. <h2>Erstellen eines Sparse-Bundles</h2>
  100. <p>Da die Apple Time Machine nur Datensicherungen auf einen Datentr&auml;ger mit HFS+ Dateisystem durchf&uuml;hrt, m&uuml;ssen wir als n&auml;chstes ein Sparse-Bundle erstellen.
  101. </p>
  102. <p>Dazu &ouml;ffnen wir am besten ein Terminalfenster und wechseln in den Mount Point des Azure-Fileshares.
  103. </p>
  104. <pre>
  105. cd /Volumes/backups/
  106. </pre>
  107. <p>
  108. Anschlie&szlig;end erstellen wir mit folgendem Befehl ein Sparse-Bundle.<br />
  109. Dieses sollte mindestens doppelt so gro&szlig; sein wie die zu sichernde Festplatte.
  110. </p>
  111. <pre>
  112. hdiutil create -size 1t -type SPARSEBUNDLE -fs "HFS+J" -volname AzureTimeCapsule AzureTimeCapsule.sparsebundle
  113. </pre>
  114. <blockquote>
  115. <p>
  116. Falls dabei Timeouts auftreten, kann man das Sparse-Bundle auch vorerst lokal erstellen und anschlie&szlig;end in den Fileshare verschieben.
  117. </p>
  118. </blockquote>
  119. <p>
  120. Danach kann man das Sparse-Bundle mit folgendem Befehl mounten oder ihr macht alternativ einen Doppelklick auf das Sparse-Bundel im Finder.
  121. </p>
  122. <pre>
  123. hdiutil attach -mountpoint /Volumes/AzureTimeCapsule /Volumes/backups/AzureTimeCapsule.sparsebundle
  124. </pre>
  125. <p>
  126. Zu guter Letzt, muss man die neue &quot;Festplatte&quot; nur noch als weiteres Ziel der Time Machine hinzuf&uuml;gen.
  127. </p>
  128. <pre>
  129. sudo tmutil setdestination -a /Volumes/AzureTimeCapsule
  130. </pre>
  131. <p><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure10.png" alt="Sparse-Bundle in der Time Machine" width="668" height="440" class="alignnone size-full wp-image-12053" srcset="https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure10.png 668w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure10-300x198.png 300w, https://media.sascha-dittmann.de/blog/2017/09/TimeMachineToAzure10-150x99.png 150w" sizes="(max-width: 668px) 100vw, 668px" /></p>
  132. <blockquote>
  133. <p>
  134. Beim ersten Backup, sollte man eine Internetverbindung mit ausreichender Bandbreite zur Verf&uuml;gung haben, da dies einige Stunden &#8211; wenn nicht sogar Tage &#8211; dauern kann.
  135. </p>
  136. </blockquote>
  137. <h2>Video Anleitung (Englisch)</h2>
  138. <p>Wer das Ganze auch noch mal als Video sehen möchte, kann sich <a href="https://youtu.be/_TDi3Et9-cs" target="_blank">hier</a> mein englisches YouTube-Video dazu ansehen.</p>
  139. <p>&nbsp;</p>
  140. <hr />
  141. <div style="display: inline-block;">
  142. <div style="float: left;">
  143. <img decoding="async" alt="Weitere Informationen" src="https://media.sascha-dittmann.de/blog/Shared/info.png" />
  144. </div>
  145. <div style="float: left;">
  146. <p>
  147. Weitere Informationen:
  148. </p>
  149. <ul>
  150. <li>
  151. <a href="https://azure.microsoft.com/en-us/services/storage/files/" rel="nofollow" target="_blank">Microsoft Azure File Storage</a>
  152. </li>
  153. <li>
  154. <a href="https://de.wikipedia.org/wiki/Time_Machine_(Apple)" rel="nofollow" target="_blank">Wikipedia: Time Machine (Apple)</a>
  155. </li>
  156. <li>
  157. <a href="https://youtu.be/_TDi3Et9-cs" target="_blank">YouTube: Time Machine Backups to Microsoft Azure (English)</a>
  158. </li>
  159. </ul></div>
  160. </div>
  161. ]]></content:encoded>
  162. </item>
  163. <item>
  164. <title>Azure Storage Account (Classic) nach Azure Resource Manager (ARM) migrieren</title>
  165. <link>https://www.sascha-dittmann.de/2017/02/azure-storage-account-classic-nach-azure-resource-manager-arm-migrieren/</link>
  166. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  167. <pubDate>Tue, 21 Feb 2017 06:52:53 +0000</pubDate>
  168. <category><![CDATA[Cloud Computing]]></category>
  169. <category><![CDATA[ARM]]></category>
  170. <category><![CDATA[Blob Storage]]></category>
  171. <category><![CDATA[Microsoft Azure]]></category>
  172. <category><![CDATA[PowerShell]]></category>
  173. <guid isPermaLink="false">https://www.sascha-dittmann.de/?p=12010</guid>
  174.  
  175. <description><![CDATA[Am vergangenen Wochenende wollte ich endlich mal meine private Azure Subscription aufräumen, die ich seit vielen Jahren für meine Community Projekte nutze. Dabei bin ich über ein Problem mit den "alten" Storage Accounts gestolpert, dass sich durch eine Migration auf ARM beheben lässt.
  176. Deshalb möchte ich in diesem Blog Post beschreiben, wie man ein Azure Storage Account (Classic) auf den Azure Resource Manager (ARM) migrieren kann.]]></description>
  177. <content:encoded><![CDATA[<p style="display: inline-block;">
  178. <img decoding="async" loading="lazy" alt="Azure Storage Account (Classic) nach Azure Resource Manager (ARM) migrieren" class="alignleft size-thumbnail" height="150" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage-150x150.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; border: 0px none;" width="150" /><strong>Am vergangenen Wochenende wollte ich endlich mal meine private Azure Subscription aufr&auml;umen, die ich seit vielen Jahren f&uuml;r meine Community Projekte nutze. Dabei bin ich &uuml;ber ein Problem mit den &quot;alten&quot; Storage Accounts gestolpert, dass sich durch eine Migration auf ARM beheben l&auml;sst.<br />
  179. Deshalb m&ouml;chte ich in diesem Blog Post beschreiben, wie man ein Azure Storage Account (Classic) auf den Azure Resource Manager (ARM) migrieren kann.</strong>
  180. </p>
  181. <h2>
  182. Wo lag eigentlich das Problem?<br />
  183. </h2>
  184. <p>
  185. Nachdem sich in meiner &auml;ltesten Azure Subscription doch einige Altlasten &uuml;ber die letzten Jahre angesammelt hatten, wollte ich am vergangenen Wochenende endlich mal Ordnung schaffen.<br />
  186. Dazu nahm ich mir als erstes die &quot;Default-&hellip;&quot; Ressourcegruppen vor.<br />
  187. Kurzum die Dienste, die noch mit den alten ASM APIs erstellt worden sind.
  188. </p>
  189. <p>
  190. Einige der darin befindlichen Dienste, wollte ich in neue Ressourcegruppen umziehen&hellip;<br />
  191. <a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_00.png" target="_blank"><img decoding="async" loading="lazy" alt="Move to another resource group" height="188" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_00-300x188.png" width="300" /></a>
  192. </p>
  193. <p>
  194. &nbsp;
  195. </p>
  196. <p>
  197. Bei diesem Vorhaben, bin ich allerdings &uuml;ber die Meldung &quot;Resource that cannot be moved&quot; gestolpert&hellip;<br />
  198. <a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_01.png" target="_blank"><img decoding="async" loading="lazy" alt="Resource that cannot be moved" height="300" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_01-264x300.png" width="264" /></a>
  199. </p>
  200. <p>
  201. Das Ganze brachte mich auf die Frage: <br />Kann man eigentlich ein klassisches Azure Storage Account nach ARM migrieren?<br />
  202. Ein wenig Nachforschung zeigte schnell:<br />Ja, das geht.</p>
  203. <p>
  204. Dazu m&uuml;ssen, wie so oft, die <a href="https://docs.microsoft.com/en-us/powershell/azureps-cmdlets-docs/" target="_blank">PowerShell Cmdlets f&uuml;r Azure</a> installiert sein.
  205. </p>
  206. <p>
  207. &nbsp;
  208. </p>
  209. <h2>
  210. Registrierung des Azure Resource Providers</h2>
  211. <p>
  212. Zuerst &ouml;ffnet man das PowerShell Eingabefenster und loggt man sich in die entsprechende Azure Subscription f&uuml;r den Azure Resource Manager ein&hellip;
  213. </p>
  214. <pre>
  215. Login-AzureRmAccount
  216. Select-AzureRmSubscription -SubscriptionName &quot;&lt;Name der Subscription&gt;&quot;</pre>
  217. <p>
  218. Anschlie&szlig;end muss der entsprechende Azure Resource Provider registriert werden&hellip;
  219. </p>
  220. <pre>
  221. Register-AzureRmResourceProvider -ProviderNamespace Microsoft.ClassicInfrastructureMigrate</pre>
  222. <p>
  223. Die Registrierung passiert dann asynchron im Hintergrund.<br />
  224. Um zu sehen, wann dies beendet ist, kann folgender Befehl ausgef&uuml;hrt werden&hellip;
  225. </p>
  226. <pre>
  227. Get-AzureRmResourceProvider -ProviderNamespace Microsoft.ClassicInfrastructureMigrate</pre>
  228. <p>
  229. Sobald der Azure Resource Provider registriert ist, kann mit der Migration losgelegt werden&hellip;<br />
  230. <a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_02.png" target="_blank"><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_02-300x46.png" alt="Azure PowerShell Provider is registered" width="300" height="46" /></a>
  231. </p>
  232. <p>
  233. &nbsp;
  234. </p>
  235. <h2>
  236. Migration des Azure Storage Accounts<br />
  237. </h2>
  238. <p>Beim Azure Resource Manager hatte wir uns ja bereits für die Provider Registrierung angemeldet.<br />Jetzt muss man noch das Gleiche bei den klassischen ASM APIs machen&hellip;</p>
  239. <pre>
  240. Add-AzureAccount
  241. Select-AzureSubscription -SubscriptionName &quot;&lt;Name der Subscription&gt;&quot;</pre>
  242. <p>Zur Kontrolle noch ein kurzer Blick in das Azure Portal und los gehts&hellip;<br />
  243. <a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_03.png" target="_blank"><img decoding="async" loading="lazy" alt="Azure Portal - Storage Accounts (classic)" height="185" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_03-300x185.png" width="300" /></p>
  244. <p></a></p>
  245. <p>Die Migration läuft in zwei Schritten ab.<br />In Schritt Eins muss das entsprechende Storage Account mit folgendem Befehl vorbereitet werden&hellip;</p>
  246. <pre>
  247. Move-AzureStorageAccount -Prepare -StorageAccountName &quot;saschadittmann&quot;</pre>
  248. <p>Das dauert einen Moment und sollte mit folgender Meldung quittiert werden&hellip;<br /><a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_04.png" target="_blank"><img decoding="async" loading="lazy" alt="Azure Storage Account (Prepared)" height="41" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_04-300x41.png" width="300" /></a>
  249. </p>
  250. <p>Eine erneute Kontrolle im Azure Portal zeigt, dass jetzt zwei Azure Storage Accounts mit dem gleichem Namen existieren.<br />Das neue Azure Storage Account wurde außerdem in einer eigenen bzw. neuen Ressourcegruppe hinzugefügt.<br />
  251. <a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_05.png" target="_blank"><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_05-300x186.png" alt="Azure Portal - Storage Accounts (Both)" width="300" height="186" /></a></p>
  252. <p>Jetzt sollte man ausführlich prüfen, ob man mit dem Migrationsergebnis zufrieden ist.</p>
  253. <p>Wenn ja, kann man mit Schritt Zwei die Migration abschließen&hellip;</p>
  254. <pre>
  255. Move-AzureStorageAccount -Commit -StorageAccountName &quot;saschadittmann&quot;</pre>
  256. <p>&hellip; oder rückgängig machen &hellip;</p>
  257. <pre>
  258. Move-AzureStorageAccount -Abort -StorageAccountName &quot;saschadittmann&quot;</pre>
  259. <p>Auch das wird wieder entsprechend von PowerShell quittiert.<br /> <br />
  260. <a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_06.png" target="_blank"><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_06-300x44.png" alt="Azure Storage Account (Committed)" width="300" height="44" /></a></p>
  261. <p>Im Azure Portal sollte jetzt auch nur das neue Storage Account zu sehen sein&hellip;<br /><a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_07.png" target="_blank"><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_07-300x196.png" alt="Azure Portal - Storage Accounts (New)" width="300" height="196" /></a></p>
  262. <p>Zu guter Letzt kann das neue Storage Account im Azure Portal, oder auch via PowerShell, umgezogen werden&hellip;</p>
  263. <pre>
  264. Get-AzureRmResource -ResourceType &quot;Microsoft.Storage/storageAccounts&quot; `
  265.                    -ResourceName &quot;saschadittmann&quot;  `
  266.                    -ResourceGroupName &quot;saschadittmann-Migrated&quot; `
  267. | Move-AzureRmResource -DestinationResourceGroupName &quot;saschadittmann&quot;</pre>
  268. <p><a href="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_08.png" target="_blank"><img decoding="async" loading="lazy" src="https://media.sascha-dittmann.de/blog/2017/02/MigrateStorage_08-300x46.png" alt="Azure Storage Account moved to new Resource Group" width="300" height="46" /></a></p>
  269. <hr />
  270. <div style="display: inline-block;">
  271. <div style="float: left;">
  272. <img decoding="async" alt="Weitere Informationen" src="https://media.sascha-dittmann.de/blog/Shared/info.png" />
  273. </div>
  274. <div style="float: left;">
  275. <p>
  276. Weitere Informationen:
  277. </p>
  278. <ul>
  279. <li>
  280. <a href="https://docs.microsoft.com/en-us/powershell/azureps-cmdlets-docs/" target="_blank" rel="nofollow">Get started with Azure PowerShell cmdlets</a>
  281. </li>
  282. <li><a href="https://docs.microsoft.com/en-us/powershell/servicemanagement/azure.service/v2.1.0/move-azurestorageaccount" target="_blank" rel="nofollow">Azure PowerShell Cmdlet: Move-AzureStorageAccount</a></li>
  283. </ul></div>
  284. </div>
  285. ]]></content:encoded>
  286. </item>
  287. <item>
  288. <title>SQL Saturday #409 Rheinland &#8211; Slides und Demos</title>
  289. <link>https://www.sascha-dittmann.de/2015/07/sql-saturday-409-rheinland-slides-und-demos/</link>
  290. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  291. <pubDate>Sun, 12 Jul 2015 09:15:41 +0000</pubDate>
  292. <category><![CDATA[.NET]]></category>
  293. <category><![CDATA[Cloud Computing]]></category>
  294. <category><![CDATA[SQL Server]]></category>
  295. <category><![CDATA[Big Data]]></category>
  296. <category><![CDATA[Cloud]]></category>
  297. <category><![CDATA[Community]]></category>
  298. <category><![CDATA[DocumentDB]]></category>
  299. <category><![CDATA[Microsoft Azure]]></category>
  300. <category><![CDATA[NoSQL]]></category>
  301. <guid isPermaLink="false">http://www.sascha-dittmann.de/?p=11712</guid>
  302.  
  303. <description><![CDATA[Vergangenen Samstag fand der dritte deutsche SQL Saturday statt. Wie auch im letzten Jahr konnte dafür als Austragungsort die Hochschule Bonn-Rhein-Sieg genutzt werden. Gemeinsam mit Alexander Karl durfte ich dort eine Session zum Thema "SQL Server vs. Azure DocumentDB – Ein Battle zwischen XML und JSON" halten. Die verwendeten Slides und Code Beispiele findet ihr in diesem Blog Post.]]></description>
  304. <content:encoded><![CDATA[<p style="display: inline-block;">
  305. <img decoding="async" loading="lazy" alt="SQL Saturday #409 Rheinland" class="alignleft size-thumbnail wp-image-11742" height="150" src="https://media.sascha-dittmann.de/blog/2015/06/SQLSat409-150x150.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; border: 0px none;" width="150" srcset="https://media.sascha-dittmann.de/blog/2015/06/SQLSat409-150x150.png 150w, https://media.sascha-dittmann.de/blog/2015/06/SQLSat409-55x55.png 55w" sizes="(max-width: 150px) 100vw, 150px" /><strong>Am Samstag, dem 13. Juni 2015, fand der dritte deutsche <a href="http://www.sqlsaturday.com/409/eventhome.aspx" rel="nofollow" target="_blank">SQL Saturday</a> statt. Wie auch im letzten Jahr konnte daf&uuml;r als Austragungsort die Hochschule Bonn-Rhein-Sieg genutzt werden.<br />
  306. Gemeinsam mit Alexander Karl durfte ich dort eine Session zum Thema &quot;SQL Server vs. Azure DocumentDB &ndash; Ein Battle zwischen XML und JSON&quot; halten.<br />
  307. Die verwendeten Slides und Code Beispiele findet ihr in diesem Blog Post.</strong>
  308. </p>
  309. <h2>
  310. IoT Camp/Hackathon: Das Internet der Dinge live erleben<br />
  311. </h2>
  312. <p>
  313. Doch bevor es mit dem eigentlichen SQL Saturday los ging, fanden am&nbsp;Tag davor zwei Pre-Conference Workshops statt.<br />
  314. Gemeinsam mit&nbsp;<a href="http://oliviaklose.com" target="_blank">Olivia Klose</a>&nbsp;und&nbsp;<a href="https://kostjaklein.wordpress.com" target="_blank">Kostja Klein</a> habe ich das IoT Camp mitgestalten d&uuml;rfen.
  315. </p>
  316. <p>
  317. In diesem Workshop wurde erl&auml;utert, welche Typen von IoT L&ouml;sungen es gibt und wie man sie realisiert. An praktischen Beispielen wurden verschiedene L&ouml;sungen demonstriert und welche Anforderungen an die einzelnen Typen gestellt werden. Schwerpunkt lag dabei auf der praktischen Umsetzung auf Basis von Microsoft Azure und richtete sich sowohl an den Hobbyisten als auch an den Profi, der kommerzielle und hoch verf&uuml;gbare L&ouml;sungen entwickeln muss.
  318. </p>
  319. <p>
  320. <iframe loading="lazy" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/aFeWqJIIl6g" width="560"></iframe>
  321. </p>
  322. <p>
  323. Mehr dazu gibt es auf <a href="http://oliviaklose.azurewebsites.net/techcamp-internet-of-things/" target="_blank">Olivia&#39;s Blog</a>.
  324. </p>
  325. <p>
  326. &nbsp;
  327. </p>
  328. <h2>
  329. SQL Server vs. Azure DocumentDB &ndash; Ein Battle zwischen XML und JSON<br />
  330. </h2>
  331. <p>
  332. Am Samstag waren dann <a href="https://www.xing.com/profile/Alexander_Karl6" rel="nofollow" target="_blank">Alexander Karl</a> und ich an der Reihe&#8230;<br />
  333. Hier haben wir einen Vergleich zwischen SQL Server XML und der Microsoft Azure DocumentDB gezogen.
  334. </p>
  335. <h3>
  336. Abstract<br />
  337. </h3>
  338. <p>
  339. Seit dem SQL Server 2000 hielt St&uuml;ck f&uuml;r St&uuml;ck die XML-Unterst&uuml;tzung Einzug in die Microsoft RDBMS Welt.<br />
  340. Mit der Azure DocumentDB kam die zweite, hauseigene NoSQL-Datenbank in der Microsoft Cloud hinzu, welche die Daten im JSON-Format verarbeitet.<br />
  341. In dieser Session werden wir anhand eines Praxisbeispiels step-by-step, d.h. von den vorbereitenden Schritten, &uuml;ber das Schreiben bis hin zum Lesen der Daten, diese beiden Technologien gegen&uuml;berstellen. Dabei arbeiten wir die Vor- und Nachteile der einzelnen Ans&auml;tze heraus und zeigen Best Practices auf.
  342. </p>
  343. <h3>
  344. Slides<br />
  345. </h3>
  346. <p>
  347. <iframe loading="lazy" allowfullscreen="" frameborder="0" height="488" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/xvLKZbHJm5YrJf" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" width="585"></iframe>
  348. </p>
  349. <hr />
  350. <div style="display:inline-block;">
  351. <div style="float:left;width;150px;">
  352. <img decoding="async" alt="Download" src="https://media.sascha-dittmann.de/blog/Shared/download.jpg" />
  353. </div>
  354. <div style="float:left;width;150px;">
  355. <p>
  356. Download der Demos:
  357. </p>
  358. <ul>
  359. <li>
  360. <a href="https://media.sascha-dittmann.de/blog/2015/07/SqlXmlVsDocumentDb_DocumentDB.zip">SqlXmlVsDocumentDb_DocumentDB.zip</a>
  361. </li>
  362. <li>
  363. <a href="https://media.sascha-dittmann.de/blog/2015/07/SqlXmlVsDocumentDb_XML.zip">SqlXmlVsDocumentDb_XML.zip</a>
  364. </li>
  365. </ul>
  366. <p>
  367. Weitere Informationen
  368. </p>
  369. <ul>
  370. <li>
  371. <a href="https://dev.windows.com/en-us/iot" rel="nofollow" target="_blank">Develop Windows IoT apps</a>
  372. </li>
  373. <li>
  374. <a href="https://github.com/ms-iot" rel="nofollow" target="_blank">GitHub: Microsoft IoT Samples</a>
  375. </li>
  376. <li>
  377. <a href="https://github.com/RobertEichenseer/IoT_MasterClass" rel="nofollow" target="_blank">GitHub: Robert Eichenseer &#8211; IoT_MasterClass</a>
  378. </li>
  379. </ul></div>
  380. </div>
  381. <hr />
  382. ]]></content:encoded>
  383. </item>
  384. <item>
  385. <title>Performance Optimierung von SQL Server Azure VMs</title>
  386. <link>https://www.sascha-dittmann.de/2015/06/performance-optimierung-von-sql-server-azure-vms/</link>
  387. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  388. <pubDate>Fri, 05 Jun 2015 14:49:45 +0000</pubDate>
  389. <category><![CDATA[Cloud Computing]]></category>
  390. <category><![CDATA[SQL Server]]></category>
  391. <category><![CDATA[Cloud]]></category>
  392. <category><![CDATA[IaaS]]></category>
  393. <category><![CDATA[Microsoft Azure]]></category>
  394. <category><![CDATA[Performance]]></category>
  395. <category><![CDATA[SQL Server 2014]]></category>
  396. <category><![CDATA[Virtual Machines]]></category>
  397. <guid isPermaLink="false">http://www.sascha-dittmann.de/?p=11612</guid>
  398.  
  399. <description><![CDATA[Die Virtuellen Maschine der D-Serie in Azure eigenen sich besonders gut für Anwendungen mit einer hohen Arbeitslast.
  400. In diesem Blog Post möchte ich deshalb zwei kleine Optimierungen vorstellen, mit denen man bei SQL Server Azure VMs der D-Serie zusätzliche Performance rausholen kann...]]></description>
  401. <content:encoded><![CDATA[<p style="display: inline-block;">
  402. <img decoding="async" loading="lazy" alt="Performance Optimierung von SQL Server Azure VMs" height="150" src="https://media.sascha-dittmann.de/blog/2015/06/SQL_IaaS_Performance-150x150.jpg" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; float: left;" width="150" /><strong>Die Virtuellen Maschine der D-Serie in Azure eigenen sich besonders gut&nbsp;f&uuml;r Anwendungen mit einer hohen Arbeitslast.<br />
  403. In diesem Blog Post m&ouml;chte ich deshalb zwei kleine Optimierungen vorstellen, mit denen man bei&nbsp;SQL Server Azure VMs der D-Serie&nbsp;zus&auml;tzliche Performance rausholen kann&#8230;</strong>
  404. </p>
  405. <p>
  406. Im&nbsp;<a href="http://azure.microsoft.com/blog/2014/09/22/new-d-series-virtual-machine-sizes/" rel="nofollow" target="_blank">September letzten Jahres</a> hat Microsoft eine neue Reihe an &raquo;Azure Virtual Machines&laquo; vorgestellt, die besonderen Wert auf Performance legen. Diese D-Serien VMs bieten bis zu 112GB Arbeitsspeicher, bis zu 800GB&nbsp;lokalen SSD-Festplattenspeicher und&nbsp;Prozessoren die ca. 60% schneller sind als die der A-Serie.
  407. </p>
  408. <p>
  409. Durch die&nbsp;lokale SSD, welche als D: Laufwerk in der Windows-VM zur Verf&uuml;gung gestellt wird, kann man&nbsp;bei&nbsp;SQL Server Azure VMs zus&auml;tzliche Performance&nbsp;rauskitzeln.
  410. </p>
  411. <h2>
  412. Verschieben der tempdb-Datenbank<br />
  413. </h2>
  414. <p>
  415. Eine M&ouml;glichkeit, diese SSDs zu auszunutzen, ist es die tempdb-Datenbank zu verschieben.
  416. </p>
  417. <p>
  418. Hierzu richtet man 1-2 zus&auml;tzliche Verzeichnisse&nbsp;auf der SSD ein, wie beispielsweise D:\SQLData und D:\SQLLog, und&nbsp;wei&szlig;t der tempdb-Datenbank den neuen Speicherort zu:
  419. </p>
  420. <pre>
  421. USE master;
  422. GO
  423. ALTER DATABASE tempdb
  424. MODIFY FILE (NAME = tempdev, FILENAME = &#39;D:\SQLData\tempdb.mdf&#39;);
  425. GO
  426. ALTER DATABASE tempdb
  427. MODIFY FILE (NAME = templog, FILENAME = &#39;D:\SQLLog\templog.ldf&#39;);
  428. </pre>
  429. <p>
  430. Zum Pr&uuml;fen der &Auml;nderung kann dann folgendes Skript genutzt werden:
  431. </p>
  432. <pre>
  433. SELECT name, physical_name AS CurrentLocation, state_desc
  434. FROM sys.master_files
  435. WHERE database_id = DB_ID(N&#39;tempdb&#39;);</pre>
  436. <p>
  437. Anschlie&szlig;end muss der SQL Server Dienst neu gestartet werden, damit die &Auml;nderung aktiv wird.
  438. </p>
  439. <h2>
  440. Buffer Pool Extensions<br />
  441. </h2>
  442. <p>
  443. Eine weitere M&ouml;glichkeit kam mit dem SQL Server 2014 (Standard, Business Intelligence und Enterprise)&nbsp;hinzu.
  444. </p>
  445. <p>
  446. Mit den <a href="http://msdn.microsoft.com/en-us/library/dn133176.aspx" rel="nofollow" target="_blank">Buffer Pool Extensions (BPE)</a>&nbsp;nutzt&nbsp;der Buffer Pool der SQL Engine&nbsp;zus&auml;tzliche die SSD-Festplatte, um somit noch mehr Daten&nbsp;im Cache halten zu k&ouml;nnen.
  447. </p>
  448. <blockquote>
  449. <p>
  450. Der Buffer Pool ist ein globaler In-Memory-Cache des&nbsp;SQL Servers, welcher <a href="https://technet.microsoft.com/en-us/library/ms190969(v=sql.105).aspx" rel="nofollow" target="_blank">Data-Pages</a>&nbsp;zwischenspeichert, um somit die Lese-Leistung zu verbessern.
  451. </p>
  452. </blockquote>
  453. <p>
  454. Zur Aktivierung der Buffer Pool Extension wird erneut ein Verzeichnis, wie beispielsweise D:\SQLCache, auf der SSD-Platte ben&ouml;tigt.
  455. </p>
  456. <p>
  457. Anschlie&szlig;end kann mit folgendem Skript das BPE-Feature konfiguriert und aktiviert werden:
  458. </p>
  459. <pre>
  460. ALTER SERVER CONFIGURATION
  461. SET BUFFER POOL EXTENSION ON
  462. (
  463.  FILENAME = &#39;D:\SQLCache\SQLSERVER.BPE&#39;
  464.  , SIZE = <span class="str">&lt;Gew&uuml;nschte-Cache-Gr&ouml;&szlig;e&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="pln"> KB </span><span class="pun">|</span><span class="pln"> MB </span><span class="pun">|</span><span class="pln"> GB </span><span class="pun">]</span>
  465. );</pre>
  466. <h2>
  467. Vorsicht beim Starten / Neustart&nbsp;der VM<br />
  468. </h2>
  469. <p>
  470. Einen kleinen Wermutstropfen haben diese &Auml;nderungen allerdings.
  471. </p>
  472. <p>
  473. Wenn die Virtuelle Maschine gestoppt und wieder gestartet wird,&nbsp;werden alle Daten auf der SSD gel&ouml;scht.
  474. </p>
  475. <p>
  476. Dies w&auml;re zwar kein Problem, da der SQL Server die Dateien wiederherstellen w&uuml;rde; Allerdings wird dies, durch die fehlenden Verzeichnisse, fehlschlagen.
  477. </p>
  478. <p>
  479. Eine M&ouml;glichkeit dies zu&nbsp;umgehen ist ein Skript, das&nbsp;bei Starten des Computers ausgef&uuml;hrt wird.
  480. </p>
  481. <p>
  482. Deshalb habe ich auf der Systemplatte ein&nbsp;Verzeichnis angelegt (C:\Scripts) und dort folgendes Skript&nbsp;(Dateiname SQLStartup.cmd)&nbsp;hinterlegt:
  483. </p>
  484. <pre>
  485. @echo off
  486. md D:\SQLCache
  487. md D:\SQLData
  488. md D:\SQLLog
  489. net start MSSQLSERVER
  490. net start SQLSERVERAGENT</pre>
  491. <p>
  492. Zus&auml;tzlich&nbsp;muss noch&nbsp;der Start-Typ des SQL Server Dienstes auf &raquo;Manual&laquo; umgestellt &#8230;
  493. </p>
  494. <p>
  495. <img decoding="async" loading="lazy" alt="Start-Typ des SQL Servers aus Manuell umstellen" class="alignnone size-full wp-image-11632" height="475" src="https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_01.png" width="420" srcset="https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_01.png 420w, https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_01-265x300.png 265w, https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_01-133x150.png 133w" sizes="(max-width: 420px) 100vw, 420px" />
  496. </p>
  497. <p>
  498. &#8230; und das neu erstellte Skript &#8211; als Startup-Script &#8211; in den Lokalen Gruppenrichtlinien hinzugef&uuml;gt werden.
  499. </p>
  500. <blockquote>
  501. <p>
  502. Zum &Ouml;ffnen des Local Group Policy Editors kann&nbsp;in der Befehlszeile &raquo;gpedit.msc&laquo; eingeben.
  503. </p>
  504. </blockquote>
  505. <p>
  506. <img decoding="async" loading="lazy" alt="Startup-Skript hinzufügen (1)" class="alignnone size-full wp-image-11642" height="412" src="https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_02.png" width="653" srcset="https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_02.png 653w, https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_02-300x189.png 300w, https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_02-150x95.png 150w" sizes="(max-width: 653px) 100vw, 653px" />
  507. </p>
  508. <p>
  509. <img decoding="async" loading="lazy" alt="Startup-Skript hinzufügen (2)" class="alignnone size-full wp-image-11652" height="462" src="https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_03.png" width="414" srcset="https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_03.png 414w, https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_03-269x300.png 269w, https://media.sascha-dittmann.de/blog/2015/06/sql_iaas_perf_03-134x150.png 134w" sizes="(max-width: 414px) 100vw, 414px" />
  510. </p>
  511. <p>
  512. &nbsp;
  513. </p>
  514. <hr />
  515. <div style="display: inline-block;">
  516. <div style="float: left;">
  517. <img decoding="async" alt="Weitere Informationen" src="https://media.sascha-dittmann.de/blog/Shared/info.png" />
  518. </div>
  519. <div style="float: left;">
  520. <p>
  521. Weitere Informationen:
  522. </p>
  523. <ul>
  524. <li>
  525. <a href="https://msdn.microsoft.com/en-us/library/dn133176.aspx" rel="nofollow" target="_blank">MSDN: Buffer Pool Extension</a>
  526. </li>
  527. <li>
  528. <a href="https://technet.microsoft.com/en-us/library/ms190969(v=sql.105).aspx" rel="nofollow" target="_blank">TechNet: Understanding Pages and Extents</a>
  529. </li>
  530. <li>
  531. <a href="https://technet.microsoft.com/en-us/library/aa337525(v=sql.105).aspx" rel="nofollow" target="_blank">TechNet: Buffer Management</a>
  532. </li>
  533. </ul></div>
  534. </div>
  535. <hr />
  536. <p>
  537. <strong>Verwendete Bildquellen:</strong><br />
  538. &copy; Armin Tost (AT) / pixelio.de</p>
  539. ]]></content:encoded>
  540. </item>
  541. <item>
  542. <title>Hadoop on Linux mit Azure VMs (2) – Basis Image erstellen</title>
  543. <link>https://www.sascha-dittmann.de/2015/06/hadoop-on-linux-mit-azure-vms-2-basis-image-erstellen/</link>
  544. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  545. <pubDate>Wed, 03 Jun 2015 09:00:18 +0000</pubDate>
  546. <category><![CDATA[Cloud Computing]]></category>
  547. <category><![CDATA[SQL Server]]></category>
  548. <category><![CDATA[Big Data]]></category>
  549. <category><![CDATA[Hadoop]]></category>
  550. <category><![CDATA[Linux]]></category>
  551. <category><![CDATA[Microsoft Azure]]></category>
  552. <category><![CDATA[Virtual Machines]]></category>
  553. <guid isPermaLink="false">http://www.sascha-dittmann.de/?p=11082</guid>
  554.  
  555. <description><![CDATA[Am Montag hatte ich bereits aufgezeigt, wie man ein Storage Account, den Cloud Service, sowie das Virtuelle Netzwerk für ein manuell erstelltes Hadoop on Linux Cluster anlegt.
  556. In diesem Teil meiner dreiteiligen Serie stelle ich vor, wie man ein Basis-Image für die Cluster-Knoten erstellen kann...]]></description>
  557. <content:encoded><![CDATA[<p style="display: inline-block;">
  558. <img decoding="async" loading="lazy" alt="Hadoop on Linux (Teil 2)" height="150" src="https://media.sascha-dittmann.de/blog/2015/06/HadoopOnLinux-2.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; float: left;" width="150" /><strong>Am Montag hatte ich bereits aufgezeigt, wie man ein Storage Account, den Cloud Service, sowie das Virtuelle Netzwerk f&uuml;r ein manuell erstelltes Hadoop on Linux Cluster anlegt.<br />
  559. In diesem Teil meiner&nbsp;dreiteiligen Serie stelle ich vor, wie man ein Basis-Image f&uuml;r die Cluster-Knoten erstellen kann&#8230;</strong>
  560. </p>
  561. <p>
  562. Da das Ganze f&uuml;r einen einzelnen Blog Post etwas zu umfangreich ausfallen w&uuml;rde, habe ich diese Step-By-Step Anleitung in 3 Teile aufgesplittet:
  563. </p>
  564. <ol>
  565. <li>
  566. <a href="http://www.sascha-dittmann.de/2015/06/hadoop-on-linux-mit-azure-vms-1-vorbereitungen">Vorbereitung der Azure Umgebung<br />
  567. (Storage Account, Cloud Service und Virtuelles Netzwerk)</a>
  568. </li>
  569. <li>
  570. Erstellen eines Basis-Images
  571. </li>
  572. <li>
  573. Erzeugen des Clusters
  574. </li>
  575. </ol>
  576. <h2>
  577. Virtuelle Maschine Erstellen<br />
  578. </h2>
  579. <p style="display: inline-block;">
  580. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-01.png" target="_blank"><img decoding="async" loading="lazy" alt="Virtuelle Machine erstellen" class="alignright size-medium wp-image-11122" height="137" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-01-300x137.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-01-300x137.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-01-1024x469.png 1024w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-01-272x125.png 272w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-01-150x69.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-01.png 1162w" sizes="(max-width: 300px) 100vw, 300px" /></a>Da ich nat&uuml;rlich nicht komplett bei Null anfangen m&ouml;chte, nutze ich&nbsp;als Basis f&uuml;r unsere Hadoop on Linux&nbsp;Vorlage ein CentOS 6.x Image aus der Azure VM Gallery.<br />
  581. F&uuml;r die neue Virtuelle Maschine w&auml;hle ich deshalb New -&gt; Compute -&gt; Virtual Machine -&gt; From Gallery aus.
  582. </p>
  583. <p style="display: inline-block;">
  584. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-02.png" target="_blank"><img decoding="async" loading="lazy" alt="HDP Image - Basis auswählen" class="alignleft size-medium wp-image-11132" height="191" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-02-300x191.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-02-300x191.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-02-150x95.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-02.png 1010w" sizes="(max-width: 300px) 100vw, 300px" /></a>Im ersten Schitt des Assistenten-Dialogs w&auml;hlen ich dann entsprechend die aktuellste&nbsp;OpenLogic&nbsp;6.x Vorlage aus.
  585. </p>
  586. <p style="display: inline-block;">
  587. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-03.png" target="_blank"><img decoding="async" loading="lazy" alt="HDP Image - VM Daten" class="alignright size-medium wp-image-11142" height="191" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-03-300x191.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-03-300x191.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-03-150x95.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-03.png 1010w" sizes="(max-width: 300px) 100vw, 300px" /></a>Im zweiten Schritt muss ich Angaben zur Virtuellen Maschine machen.<br />
  588. Hier verpasse ich der Maschine den Namen &raquo;hdp-image&laquo;, da diese ohnehin am Ende des Prozesses in ein Basis-Image umgewandelt wird.<br />
  589. Ausserdem w&auml;hle ich die VM-Gr&ouml;&szlig;e &raquo;Standard_D2&laquo; aus.<br />
  590. Im Gegensatz zur A-Serie der Azure VMs, haben die Maschinen der D-Serie besonders viel Arbeitsspeicher und eine lokale SSD, die f&uuml;r das Tempor&auml;re Laufwerk genutzt wird.<br />
  591. F&uuml;r das Administratorkonto muss ich noch einen Benutzernamen und Passwort angeben.<br />
  592. Ein Zertifikat f&uuml;r die Secure Shell (SSH) m&ouml;chte ich nicht benutzen.
  593. </p>
  594. <p style="display: inline-block;">
  595. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-04.png" target="_blank"><img decoding="async" loading="lazy" alt="HDP Image - Infrastruktur auswählen" class="alignleft size-medium wp-image-11152" height="191" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-04-300x191.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-04-300x191.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-04-150x95.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-04.png 1010w" sizes="(max-width: 300px) 100vw, 300px" /></a>In Schritt 3 werden der Cloud Service, das Virtuellen Netzwerk, das Subnetz und das Storage Account ausgew&auml;hlt, die ich im ersten Teil dieser Step-By-Step Anleitung erstellt hatte.
  596. </p>
  597. <p style="display: inline-block;">
  598. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-05.png" target="_blank"><img decoding="async" loading="lazy" alt="HDP Image - Extentions" class="alignright size-medium wp-image-11162" height="191" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-05-300x191.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-05-300x191.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-05-150x95.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-05.png 1010w" sizes="(max-width: 300px) 100vw, 300px" /></a>Als Erweiterung f&uuml;r Azure VMs, sollte noch der VM Agent installiert werden.<br />
  599. Dieser wird am Ende dieses Prozesses genutzt, um die VM f&uuml;r die Image-Erstellung vorzubereiten.
  600. </p>
  601. <h2>
  602. Aktualisieren des Betriebssystems<br />
  603. </h2>
  604. <p>
  605. Damit die Virtuelle Maschine f&uuml;r unsere Zwecke angepasst werden kann, muss man sich als erstes eine Secure Shell (SSH) Verbindung&nbsp;herstellen.
  606. </p>
  607. <p>
  608. SSH ist auf Unix-Betriebssystemen und OS X meist&nbsp;vorinstalliert.<br />
  609. F&uuml;r Windows-Systeme kann das <a href="http://www.putty.org" rel="nofollow" target="_blank">kostenlose Tool PuTTY</a> genutzt werden.
  610. </p>
  611. <p>
  612. <img decoding="async" loading="lazy" alt="PuTTY" class="alignnone size-full wp-image-11182" height="448" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-06.png" width="466" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-06.png 466w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-06-300x288.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-06-150x144.png 150w" sizes="(max-width: 466px) 100vw, 466px" />
  613. </p>
  614. <p style="display: inline-block;">
  615. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-07.png" target="_blank"><img decoding="async" loading="lazy" alt="Administrator Session" class="alignright size-medium wp-image-11192" height="237" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-07-300x237.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-07-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-07-150x119.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-07.png 570w" sizes="(max-width: 300px) 100vw, 300px" /></a>Anschlie&szlig;end sollte man die Session mit &raquo;sudo -s&laquo; dauerhaft in den Administrator-Modus heben, da man ansonsten vor jedem der folgenden&nbsp;Befehle separat &raquo;sudo&laquo; voranstellen m&uuml;sste.
  616. </p>
  617. <p style="display: inline-block;">
  618. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-08.png" target="_blank"><img decoding="async" loading="lazy" alt="Update Linux (1)" class="alignleft size-medium wp-image-11202" height="237" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-08-300x237.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-08-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-08-150x119.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-08.png 570w" sizes="(max-width: 300px) 100vw, 300px" /></a>Um alle installierten Pakete des Betriebsystems auf den aktuellen Stand zu bringen, f&uuml;hre ich&nbsp;als erstes&nbsp;den Befehl &raquo;yum update&laquo; aus.
  619. </p>
  620. <p style="display: inline-block;">
  621. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-09.png" target="_blank"><img decoding="async" loading="lazy" alt="Update Linux (2)" class="alignright size-medium wp-image-11212" height="237" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-09-300x237.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-09-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-09-150x119.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-09.png 570w" sizes="(max-width: 300px) 100vw, 300px" /></a>Nach dessen initialer Pr&uuml;fung, muss der Download zuvor noch mit einem &raquo;y&laquo; best&auml;tigt werden.
  622. </p>
  623. <h2>
  624. Passwortloses SSH<br />
  625. </h2>
  626. <p>
  627. Damit sp&auml;ter das Hadoop Installations- und Verwaltungssystem <a href="http://ambari.apache.org" rel="nofollow" target="_blank">Ambari</a> eine Administratorverbindung zu den einzelnen Knoten herstellen kann, muss vorher das Passwortlose SSH eingerichtet werden.
  628. </p>
  629. <p>
  630. Hierzu muss zuerst ein RSA-Schl&uuml;sselpaar erstellt werden.<br />
  631. Anschlie&szlig;end wird dieses als Autorisiertes Schl&uuml;sselpaar f&uuml;r das Basis-Image (und dementsprechend f&uuml;r alle sp&auml;ter erstellten Knoten)&nbsp;bekannt gemacht und die entsprechenden Dateisystemrechte gesetzt:
  632. </p>
  633. <pre>
  634. ssh-keygen
  635. cat /root/.ssh/id_rsa.pub &gt;&gt; /root/.ssh/authorized_keys
  636. chmod 700 ~/.ssh
  637. chmod 600 ~/.ssh/*
  638. </pre>
  639. <p>
  640. <img decoding="async" loading="lazy" alt="SSH Keys erzeugen" class="alignnone size-full wp-image-11232" height="451" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-11.png" width="570" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-11.png 570w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-11-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-11-150x119.png 150w" sizes="(max-width: 570px) 100vw, 570px" />
  641. </p>
  642. <blockquote>
  643. <p>
  644. Mit &raquo;ls -ld ~/.ssh &amp; ls -l ~/.ssh&laquo; lassen sich die vorgenommenen Einstellungen nochmals pr&uuml;fen.
  645. </p>
  646. </blockquote>
  647. <p>
  648. <img decoding="async" loading="lazy" alt="Passwortloses SSH" class="alignnone size-full wp-image-11242" height="451" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-12.png" width="570" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-12.png 570w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-12-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-12-150x119.png 150w" sizes="(max-width: 570px) 100vw, 570px" />
  649. </p>
  650. <h2>
  651. Network Time Protocol (NTP)<br />
  652. </h2>
  653. <p>
  654. Damit sp&auml;ter auch alle Cluster-Knoten im &quot;Gleichen Takt&quot; ticken, muss der Network Time Protocol (NTP) Dienst installiert und aktiviert werden.<br />
  655. Gepr&uuml;ft werden kann die Installation mit &raquo;chkconfig &#8211;list ntpd&laquo;.
  656. </p>
  657. <pre>
  658. yum install ntp
  659. service ntpd start
  660. chkconfig ntpd on
  661. </pre>
  662. <p>
  663. <img decoding="async" loading="lazy" alt="NTP Dienst installieren" class="alignnone size-full wp-image-11252" height="451" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-13.png" width="570" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-13.png 570w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-13-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-13-150x119.png 150w" sizes="(max-width: 570px) 100vw, 570px" />
  664. </p>
  665. <h2>
  666. SELinux Deaktivieren<br />
  667. </h2>
  668. <p>
  669. Da sich die <a href="http://de.wikipedia.org/wiki/SELinux" rel="nofollow" target="_blank">Security-Enhanced Linux (kurz SELinux)</a> Kernel-Erweiterung mit Ambari bei&szlig;t, muss diese deaktiviert werden.<br />
  670. Hierzu f&uuml;hrt man folgenden Befehl&nbsp;aus:
  671. </p>
  672. <pre>
  673. setenforce 0
  674. </pre>
  675. <p>
  676. <img decoding="async" loading="lazy" alt="SELinux abschalten (1)" class="alignnone size-full wp-image-11352" height="166" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-14.png" width="585" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-14.png 585w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-14-300x85.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-14-150x43.png 150w" sizes="(max-width: 585px) 100vw, 585px" />
  677. </p>
  678. <p>
  679. Damit diese auch nach dem Neustart der VMs nicht wieder aktiv wird, muss man die entsprechende Konfigurationsdatei (/etc/selinux/config)&nbsp;angepasst werden.<br />
  680. Dabei muss &raquo;SELINUX&laquo; auf &raquo;disabled&laquo; gesetzt werden.
  681. </p>
  682. <pre>
  683. vi /etc/selinux/config
  684. </pre>
  685. <p>
  686. <img decoding="async" loading="lazy" alt="SELinux abschalten (2)" class="alignnone size-full wp-image-11272" height="451" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-15.png" width="570" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-15.png 570w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-15-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-15-150x119.png 150w" sizes="(max-width: 570px) 100vw, 570px" />
  687. </p>
  688. <h2>
  689. PackageKit Deaktivieren<br />
  690. </h2>
  691. <p>
  692. Auch das <a href="http://de.wikipedia.org/wiki/PackageKit" rel="nofollow" target="_blank">PackageKit</a> kann zu Problemen f&uuml;hren, weshalb dies deaktiviert werden sollte.
  693. </p>
  694. <p>
  695. Hierzu muss &raquo;enabled=0&laquo; in der entsprechenden&nbsp;Konfigurationsdatei (/etc/yum/pluginconf.d/refresh-packagekit.conf) gesetzt werden.
  696. </p>
  697. <pre>
  698. vi /etc/yum/pluginconf.d/refresh-packagekit.conf
  699. </pre>
  700. <p>
  701. <img decoding="async" loading="lazy" alt="PackageKit abschalten" class="alignnone size-full wp-image-11362" height="134" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-16.png" width="585" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-16.png 585w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-16-300x69.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-16-150x34.png 150w" sizes="(max-width: 585px) 100vw, 585px" />
  702. </p>
  703. <p>
  704. Da diese in der&nbsp;aktuellen Vorlage der Azure VM Gallery nicht vorhanden ist, kann auch folgender Befehl genutzt werden.
  705. </p>
  706. <pre>
  707. echo &#39;enabled=0&#39; &gt;&gt; /etc/yum/pluginconf.d/refresh-packagekit.conf
  708. </pre>
  709. <h2>
  710. Transparent Huge Pages (THP) Deaktivieren<br />
  711. </h2>
  712. <p>
  713. Um etwaigen Performance-Problemen aus dem Weg zu gehen, sollten auch die Transparent Huge Pages (THP) abgeschaltet werden.
  714. </p>
  715. <p>
  716. Dieser Mechanismus ist &auml;hnlich der Windows-Auslagerungsdatei (pagefile.sys) und lagert Daten des virtuellen Speichers aus.
  717. </p>
  718. <p>
  719. Hierzu muss man 2 kleinere &Auml;nderungen in der /etc/grub.conf vornehmen und bei den Kernel Aufrufen den Parameter &raquo;transparent_hugepage=never&laquo; anh&auml;ngen.&nbsp;
  720. </p>
  721. <pre>
  722. vi /etc/grub.conf
  723. </pre>
  724. <p>
  725. <img decoding="async" loading="lazy" alt="Transparent Huge Pages (THP) abschalten" class="alignnone size-full wp-image-11302" height="451" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-18.png" width="570" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-18.png 570w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-18-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-18-150x119.png 150w" sizes="(max-width: 570px) 100vw, 570px" />
  726. </p>
  727. <h2>
  728. Netzwerk Konfiguration<br />
  729. </h2>
  730. <p>
  731. Bei der Netzwerk Konfiguration habe ich zwei &Auml;nderungen vorgenommen.
  732. </p>
  733. <p>
  734. Zum einen hab ich die IP v6 Unterst&uuml;tzung aktiviert, indem ich bei der /etc/sysconfig/network Konfigurationsdatei &raquo;NETWORKING_IPV6&laquo; auf &raquo;yes&laquo; gesetzt habe.
  735. </p>
  736. <pre>
  737. vi /etc/sysconfig/network
  738. </pre>
  739. <p>
  740. oder
  741. </p>
  742. <pre>
  743. echo &#39;NETWORKING_IPV6=yes&#39; &gt;&gt; /etc/sysconfig/network
  744. </pre>
  745. <p>
  746. <img decoding="async" loading="lazy" alt="IPv6 aktivieren" class="alignnone size-full wp-image-11372" height="165" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-17.png" width="585" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-17.png 585w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-17-300x85.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-17-150x42.png 150w" sizes="(max-width: 585px) 100vw, 585px" />
  747. </p>
  748. <p>
  749. Au&szlig;erdem habe ich die hosts-Datei bereits mit den entsprechenden Eintr&auml;gen der zuk&uuml;nftigen Cluster-Knoten&nbsp;versehen.
  750. </p>
  751. <blockquote>
  752. <p>
  753. Der in den &raquo;Azure Virtual Networks&laquo; integrierte DNS-Dienst verrichtet zwar hervorragend seinen Dienst, allerdings fehlt bei der Hadoop Installation ein &raquo;Fully Qualified Domain Name (FQDN)&laquo; f&uuml;r jeden Cluster-Knoten.<br />
  754. Deshalb habe ich die pragmatischen Schritt gew&auml;hlt.
  755. </p>
  756. </blockquote>
  757. <pre>
  758. vi /etc/hosts
  759. </pre>
  760. <p style="display: inline-block;">
  761. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-191.png" target="_blank"><img decoding="async" loading="lazy" alt="Hosts-Datei" class="alignright size-medium wp-image-11442" height="185" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-191-300x185.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-191-300x185.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-191-150x93.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-191.png 731w" sizes="(max-width: 300px) 100vw, 300px" /></a>Die hierbei verwende Domain-Struktur ist komplett ausgedacht und setzt auf der Domain des Cloud-Service-Endpunkts auf.<br />
  762. &Uuml;ber &raquo;hostname -f&laquo; l&auml;&szlig;t sich der interne FQDN anzeigen, welchen ich auch mit in die hosts-Datei &uuml;bernommen habe.
  763. </p>
  764. <table border="0" style="border: 0px currentColor; border-image: none;">
  765. <caption>
  766. Zuk&uuml;nftige Domain-Struktur<br />
  767. </caption>
  768. <thead>
  769. <tr>
  770. <th>
  771. IP
  772. </th>
  773. <th>
  774. FQDN
  775. </th>
  776. <th>
  777. HOSTNAME
  778. </th>
  779. </tr>
  780. </thead>
  781. <tbody>
  782. <tr>
  783. <td>
  784. 10.10.0.4
  785. </td>
  786. <td>
  787. hdp-head-01.hdp-demo.cloudapp.net
  788. </td>
  789. <td>
  790. hdp-head-01
  791. </td>
  792. </tr>
  793. <tr>
  794. <td>
  795. 10.10.1.4
  796. </td>
  797. <td>
  798. hdp-data-01.hdp-demo.cloudapp.net
  799. </td>
  800. <td>
  801. hdp-data-01
  802. </td>
  803. </tr>
  804. <tr>
  805. <td>
  806. 10.10.1.5
  807. </td>
  808. <td>
  809. hdp-data-02.hdp-demo.cloudapp.net
  810. </td>
  811. <td>
  812. hdp-data-02
  813. </td>
  814. </tr>
  815. <tr>
  816. <td>
  817. 10.10.1.6
  818. </td>
  819. <td>
  820. hdp-data-03.hdp-demo.cloudapp.net
  821. </td>
  822. <td>
  823. hdp-data-03
  824. </td>
  825. </tr>
  826. </tbody>
  827. </table>
  828. <p>
  829. &nbsp;
  830. </p>
  831. <h2>
  832. Festplatte hinzuf&uuml;gen<br />
  833. </h2>
  834. <p>
  835. Als letzten Punkt f&uuml;r&nbsp;das Basis-Image, f&uuml;ge ich noch eine zweite Festplatte hinzu, welche sp&auml;ter als Datenplatte f&uuml;r das HDFS dienen soll.
  836. </p>
  837. <p>
  838. Hierzu wechsel ich im Azure Management Portal&nbsp;in das Dashboard der Virtuellen Machine und w&auml;hle die Aktion &raquo;Attach empty disk&laquo; aus:
  839. </p>
  840. <p>
  841. <img decoding="async" loading="lazy" alt="Neue VHD hinzufügen" class="alignnone size-full wp-image-11312" height="97" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-19.png" width="232" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-19.png 232w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-19-150x63.png 150w" sizes="(max-width: 232px) 100vw, 232px" />
  842. </p>
  843. <p style="display: inline-block;">
  844. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-21.png"><img decoding="async" loading="lazy" alt="Attach empty disk" class="alignright size-medium wp-image-11482" height="300" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-21-278x300.png" width="278" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-21-278x300.png 278w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-21-139x150.png 139w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-21.png 504w" sizes="(max-width: 278px) 100vw, 278px" /></a>Im daraufhin erscheinenden Dialog w&auml;hle ich die entsprechende Plattengr&ouml;&szlig;e (in diesem Fall 100GB) aus und passe ggf. den Namen der VHD-Datei an.
  845. </p>
  846. <p>
  847. Anschlie&szlig;end wechsel ich wieder zur SSH-Konsole zur&uuml;ck.<br />
  848. Dort partitioniere&nbsp;und&nbsp;formatiere ich&nbsp;die neue&nbsp;Festplatte, mounte&nbsp;diese als&nbsp;Verzeichnis /mnt/datadrive und passe die Konfigurationsdatei /etc/fstab entsprechend an, damit diese Ver&auml;nderung auch nach einem Neustart zur Verf&uuml;gung steht.
  849. </p>
  850. <pre>
  851. parted /dev/sdc mklabel msdos
  852. parted /dev/sdc mkpart primary 1 100%
  853. mkfs.ext4 /dev/sdc1
  854. mkdir /mnt/datadrive
  855. mount /dev/sdc1 /mnt/datadrive
  856. echo &#39;/dev/sdc1 /mnt/datadrive ext4 defaults 1 2&#39; &gt;&gt; /etc/fstab
  857. </pre>
  858. <p>
  859. <img decoding="async" loading="lazy" alt="Neue VHD in Linux bereitstellen" class="alignnone size-full wp-image-11512" height="621" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-22.png" width="570" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-22.png 570w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-22-275x300.png 275w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-22-138x150.png 138w" sizes="(max-width: 570px) 100vw, 570px" />
  860. </p>
  861. <h2>
  862. &nbsp;<br />
  863. </h2>
  864. <h2>
  865. VM in ein Image umwandeln<br />
  866. </h2>
  867. <p>
  868. Nachdem die Virtuelle Maschine soweit vorbereitet wurde, kann diese jetzt in ein Image umgewandelt werden.
  869. </p>
  870. <p>
  871. Dazu verwende ich als Erstes den VM Agent, um in Linux alles zu entfernen, was&nbsp;eine Dublizierbarkeit behindern k&ouml;nnte.
  872. </p>
  873. <p>
  874. waagent -deprovision<br />
  875. shutdown -h 0
  876. </p>
  877. <p>
  878. <img decoding="async" loading="lazy" alt="Deprovision Linux VM" class="alignnone size-full wp-image-11522" height="451" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-23.png" width="570" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-23.png 570w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-23-300x237.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-23-150x119.png 150w" sizes="(max-width: 570px) 100vw, 570px" />
  879. </p>
  880. <p>
  881. Anschlie&szlig;end kann ich die VM im Azure Management Portal herunterfahren&#8230;
  882. </p>
  883. <p>
  884. <img decoding="async" loading="lazy" alt="VM Herunterfahren" class="alignnone size-full wp-image-11532" height="76" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-24.png" width="126" />
  885. </p>
  886. <p>
  887. &#8230; und in&nbsp;ein Image umwandeln.
  888. </p>
  889. <p>
  890. <img decoding="async" loading="lazy" alt="Image Erzeugen (1)" class="alignnone size-full wp-image-11542" height="70" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-25.png" width="108" />
  891. </p>
  892. <p style="display: inline-block;">
  893. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-26.png"><img decoding="async" loading="lazy" alt="Image Erzeugen (2)" class="alignright size-medium wp-image-11552" height="234" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-26-300x234.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-base-26-300x234.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-26-150x117.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-base-26.png 504w" sizes="(max-width: 300px) 100vw, 300px" /></a>In dem Capture-Dialog gebe ich dem Image einen Namen, wie beispielsweise &raquo;hdp-image&laquo;, und setzte das H&auml;kchen, dass der Deprovision-Vorgang durchgef&uuml;hrt worden ist.
  894. </p>
  895. <h2>
  896. Wie geht&rsquo;s weiter?<br />
  897. </h2>
  898. <p>
  899. Nachdem jetzt&nbsp;das Basis-Image f&uuml;r&nbsp;die Cluster-Knoten&nbsp;erstellt wurde,&nbsp;wird im dritten Teil&nbsp;das eigentliche&nbsp;Hadoop on Linux-Cluster erzeugt.<br />
  900. &nbsp;</p>
  901. ]]></content:encoded>
  902. </item>
  903. <item>
  904. <title>Hadoop on Linux mit Azure VMs (1) &#8211; Vorbereitungen</title>
  905. <link>https://www.sascha-dittmann.de/2015/06/hadoop-on-linux-mit-azure-vms-1-vorbereitungen/</link>
  906. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  907. <pubDate>Mon, 01 Jun 2015 13:07:15 +0000</pubDate>
  908. <category><![CDATA[Cloud Computing]]></category>
  909. <category><![CDATA[SQL Server]]></category>
  910. <category><![CDATA[Big Data]]></category>
  911. <category><![CDATA[Blob Storage]]></category>
  912. <category><![CDATA[Cloud Services]]></category>
  913. <category><![CDATA[Hadoop]]></category>
  914. <category><![CDATA[Linux]]></category>
  915. <category><![CDATA[Microsoft Azure]]></category>
  916. <category><![CDATA[Virtual Machines]]></category>
  917. <guid isPermaLink="false">http://www.sascha-dittmann.de/?p=10932</guid>
  918.  
  919. <description><![CDATA[Vor kurzem benötigte ich ein Hadoop on Linux Test-Cluster, welches relativ nah an eine lokale Produktionsumgebung rankommen sollte. Somit fielen leider HDInsight (inkl. der Hadoop on Linux Preview), durch die Nutzung des Blob Storages aus.
  920. Grund genug, um einmal aufzuzeigen, wie man ein Hadoop on Linux Cluster mit Azure VMs aufsetzen kann.]]></description>
  921. <content:encoded><![CDATA[<p style="display: inline-block;">
  922. <img decoding="async" loading="lazy" alt="Hadoop on Linux (Teil 1)" height="150" src="https://media.sascha-dittmann.de/blog/2015/06/HadoopOnLinux-1.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; float: left;" width="150" /><strong>Vor kurzem ben&ouml;tigte ich ein Hadoop on Linux Test-Cluster, welches relativ nah an eine lokale Produktionsumgebung rankommen sollte. Somit fielen leider HDInsight (inkl. der Hadoop on Linux Preview), durch die Nutzung des Blob Storages aus.<br />
  923. Grund genug, um einmal aufzuzeigen, wie man ein Hadoop on Linux Cluster mit Azure VMs aufsetzen kann.</strong>
  924. </p>
  925. <p>
  926. Da das Ganze f&uuml;r einen einzelnen Blog Post etwas zu umfangreich ausfallen w&uuml;rde, m&ouml;chte ich dies in folgende 3 Teile aufsplitten:
  927. </p>
  928. <ol>
  929. <li>
  930. Vorbereitung der Azure Umgebung<br />
  931. (Storage Account, Cloud Service und Virtuelles Netzwerk)
  932. </li>
  933. <li>
  934. Erstellen eines Basis-Images
  935. </li>
  936. <li>
  937. Erzeugen des Clusters
  938. </li>
  939. </ol>
  940. <h2>
  941. Storage Account &amp; Cloud Service<br />
  942. </h2>
  943. <p>
  944. Wie f&uuml;r die Virtuellen Maschinen in Azure &uuml;blich, ben&ouml;tigt man hierzu einen &raquo;Storage Account&laquo; f&uuml;r die VHD Dateien, sowie einen &raquo;Cloud Service&laquo; als Container und Endpunkt f&uuml;r die VMs.
  945. </p>
  946. <p>
  947. Beides l&auml;sst sich zwar auch w&auml;hrend des Erstellens der VMs erzeugen, allerdings finde ich zum Einen sprechende Namen f&uuml;r die jeweiligen Dienste sinnvoller und zum Anderen wei&szlig; man dann auch genau, was bzw. wof&uuml;r etwas erstellt worden ist.
  948. </p>
  949. <p>
  950. Beides l&auml;sst sich ganz einfach &uuml;ber das <a href="https://manage.windowsazure.com" rel="nofollow" target="_blank">Azure Management Portal</a> erstellen.
  951. </p>
  952. <p style="display: inline-block;">
  953. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-01.png" target="_blank"><img decoding="async" loading="lazy" alt="Azure Storage Account erstellen" class="alignright size-medium wp-image-10952" height="137" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-01-300x137.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-01-300x137.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-01-1024x468.png 1024w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-01-272x125.png 272w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-01-150x69.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-01.png 1163w" sizes="(max-width: 300px) 100vw, 300px" /></a>F&uuml;r das Azure Storage Account geht man auf New -&gt; Data Services -&gt; Storage -&gt; Quick Create und gibt dem Storage Account einen Namen.<br />
  954. Au&szlig;erdem sollte man noch das gew&uuml;nschte Rechenzentrum, sowie den Replikationstyp, ausw&auml;hlen.<br />
  955. F&uuml;r mein Test-Cluster langt die Replikation innerhalb des ausgew&auml;hlten Rechenzentrums v&ouml;llig aus, weshalb ich &bdquo;Locally Redundant&ldquo; ausgew&auml;hlt habe.
  956. </p>
  957. <p style="display: inline-block;">
  958. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-02.png" target="_blank"><img decoding="async" loading="lazy" alt="Azure Cloud Service erstellen" class="alignleft size-medium wp-image-10962" height="137" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-02-300x137.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-02-300x137.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-02-1024x468.png 1024w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-02-272x125.png 272w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-02-150x69.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-02.png 1162w" sizes="(max-width: 300px) 100vw, 300px" /></a>Auch der Cloud Service ist schnell erstellt.<br />
  959. Hierzu w&auml;hlt man New -&gt; Compute -&gt; Cloud Service -&gt; Quick Create aus und gibt auch hier Name und das gleiche Rechenzentrum an.
  960. </p>
  961. <h2>
  962. Virtuelles Netzwerk<br />
  963. </h2>
  964. <p>
  965. Nachdem man nun das Storage Account und die Cloud Service erstellt hat, kommt der etwas komplexere Teil an die Reihe &ndash; das Virtuelle Netzwerk.
  966. </p>
  967. <p>
  968. Ich m&ouml;chte innerhalb meines Virtuellen Netzwerks zwei Subnetze haben (eines f&uuml;r die Head-Nodes und eines f&uuml;r die Data-Nodes meines Hadoop Clusters), um erneut m&ouml;glichst nah an die sp&auml;tere Produktivumgebung heranzukommen.
  969. </p>
  970. <p>
  971. F&uuml;r etwaige Applikationen, die dieses Hadoop-Cluster benutzen, w&uuml;rde ich dann sp&auml;ter ein weiteres Subnetz hinzuf&uuml;gen.<br />
  972. Soweit zum Plan &ndash; Kommen wir also zur Umsetzung&#8230;
  973. </p>
  974. <p style="display: inline-block;">
  975. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-03.png" target="_blank"><img decoding="async" loading="lazy" alt="Virtuelles Netzwerk erstellen" class="alignright size-medium wp-image-10972" height="137" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-03-300x137.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-03-300x137.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-03-1024x469.png 1024w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-03-272x125.png 272w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-03-150x69.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-03.png 1162w" sizes="(max-width: 300px) 100vw, 300px" /></a>F&uuml;r das neue Netzwerk w&auml;hle ich New -&gt; Network Services -&gt; Virtual Network -&gt; Custom Create aus.
  976. </p>
  977. <p style="display: inline-block;">
  978. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-04.png" target="_blank"><img decoding="async" loading="lazy" alt="Virtuelles Netzwerk - Name und Rechenzentrum" class="alignleft size-medium wp-image-10982" height="200" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-04-300x200.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-04-300x200.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-04-150x100.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-04.png 962w" sizes="(max-width: 300px) 100vw, 300px" /></a>Im ersten Schritt des Assistenten-Dialogs gebe ich meinem neuen Netzwerk einen Namen und w&auml;hle erneut das gew&uuml;nschte Rechenzentrum aus.
  979. </p>
  980. <p style="display: inline-block;">
  981. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-05.png" target="_blank"><img decoding="async" loading="lazy" alt="Virtuelles Netzwerk - DNS und VPN" class="alignright size-medium wp-image-10992" height="200" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-05-300x200.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-05-300x200.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-05-150x100.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-05.png 962w" sizes="(max-width: 300px) 100vw, 300px" /></a>Den zweiten Schritt kann ich &uuml;berspringen, da ich weder einen eigenen DNS Server angeben m&ouml;chte, noch einen VPN Tunnel ben&ouml;tige.
  982. </p>
  983. <blockquote>
  984. <p>
  985. Der von Azure bereitgestellte DNS Dienst w&uuml;rde zwar vollkommen ausreichen, allerdings werde ich ohnehin f&uuml;r mein kleines Cluster die hosts-Datei entsprechend anpassen.
  986. </p>
  987. </blockquote>
  988. <p style="display: inline-block;">
  989. <a href="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-06.png" target="_blank"><img decoding="async" loading="lazy" alt="Virtuelles Netzwerk - Adressräume und Subnetze" class="alignleft size-medium wp-image-11002" height="200" src="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-06-300x200.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-06-300x200.png 300w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-06-150x100.png 150w, https://media.sascha-dittmann.de/blog/2015/06/hdp-prep-06.png 962w" sizes="(max-width: 300px) 100vw, 300px" /></a>Im letzten Schritte gebe ich einen Adressraum (10.10.0.0/16), sowie die zwei Subnetze (Master-Subnet 10.10.0.0/24 und Worker-Subnet 10.10.1.0/24) an.
  990. </p>
  991. <h2>
  992. Wie geht&rsquo;s weiter?<br />
  993. </h2>
  994. <p>
  995. Im kommenden Teil erstelle ich ein Basis-Image f&uuml;r unsere Hadoop on Linux Cluster-Knoten.<br />
  996. &nbsp;</p>
  997. ]]></content:encoded>
  998. </item>
  999. <item>
  1000. <title>WordPress auf Microsoft Azure &#8211; Plugin Aktualisierung fehlgeschlagen</title>
  1001. <link>https://www.sascha-dittmann.de/2015/05/wordpress-auf-microsoft-azure-plugin-aktualisierung-fehlgeschlagen/</link>
  1002. <comments>https://www.sascha-dittmann.de/2015/05/wordpress-auf-microsoft-azure-plugin-aktualisierung-fehlgeschlagen/#comments</comments>
  1003. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  1004. <pubDate>Wed, 13 May 2015 12:36:52 +0000</pubDate>
  1005. <category><![CDATA[.NET]]></category>
  1006. <category><![CDATA[Cloud Computing]]></category>
  1007. <category><![CDATA[Azure Web Sites]]></category>
  1008. <category><![CDATA[Cloud]]></category>
  1009. <category><![CDATA[Microsoft Azure]]></category>
  1010. <category><![CDATA[Troubleshooting]]></category>
  1011. <category><![CDATA[Web Apps]]></category>
  1012. <category><![CDATA[WordPress]]></category>
  1013. <guid isPermaLink="false">http://www.sascha-dittmann.de/?p=10262</guid>
  1014.  
  1015. <description><![CDATA[Seit einigen Wochen schlug die Aktualisierung von Wordpress-Plugins bzw. Themes in meinem - in Microsoft Azure gehosteten - Blog fehl. Die Suche im Internet führte leider auch zu keiner Lösung, da meistens nur auf die Rechte im Dateisystem verwiesen wurde. Doch heute bin ich durch einen Zufall auf die Lösung gestoßen...]]></description>
  1016. <content:encoded><![CDATA[<p style="display: inline-block;">
  1017. <img decoding="async" loading="lazy" alt="WordPress" class="alignleft size-full wp-image-10282" height="150" src="https://media.sascha-dittmann.de/blog/2015/05/wordpress-150x150.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; float: left;border: 0px none;" width="150" srcset="https://media.sascha-dittmann.de/blog/2015/05/wordpress-150x150.png 150w, https://media.sascha-dittmann.de/blog/2015/05/wordpress-300x300.png 300w, https://media.sascha-dittmann.de/blog/2015/05/wordpress-55x55.png 55w, https://media.sascha-dittmann.de/blog/2015/05/wordpress.png 500w" sizes="(max-width: 150px) 100vw, 150px" /><strong>Seit einigen Wochen schlug die Aktualisierung von WordPress-Plugins bzw. Themes in meinem &#8211; in Microsoft Azure gehosteten &#8211; Blog fehl. Die Suche im Internet f&uuml;hrte leider auch zu keiner L&ouml;sung, da meistens nur auf die Rechte im Dateisystem verwiesen wurde.<br />
  1018. Doch heute bin ich durch einen Zufall auf die L&ouml;sung gesto&szlig;en&#8230;</strong>
  1019. </p>
  1020. <p>
  1021. Ende letzten Jahres hatte ich meinen Blog von der BlogEngine.NET auf WordPress, und von den&nbsp;Azure Cloud Services auf die Azure Web Apps (aka Azure Web Sites), umgezogen.
  1022. </p>
  1023. <p>
  1024. Alles lief wunderbar, und ich war mit dem Ergebnis vollkommen zufrieden.
  1025. </p>
  1026. <h2>
  1027. Das Problem<br />
  1028. </h2>
  1029. <p>
  1030. Vor wenigen Wochen&nbsp;konnte ich urpl&ouml;tzlich weder WordPress-Plugins noch Themes aktualisieren.<br />
  1031. Die WordPress Engine aktualisierte sich allerdings weiterhin ohne Probleme.
  1032. </p>
  1033. <p>
  1034. Genauer gesagt, konnten beim Aktualisieren der Plugins, die Alte Version nicht mehr entfernt werden.
  1035. </p>
  1036. <pre>
  1037. Downloading update from http://downloads.wordpress.org/plugin/<i>&lt;plugin&gt;</i>.zip
  1038. Unpacking the update
  1039. Deactivating the plugin
  1040. Removing the old version of the plugin
  1041. Could not remove the old plugin
  1042. Plugin upgrade Failed</pre>
  1043. <p>
  1044. Nachdem die Aktualisierung fehlgeschlagen war, waren auch die&nbsp;Plugins verschwunden.
  1045. </p>
  1046. <p>
  1047. Leider ging anschlie&szlig;end auch die Neuinstallation der betroffenen Plugins nicht mehr.<br />
  1048. Hier bekam ich die Fehlermeldung, dass f&uuml;r das Plugin relevante Verzeichnisse nicht mehr angelegt werden konnten.
  1049. </p>
  1050. <p>
  1051. Die einzige &quot;L&ouml;sung&quot; war&nbsp;ein Neustart der Web App.<br />
  1052. Danach ging auch die Re-Installation wieder.
  1053. </p>
  1054. <p>
  1055. Bei meiner Suche im Internet stie&szlig; ich immer wieder auf Rechteprobleme im Dateisystem.
  1056. </p>
  1057. <p>
  1058. Dies f&uuml;hrte allerdings zu keiner L&ouml;sung, da der Blog zum Einen auf Windows (und nicht Linux) gehostet wird und zum Anderen ausreichende Rechte vorhanden waren.
  1059. </p>
  1060. <h2>
  1061. Endlich die L&ouml;sung<br />
  1062. </h2>
  1063. <p>
  1064. Heute bin ich endlich auf die L&ouml;sung gesto&szlig;en&#8230;<br />
  1065. Danke an <a href="https://twitter.com/cfowlerMSFT" rel="nofollow" target="_blank">Cory Fowler</a> f&uuml;r den Tipp!
  1066. </p>
  1067. <p>
  1068. Vor kurzem wurden &Auml;nderungen an der&nbsp;<a href="http://www.iis.net/downloads/microsoft/wincache-extension" rel="nofollow" target="_blank">WinCache Extension for PHP</a> durchgef&uuml;hrt, welche Anfragen ans Dateisystem, wie beispielsweise <strong>is_dir</strong>, <strong>is_file</strong> und <strong>file_exists</strong>, an WinCache umleiten.<br />
  1069. Somit kann es passieren, dass bereits gel&ouml;schte Dateien &raquo;kurzfristig&laquo; als Vorhanden an PHP Skripte zur&uuml;ckgemeldet werden.
  1070. </p>
  1071. <p>
  1072. Diese Umleitungen k&ouml;nnen ganz einfach deaktiviert werden:
  1073. </p>
  1074. <ol>
  1075. <li>
  1076. Falls noch nicht vorhanden, muss eine Datei mit dem Namen <strong>.user.ini</strong>&nbsp;Im Stammverzeichnis des Blogs angelegt werden.<br />
  1077. Das w&auml;re bei den Azure Web Apps:&nbsp;<b>d:\home\site\wwwroot</b>
  1078. </li>
  1079. <li>
  1080. Dort muss die Zeile <code>wincache.reroute_enabled=0</code> hinzugef&uuml;gt werden.
  1081. </li>
  1082. <li>
  1083. Sicherheitshalber hatte ich anschlie&szlig;end die Web App neu gestartet
  1084. </li>
  1085. </ol>
  1086. <p>
  1087. Nachdem ich die Umleitungen deaktiviert hatte, lief auch das Aktualisieren der Plugins wieder.</p>
  1088. ]]></content:encoded>
  1089. <wfw:commentRss>https://www.sascha-dittmann.de/2015/05/wordpress-auf-microsoft-azure-plugin-aktualisierung-fehlgeschlagen/feed/</wfw:commentRss>
  1090. <slash:comments>8</slash:comments>
  1091. </item>
  1092. <item>
  1093. <title>dotnet Cologne 2015 &#8211; Azure Service Fabric</title>
  1094. <link>https://www.sascha-dittmann.de/2015/05/dotnet-cologne-2015-azure-service-fabric/</link>
  1095. <comments>https://www.sascha-dittmann.de/2015/05/dotnet-cologne-2015-azure-service-fabric/#comments</comments>
  1096. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  1097. <pubDate>Sat, 09 May 2015 08:07:24 +0000</pubDate>
  1098. <category><![CDATA[.NET]]></category>
  1099. <category><![CDATA[Cloud Computing]]></category>
  1100. <category><![CDATA[Azure Service Fabric]]></category>
  1101. <category><![CDATA[Cloud]]></category>
  1102. <category><![CDATA[Cloud Services]]></category>
  1103. <category><![CDATA[Microservices]]></category>
  1104. <category><![CDATA[PaaS]]></category>
  1105. <category><![CDATA[Preview]]></category>
  1106. <guid isPermaLink="false">http://www.sascha-dittmann.de/?p=10162</guid>
  1107.  
  1108. <description><![CDATA[Das Event »von Entwicklern für Entwickler« fand dieses Jahr zum siebten mal statt und war - wie auch in den vergangenen Jahren - eine großartige Veranstaltung. Auch ich durfte wieder mit einer Session aus dem Azure-Themenbereich dabei sein. Diesmal drehte es ich in meiner Session um die Erstellung von Microservices mit der Azure Service Fabric.]]></description>
  1109. <content:encoded><![CDATA[<p style="display: inline-block;">
  1110. <img decoding="async" loading="lazy" alt="dotnet Cologne 2015" class="alignleft size-full wp-image-10172" height="160" src="https://media.sascha-dittmann.de/blog/2015/05/dnc15_banner_180x160.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; float: left;border: 0px none;" width="180" srcset="https://media.sascha-dittmann.de/blog/2015/05/dnc15_banner_180x160.png 180w, https://media.sascha-dittmann.de/blog/2015/05/dnc15_banner_180x160-150x133.png 150w" sizes="(max-width: 180px) 100vw, 180px" /><strong>Das Event &raquo;von Entwicklern f&uuml;r Entwickler&laquo; fand dieses Jahr zum siebten mal statt und war &#8211; wie auch in den vergangenen Jahren &#8211; eine gro&szlig;artige Veranstaltung.<br />
  1111. Auch ich durfte wieder mit einer Session aus dem Azure-Themenbereich dabei sein.<br />
  1112. Diesmal drehte es ich in meiner Session um die Erstellung von Microservices mit der Azure Service Fabric.</strong>
  1113. </p>
  1114. <p>
  1115. Mittlerweile hat sich die Veranstaltung als eine der gr&ouml;&szlig;ten deutsche Community-Konferenzen f&uuml;r Entwickler im Microsoft-Umfeld etabliert.
  1116. </p>
  1117. <p>
  1118. Mit &uuml;ber 40 gro&szlig;artigen Sessions,&nbsp;in 7 Tracks,&nbsp;war es wieder ein besonders Erlebnis f&uuml;r alle Teilnehmer.<br />
  1119. Ein gro&szlig;er Dank an das Orga-Team, die Sprecher und nat&uuml;rlich die vielen Helfer daf&uuml;r!
  1120. </p>
  1121. <p>
  1122. Ich freue mich schon auf&#39;s n&auml;chste Jahr, wenn sich&nbsp;am 06. Mai 2016 wieder die Pforten der dotnet Cologne &ouml;ffnen!
  1123. </p>
  1124. <h2>
  1125. Azure Service Fabric &#8211; Erstellen von leichtgewichtigen Microservices<br />
  1126. </h2>
  1127. <p>
  1128. Neben den Slides und <a href="https://github.com/SaschaDittmann/service-fabric-samples/" rel="nofollow" target="_blank">Code-Beispielen</a>, m&ouml;chte ich in diesem Jahr zus&auml;tzlich eine Aufnahme meiner Session bereitstellen&#8230;
  1129. </p>
  1130. <h3>
  1131. Slides<br />
  1132. </h3>
  1133. <p>
  1134. <iframe loading="lazy" allowfullscreen="" frameborder="0" height="488" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/4kqalB5FiQhn2d" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" width="585"></iframe>
  1135. </p>
  1136. <div style="margin-bottom:5px">
  1137. <strong><a href="//www.slideshare.net/Sascha5812/azure-service-fabric" target="_blank" title="Slideshare: dotnet Cologne 2015 - Azure Service Fabric ">Slideshare: dotnet Cologne 2015 &#8211; Azure Service Fabric </a> </strong>
  1138. </div>
  1139. <h3>
  1140. Video<br />
  1141. </h3>
  1142. <p>
  1143. <iframe loading="lazy" allowfullscreen="" frameborder="0" height="438" src="https://www.youtube.com/embed/5qFuBV-XZ9Q" width="585"></iframe></p>
  1144. ]]></content:encoded>
  1145. <wfw:commentRss>https://www.sascha-dittmann.de/2015/05/dotnet-cologne-2015-azure-service-fabric/feed/</wfw:commentRss>
  1146. <slash:comments>1</slash:comments>
  1147. </item>
  1148. <item>
  1149. <title>Azure Service Fabric: Stateless Virtual Actors</title>
  1150. <link>https://www.sascha-dittmann.de/2015/05/azure-service-fabric-stateless-virtual-actors/</link>
  1151. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  1152. <pubDate>Tue, 05 May 2015 15:06:02 +0000</pubDate>
  1153. <category><![CDATA[.NET]]></category>
  1154. <category><![CDATA[Cloud Computing]]></category>
  1155. <category><![CDATA[Azure Service Fabric]]></category>
  1156. <category><![CDATA[Cloud]]></category>
  1157. <category><![CDATA[Cloud Services]]></category>
  1158. <category><![CDATA[Microservices]]></category>
  1159. <category><![CDATA[PaaS]]></category>
  1160. <category><![CDATA[Preview]]></category>
  1161. <guid isPermaLink="false">http://www.sascha-dittmann.de/?p=9892</guid>
  1162.  
  1163. <description><![CDATA[Vergangene Woche berichtete ich bereits über die neue Azure Service Fabric Preview der Microsoft Azure Plattform. Diese soll Entwicklern dabei helfen, schneller und unkomplizierter Anwendungen für die Cloud bauen zu können. Dabei können verschiedene Programmiermodelle eingesetzt werden, welche ich in diesem, sowie den kommenden Blog Posts, näher vorstellen möchte. Starten möchte ich mit den Stateless Virtual Actors ...]]></description>
  1164. <content:encoded><![CDATA[<p style="display: inline-block;">
  1165. <img decoding="async" loading="lazy" alt="Azure Service Fabric (Preview) - Virtual Actors" class="size-full" height="150" src="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; float: left;" width="150" /><strong>Vergangene Woche <a href="http://www.sascha-dittmann.de/2015/04/azure-service-fabric-paas-auf-microservice-basis/" target="_blank">berichtete ich bereits</a> &uuml;ber die neue Azure Service Fabric Preview der Microsoft Azure Plattform. Diese soll Entwicklern dabei helfen, schneller und unkomplizierter Anwendungen f&uuml;r die Cloud bauen zu k&ouml;nnen.<br />
  1166. Dabei k&ouml;nnen verschiedene Programmiermodelle eingesetzt werden, welche ich in diesem, sowie den kommenden Blog Posts, n&auml;her vorstellen m&ouml;chte.<br />
  1167. Starten m&ouml;chte ich mit den Stateless Virtual Actors&#8230;</strong>
  1168. </p>
  1169. <h2>
  1170. Distributed Virtual Actors<br />
  1171. </h2>
  1172. <p>
  1173. Das Modell der &raquo;Distributed Virtual Actors&laquo; ist nicht v&ouml;llig neu.<br />
  1174. Es entstand im Rahmen des Orleans Projektes der Microsoft Research.
  1175. </p>
  1176. <blockquote>
  1177. <p>
  1178. Project &quot;Orleans&quot; invented the Virtual Actor abstraction, which provides a straightforward approach to building distributed interactive applications, without the need to learn complex programming patterns for handling concurrency, fault tolerance, and resource management. Orleans applications scale-up automatically and are meant to be deployed in the cloud. It has been used heavily by a number of high-scale cloud services at Microsoft, starting with cloud services for the Halo franchise running in production in Microsoft Azure since 2011. It was made available as open source in January 2015.
  1179. </p>
  1180. </blockquote>
  1181. <p>
  1182. Wer mehr &uuml;ber die Orleans Virtual Actors wissen m&ouml;chte, sollte sich&nbsp;das <a href="http://aka.ms/OrleansVirtualActors" rel="nofollow" target="_blank">Research Paper</a> durchlesen.
  1183. </p>
  1184. <p>
  1185. Durch den Azure Service Fabric Dienst, wird dieses Modell mit verschiedenen Funktionalit&auml;ten angereichert, wie beispielsweise:
  1186. </p>
  1187. <ul>
  1188. <li>
  1189. Application Lifecycle Management
  1190. </li>
  1191. <li>
  1192. Beeinflussung der Microservice-Platzierung im Cluster
  1193. </li>
  1194. <li>
  1195. Ressourcenverwaltung
  1196. </li>
  1197. <li>
  1198. Sicherheitsfunktionen
  1199. </li>
  1200. <li>
  1201. Dienst&uuml;berwachung
  1202. </li>
  1203. </ul>
  1204. <p>
  1205. Somit stellt dieses Programmiermodell die h&ouml;chste Ebene in den Schichten der Azure Service Fabric API dar.
  1206. </p>
  1207. <p>
  1208. <img decoding="async" loading="lazy" alt="Azure Service Fabric - Runtime API Layers" class="size-full" height="400" src="https://media.sascha-dittmann.de/blog/2015/05/AzureServiceFabricLayers.png" width="585" />
  1209. </p>
  1210. <h2>
  1211. Wann sollte man Virtual Actors verwenden?<br />
  1212. </h2>
  1213. <p>
  1214. Virtual Actors eignen sich besonders, wenn die Applikation aus mehreren unabh&auml;ngigen Einheiten besteht, welche ihre eigene Gesch&auml;ftslogik und Statusinformationen enthalten.
  1215. </p>
  1216. <p>
  1217. Virtual Actors sind isolierte Single-Thread-Komponenten.<br />
  1218. Sie interagieren mit dem Rest des Systems, was auch andere Virtual Actors sein k&ouml;nnen, indem sie asynchrone Nachrichten austauschen (Request-Response-Pattern).<br />
  1219. Sie existieren immer, m&uuml;ssen also weder explizit erzeugt noch entfernt werden.
  1220. </p>
  1221. <h2>
  1222. Stateless Virtual Actors<br />
  1223. </h2>
  1224. <p>
  1225. Als Beispiel f&uuml;r einen &raquo;Stateless Virtual Actor&laquo; m&ouml;chte ich einen einfachen Taschenrechner hernehmen.
  1226. </p>
  1227. <p>
  1228. Nach man also, wie in meinem <a href="http://www.sascha-dittmann.de/2015/04/azure-service-fabric-paas-auf-microservice-basis/" target="_blank">vergangenen Blog Post</a> beschrieben, das Azure Service Fabric SDK installiert hat, kann in Visual Studio ein neues&nbsp;&raquo;Stateless Actor Service&laquo; Projekt&nbsp;erzeugt werden.
  1229. </p>
  1230. <p>
  1231. <img decoding="async" loading="lazy" alt="Visual Studio: Stateless Actor Vorlage" class="alignnone size-full wp-image-10002" height="381" src="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_01.png" width="585" srcset="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_01.png 585w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_01-300x195.png 300w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_01-150x98.png 150w" sizes="(max-width: 585px) 100vw, 585px" />
  1232. </p>
  1233. <p>
  1234. <a href="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_02.png" style="border: 0px currentColor; border-image: none;" target="_blank"><img decoding="async" loading="lazy" alt="Stateless Actor Projects" class="alignright size-medium wp-image-10022" height="300" src="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_02-181x300.png" style="border: 0px currentColor; border-image: none;" width="181" srcset="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_02-181x300.png 181w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_02-91x150.png 91w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_02.png 363w" sizes="(max-width: 181px) 100vw, 181px" /></a>Genauer gesagt, werden hierbei 4 Projekte in eine Solution gepackt.
  1235. </p>
  1236. <p>
  1237. Bei meinem Beispiel w&auml;ren das:
  1238. </p>
  1239. <ul>
  1240. <li>
  1241. <b>StatelessCalculatorActor</b><br />
  1242. Dieses Projekt enth&auml;lt die Implementierung und Konfiguration des Actors
  1243. </li>
  1244. <li>
  1245. <b>StatelessCalculatorActor.Client</b><br />
  1246. Dieses Projekt enth&auml;lt eine Konsolenapplikation, um den Actor zu testen
  1247. </li>
  1248. <li>
  1249. <b>StatelessCalculatorActor.Interfaces</b><br />
  1250. Dieses Projekt enth&auml;lt die Schnittstellenbeschreibungen, die sich die Actors und Clients teilen.
  1251. </li>
  1252. <li>
  1253. <b>StatelessCalculatorActorApplication</b><br />
  1254. Dieses Projekt enth&auml;lt das &raquo;Applicaton Manifest&laquo;, sowie die PowerShell-Skripte, die ben&ouml;tigt werden, um den Dienst paketieren und installieren bzw. deinstallieren zu k&ouml;nnen
  1255. </li>
  1256. <li>
  1257. Das <strong>Calculator</strong>-Projekt habe ich nachtr&auml;glich angef&uuml;gt und enth&auml;lt eine WPF-Applikation, die den Actor verwendet.
  1258. </li>
  1259. </ul>
  1260. <h3>
  1261. Implementierung des Taschenrechner-Actors<br />
  1262. </h3>
  1263. <p>
  1264. Als Erstes ben&ouml;tigt unser Taschenrechner-Actor eine Schnittstellenbeschreibung im StatelessCalculatorActor.Interfaces Projekt.<br />
  1265. Diese beinhaltet Methoden f&uuml;r die 4 Grundrechenarten unseres Taschenrechners.
  1266. </p>
  1267. <pre class="brush: c-sharp;">
  1268. public interface IStatelessCalculatorActor : IActor
  1269. {
  1270.  Task&lt;double&gt; Add(double x, double y);
  1271.  Task&lt;double&gt; Substract(double x, double y);
  1272.  Task&lt;double&gt; Multiply(double x, double y);
  1273.  Task&lt;double&gt; Divide(double x, double y);
  1274. }
  1275. </pre>
  1276. <p>
  1277. Als Zweites&nbsp;ben&ouml;tigen&nbsp;wir&nbsp;die Implementierung&nbsp;des&nbsp;Taschenrechner-Actors&nbsp;im StatelessCalculatorActor Projekt.<br />
  1278. Diese leitet von der Basis-Klasse <em>Actor</em> ab und implementiert unsere Schnittstelle.<br />
  1279. Au&szlig;erdem k&ouml;nnen wir die mitgelieferte <em>ActorEventSource</em> Klasse nutzen, um Statusinformationen&nbsp;an die Service Fabric Runtime&nbsp;zu melden.&nbsp;
  1280. </p>
  1281. <pre class="brush: c-sharp;">
  1282. public class StatelessCalculatorActor : Actor, IStatelessCalculatorActor
  1283. {
  1284.  public async Task&lt;double&gt; Add(double x, double y)
  1285.  {
  1286.    ActorEventSource.Current.ActorMessage(this, &quot;Add {0} and {1}&quot;, x, y);
  1287.    return await Task.FromResult(x + y);
  1288.  }
  1289.  
  1290.  public async Task&lt;double&gt; Divide(double x, double y)
  1291.  {
  1292.    ActorEventSource.Current.ActorMessage(this, &quot;Divide {0} by {1}&quot;, x, y);
  1293.    return await Task.FromResult(x / y);
  1294.  }
  1295.  
  1296.  public async Task&lt;double&gt; Multiply(double x, double y)
  1297.  {
  1298.    ActorEventSource.Current.ActorMessage(this, &quot;Multiply {0} and {1}&quot;, x, y);
  1299.    return await Task.FromResult(x * y);
  1300.  }
  1301.  
  1302.  public async Task&lt;double&gt; Substract(double x, double y)
  1303.  {
  1304.    ActorEventSource.Current.ActorMessage(this, &quot;Substract {1} from {0}&quot;, x, y);
  1305.    return await Task.FromResult(x - y);
  1306.  }
  1307. }</pre>
  1308. <p>
  1309. Zuletzt m&uuml;ssen nur noch die Clients implementiert werden.<br />
  1310. Auch diese referenzieren das Schnittstellen-Projekt, sowie die Service Fabric NuGet-Pakete.
  1311. </p>
  1312. <p>
  1313. Um den Actor ansprechen zu k&ouml;nnen wird ein Proxy-Objekt ben&ouml;tigt.<br />
  1314. Dieses kann &uuml;ber die ActorProxy-Factoryklasse erzeugt werden.<br />
  1315. Dabei verwende ich eine zuf&auml;llige Actor-ID, die mich auf einen der verf&uuml;gbaren Actor-Instanzen verweist, sowie den Pfad zur &uuml;bergeordneten&nbsp;Dienst-Applikation.<br />
  1316. Auf diese&nbsp;Konzepte werde ich in einem sp&auml;teren Blog Post n&auml;her eingehen.
  1317. </p>
  1318. <pre class="brush: c-sharp;">
  1319. public static void Main(string[] args)
  1320. {
  1321.  var proxy = ActorProxy.Create&lt;IStatelessCalculatorActor&gt;(
  1322.    ActorId.NewId(), &quot;fabric:/StatelessCalculatorActorApplication&quot;);
  1323.  
  1324.  Console.WriteLine(
  1325.    &quot;[Actor {0}]: 1 + 5 = {1}&quot;,
  1326.    proxy.GetActorId(),
  1327.    proxy.Add(1, 5).Result);
  1328.  
  1329.  Console.WriteLine(
  1330.    &quot;[Actor {0}]: 11 - 6 = {1}&quot;,
  1331.    proxy.GetActorId(),
  1332.    proxy.Substract(11, 6).Result);
  1333.  
  1334.  Console.WriteLine(
  1335.    &quot;[Actor {0}]: 3 * 5 = {1}&quot;,
  1336.    proxy.GetActorId(),
  1337.    proxy.Multiply(3, 5).Result);
  1338.  
  1339.  Console.WriteLine(
  1340.    &quot;[Actor {0}]: 9 / 2 = {1}&quot;,
  1341.    proxy.GetActorId(),
  1342.    proxy.Divide(9, 2).Result);
  1343. }</pre>
  1344. <h3>
  1345. Testen &amp; Debuggen<br />
  1346. </h3>
  1347. <p>
  1348. Anschlie&szlig;end kann die Solution &#8211; wie gewohnt &#8211; getested und debugged werden.
  1349. </p>
  1350. <p>
  1351. Als kleine Besonderheit werden beim Debuggen in Visual Studio diverse Statusmeldungen ausgegeben.
  1352. </p>
  1353. <p>
  1354. <a href="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_03.png" target="_blank"><img decoding="async" loading="lazy" alt="Stateless Calculator Actor" class="alignnone size-large wp-image-10112" height="549" src="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_03-1024x909.png" width="618" srcset="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_03-1024x909.png 1024w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_03-300x266.png 300w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_03-150x133.png 150w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_03.png 1060w" sizes="(max-width: 618px) 100vw, 618px" /></a>
  1355. </p>
  1356. <p>
  1357. Zus&auml;tzlich wird mit dem Azure Service Fabric SDK, auch ein kleines Tool, der Service Fabric Explorer, installiert, mit dem diverse Informationen des lokalen Clusters einsehbar sind.
  1358. </p>
  1359. <p>
  1360. <img decoding="async" loading="lazy" alt="Service Fabric Explorer" class="alignnone size-full wp-image-10122" height="407" src="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_04.png" width="600" srcset="https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_04.png 600w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_04-300x204.png 300w, https://media.sascha-dittmann.de/blog/2015/05/StatelessActor_04-150x102.png 150w" sizes="(max-width: 600px) 100vw, 600px" />
  1361. </p>
  1362. <h3>
  1363. Quellcode des Beispiels<br />
  1364. </h3>
  1365. <p>
  1366. Das komplette Taschenrechner-Beispiel habe ich <a href="https://github.com/SaschaDittmann/service-fabric-samples/tree/master/StatelessCalculatorActor" rel="nofollow" target="_blank">hier</a> zur Verf&uuml;gung gestellt.
  1367. </p>
  1368. <hr />
  1369. <div style="display: inline-block;">
  1370. <div style="float: left;">
  1371. <img decoding="async" alt="Weitere Informationen" src="https://media.sascha-dittmann.de/blog/Shared/info.png" />
  1372. </div>
  1373. <div style="float: left;">
  1374. <p>
  1375. Weitere Informationen:
  1376. </p>
  1377. <ul>
  1378. <li>
  1379. <a href="http://www.sascha-dittmann.de/2015/04/azure-service-fabric-paas-auf-microservice-basis/" target="_blank">Azure Service Fabric: PaaS auf Microservice-Basis</a>
  1380. </li>
  1381. <li>
  1382. <a href="http://research.microsoft.com/en-us/projects/orleans/" rel="nofollow" target="_blank">Microsoft Research: Project Orleans</a>
  1383. </li>
  1384. <li>
  1385. <a href="https://github.com/SaschaDittmann/service-fabric-samples/tree/master/StatelessCalculatorActor" rel="nofollow" target="_blank">GitHub: Stateless Calculator Actor </a>
  1386. </li>
  1387. </ul></div>
  1388. </div>
  1389. <hr />
  1390. ]]></content:encoded>
  1391. </item>
  1392. <item>
  1393. <title>Azure Service Fabric: PaaS auf Microservice-Basis</title>
  1394. <link>https://www.sascha-dittmann.de/2015/04/azure-service-fabric-paas-auf-microservice-basis/</link>
  1395. <dc:creator><![CDATA[Sascha Dittmann]]></dc:creator>
  1396. <pubDate>Wed, 29 Apr 2015 20:32:48 +0000</pubDate>
  1397. <category><![CDATA[.NET]]></category>
  1398. <category><![CDATA[Cloud Computing]]></category>
  1399. <category><![CDATA[Azure Service Fabric]]></category>
  1400. <category><![CDATA[Cloud]]></category>
  1401. <category><![CDATA[Cloud Services]]></category>
  1402. <category><![CDATA[Microservices]]></category>
  1403. <category><![CDATA[PaaS]]></category>
  1404. <category><![CDATA[Preview]]></category>
  1405. <guid isPermaLink="false">http://www.sascha-dittmann.de/?p=9672</guid>
  1406.  
  1407. <description><![CDATA[Nachdem Mark Russinovich bereits vor einigen Tagen die neuen Azure Service Fabric Preview angekündigt hatte, war es heute soweit. Im Rahmen der //build/ Konferenz wurde dieser Preview-Dienst für die Öffentlichkeit freigegeben. Diese neue PaaS soll Entwicklern dabei helfen, schneller und unkomplizierter Anwendungen für die Cloud zu konstruieren.]]></description>
  1408. <content:encoded><![CDATA[<p style="display: inline-block;">
  1409. <img decoding="async" loading="lazy" alt="Azure Service Fabric (Preview)" class="size-full" height="150" src="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 30px; float: left;" width="150" /><strong>Nachdem Mark Russinovich bereits vor einigen Tagen die neuen <a href="http://azure.microsoft.com/blog/2015/04/20/announcing-azure-service-fabric-reducing-complexity-in-a-hyper-scale-world/" rel="nofollow" target="_blank">Azure Service Fabric Preview angek&uuml;ndigt</a> hatte, war es heute soweit. Im Rahmen der <a href="http://www.buildwindows.com/" rel="nofollow" target="_blank">//build/ Konferenz</a> wurde dieser Preview-Dienst f&uuml;r die &Ouml;ffentlichkeit freigegeben. Diese neue PaaS soll Entwicklern dabei helfen, schneller und unkomplizierter Anwendungen f&uuml;r die Cloud zu konstruieren.</strong>
  1410. </p>
  1411. <h2>
  1412. Ist Azure Service Fabric komplett neu?<br />
  1413. </h2>
  1414. <p>
  1415. Die Service Fabric-Plattform wird bereits seit &uuml;ber 5 Jahren bei Microsoft intern eingesetzt und stellt dabei die Basis f&uuml;r einige Microsoft Produkte, wie beispielsweise Azure SQL Database, Azure DocumentDB, Azure Networking, Event Hubs, Intune, Skype for Business (ehemals Lync) und Bing Cortana.
  1416. </p>
  1417. <h2>
  1418. Ein Blick in die Vergangenheit<br />
  1419. </h2>
  1420. <p>
  1421. Bislang hatte man 3 Optionen, als Basis f&uuml;r Anwendungen in Microsoft Azure:
  1422. </p>
  1423. <ul>
  1424. <li>
  1425. Azure App Services (Web Apps, Logic Apps, Mobile Apps und API Apps)
  1426. </li>
  1427. <li>
  1428. Cloud Services
  1429. </li>
  1430. <li>
  1431. Virtual Machines
  1432. </li>
  1433. </ul>
  1434. <p>
  1435. Somit schwankte man in der Regel zwischen einem automatisierten Model zum Ausrollen und Betreiben von Applikationen, wie man es mit den Azure App Services hat, oder der vollen Kontrolle wie man es bei den Virtual Machines vorfindet.
  1436. </p>
  1437. <p>
  1438. Meiner Meinung nach, wird immer noch zu h&auml;ufig zu den Virtual Machines (IaaS) gegriffen, da man es in der Vergangenheit so gewohnt war.<br />
  1439. F&uuml;r die eigenen Anwendungen, ist ein so hohes Ma&szlig; an Kontrolle meist gar nicht n&ouml;tig, und man macht sich mit dem dadurch entstehenden Manuellen Aufwand nur unn&ouml;tig das Leben schwer.
  1440. </p>
  1441. <p>
  1442. Bei den Cloud Services, hatte man eine gute Kombination aus beiden Welten.<br />
  1443. Man hatte ein einfaches Programmiermodell, und die Azure-Plattform nahm einem Vieles ab, und trotzdem konnte man durch ein hohes Ma&szlig; an Kontrolle die VMs nach seinen W&uuml;nschen anpassen.
  1444. </p>
  1445. <p>
  1446. Das Ganze hatte nat&uuml;rlich auch einige Nachteile&hellip;
  1447. </p>
  1448. <p>
  1449. <a href="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_01.png"><img decoding="async" loading="lazy" alt="Cloud Service Architektur" class="alignright size-medium wp-image-9742" height="127" src="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_01-300x127.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_01-300x127.png 300w, https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_01-150x64.png 150w, https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_01.png 585w" sizes="(max-width: 300px) 100vw, 300px" /></a>Schnell war man bei einem Cloud Services bei einer recht komplexen Architektur angelangt.<br />
  1450. Diese bestand meist aus Web- und Worker Roles, Queues f&uuml;r die asynchrone Kommunikation zwischen den Rollen, sowie Speicherdiensten, wie&nbsp; beispielsweise Azure SQL Database oder Azure Storage, da die erzeugten VMs keine eigenen dauerhaften Speicherm&ouml;glichkeiten boten.<br />
  1451. Schnell kam auch ein In-Memory-Cache f&uuml;r die Datenbanken hinzu.
  1452. </p>
  1453. <p>
  1454. Hinzu kam noch, dass das Ausrollen und Testen eines Cloud Services immer ein wenig Zeit in Anspruch nahm, da aus den Rollen auch erst mal VMs erzeugt werden mussten.
  1455. </p>
  1456. <h2>
  1457. Applikationen auf Microservice-Basis<br />
  1458. </h2>
  1459. <p>
  1460. Bei der Azure Service Fabric muss eine komplexe Applikationen in kleine, eigenst&auml;ndige Module aufgeteilt werden, sogenannte Microservices.
  1461. </p>
  1462. <p>
  1463. Diese, sowie einige Konfigurationsinformationen, werden dann in einem Applikationspaket verpackt und in der Azure Service Fabric ausgerollt.<br />
  1464. Dabei kann so ein Microservice verschiedene Technologieren verwenden, wie z.B. ASP.NET 5, Node.js, JVM oder auch eine einfache EXE-Datei.
  1465. </p>
  1466. <p>
  1467. <a href="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_02.png"><img decoding="async" loading="lazy" alt="Azure Service Fabric Cluster" class="size-medium" height="163" src="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_02-300x163.png" style="margin: 0px 10px 5px 0px; padding-right: 10px; padding-bottom: 10px; float:left;" width="300" /></a>Die Azure Service Fabric nutzt dann ein oder mehrere&nbsp;vom Benutzer erstelle Cluster aus VMs, um diese Microservices zu betreiben.
  1468. </p>
  1469. <p>
  1470. Dabei k&ouml;nnen die Cluster sowohl in der Public Cloud oder auch im eigenen Rechenzentrum betreiben werden (Dieser Dienst soll auch Teil des n&auml;chsten Windows Server werden).
  1471. </p>
  1472. <p>
  1473. Auch beim Betriebssystem will Microsoft flexibel sein. Momentan wird zwar nur Windows angeboten. Zuk&uuml;nftig soll es aber auch m&ouml;glich sein Linux-Cluster zu erstellen.
  1474. </p>
  1475. <p>
  1476. Die Service Fabric Container, bieten au&szlig;erdem die M&ouml;glichkeit einen lokalen Speichermechanismus zu verwenden, um so die Daten nahe am Dienst und damit im schnellen Zugriff zu haben.<br />
  1477. Somit lassen sich auch Stateful-Microservices erstellen.
  1478. </p>
  1479. <p>
  1480. Eine Architektur einer solchen Anwendung k&ouml;nnte dann wie folgt aussehen:
  1481. </p>
  1482. <p>
  1483. <img decoding="async" loading="lazy" alt="Azure Service Fabric - Anwendungsarchitektur" class="alignnone size-full" height="354" src="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_03.png" width="595" />
  1484. </p>
  1485. <p style="display: inline-block;">
  1486. <a href="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_04.png"><img decoding="async" loading="lazy" alt="Azure Service Fabric - Replikationsset" class="alignright size-medium wp-image-9832" height="225" src="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_04-300x225.png" width="300" srcset="https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_04-300x225.png 300w, https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_04-150x112.png 150w, https://media.sascha-dittmann.de/blog/2015/04/AzureServiceFabric_04.png 410w" sizes="(max-width: 300px) 100vw, 300px" /></a>Zu Ausfallsicherheit k&ouml;nnen im Cluster mehrere Instanzen des Microservices gestartet werden, wobei immer nur eine aktiv ist (Primary).<br />
  1487. Die Sekund&auml;rinstanzen sind dann Teil eines Replikationssets und erhalten alle Daten der Prim&auml;rinstanz. Es wird dabei durch Transaktionen sichergestellt, dass mindestens eine Sekund&auml;rinstanz den aktuellen Stand der Daten enth&auml;lt.<br />
  1488. Wenn dann die Prim&auml;rinstanz ausfallen sollte, wird umgehend eine Sekund&auml;rinstanz zum neuen Primary erhoben.
  1489. </p>
  1490. <h2>
  1491. Entwicklungsumgebung f&uuml;r die Service Fabric<br />
  1492. </h2>
  1493. <p>
  1494. Wer mit der Azure Service Fabric Preview gleich loslegen m&ouml;chte, ben&ouml;tigt dazu den <a href="http://go.microsoft.com/fwlink/?linkid=517106" rel="nofollow" target="_blank">Visual Studio 2015 RC</a>, sowie das <a href="http://www.microsoft.com/web/handlers/webpi.ashx?command=getinstallerredirect&amp;appid=MicrosoftAzure-ServiceFabric">Service Fabric SDK</a>, was &uuml;ber den Web Platform Installer installiert werden kann.
  1495. </p>
  1496. <p>
  1497. Da das Service Fabric SDK PowerShell-Skripte f&uuml;r das Testen der Anwendung im Lokalen Cluster ausf&uuml;hren will, muss vorher folgender PowerShell-Befehl im entsprechenden Benutzerkontext ausgef&uuml;hrt werden:
  1498. </p>
  1499. <pre>
  1500. Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force -Scope CurrentUser
  1501. </pre>
  1502. <p>
  1503. Anschlie&szlig;end kann man sich ein lokales Cluster erstellen:
  1504. </p>
  1505. <ol>
  1506. <li>
  1507. Ein PowerShell Fenster mit Administrator-Rechten &ouml;ffnen
  1508. </li>
  1509. <li>
  1510. In das %programfiles%\Microsoft SDKs\Service Fabric\ClusterSetup Verzeichnis wechseln
  1511. </li>
  1512. <li>
  1513. Das PowerShell-Skript ./DevClusterSetup.ps1 ausf&uuml;hren
  1514. </li>
  1515. </ol>
  1516. <p>
  1517. &nbsp;
  1518. </p>
  1519. <hr />
  1520. <div style="display: inline-block;">
  1521. <div style="float: left;">
  1522. <img decoding="async" alt="Weitere Informationen" src="https://media.sascha-dittmann.de/blog/Shared/info.png" />
  1523. </div>
  1524. <div style="float: left;">
  1525. <p>
  1526. Weitere Informationen:
  1527. </p>
  1528. <ul>
  1529. <li>
  1530. <a href="http://azure.microsoft.com/blog/2015/04/20/announcing-azure-service-fabric-reducing-complexity-in-a-hyper-scale-world/" rel="nofollow" target="_blank">Announcing Azure Service Fabric: Reducing Complexity in a Hyper-scale World</a>
  1531. </li>
  1532. <li>
  1533. <a href="http://go.microsoft.com/fwlink/?linkid=517106" rel="nofollow" target="_blank">Visual Studio 2015 RC</a>
  1534. </li>
  1535. <li>
  1536. <a href="http://www.microsoft.com/web/handlers/webpi.ashx?command=getinstallerredirect&amp;appid=MicrosoftAzure-ServiceFabric">Download: Azure Service Fabric SDK</a>
  1537. </li>
  1538. </ul></div>
  1539. </div>
  1540. <hr />
  1541. ]]></content:encoded>
  1542. </item>
  1543. </channel>
  1544. </rss>
  1545.