অ্যাজুরে উবুন্টু ভিএম এর জন্য কীভাবে একটি অদলবদল তৈরি করবেন?


9

আমি এ সম্পর্কে বেশ কয়েকটি পোস্ট পড়েছি, তবে আমি ধরে নিচ্ছি সঠিক পদ্ধতির বিষয়ে এখনও আমি অনিশ্চিত:

  1. আমার একটি ডিফল্ট উবুন্টু আছে 14.04 এলটিএস ভিএম তৈরি করেছে এবং আজুরে চলছে, যা অদলবদল করে না

  2. আমি অতিরিক্ত ভিও স্টোরেজ ব্যবহার করে একটি নতুন ডিস্কের পরিবর্তে বিদ্যমান ভিএম স্টোরেজ ব্যবহার করে একটি সোয়াপ তৈরি করতে চাই

আমি যে পোস্টগুলি পড়েছি:

অনেকগুলি সমাধান নিয়ে আলোচনা করা হয়েছিল তবে আমি এমন কোনও সন্ধান করতে পারি না যা সার্ভারের পুনরায় বুট করে চলতে থাকবে (সম্ভবত মেঘ-ইন্দের কারণে চিত্র বিভাজন সম্পর্কে এটি নিজস্ব ধারণা আছে), কেউ কি আমাকে সেরা অনুশীলনের পরামর্শ দিতে পারেন?

উত্তর:


8

ধরে নিচ্ছি যে আপনার লিনাক্স এজেন্ট ইনস্টল আছে। আপনাকে যা করতে হবে তা হ'ল /etc/waagent.conf এর অধীনে অদলবদল সক্ষম করা। এগুলি সম্পর্কিত লাইনগুলি:

ResourceDisk.Format=y                   # Format if unformatted. If 'n', resour$
ResourceDisk.Filesystem=ext4            # Typically ext3 or ext4. FreeBSD image$
ResourceDisk.MountPoint=/mnt/resource   #
ResourceDisk.EnableSwap=y               # Create and use swapfile on resource d$
ResourceDisk.SwapSizeMB=2048            # Size of the swapfile.

এটি অদলবদল তৈরি করতে স্বয়ংক্রিয়ভাবে রিসোর্স ডিস্ক (যা প্রতিটি ভিএম এর সাথে আসে) ব্যবহার করবে। এটির জন্য একটি ডিস্ক তৈরি করার দরকার নেই।

আপডেট : সোয়াপ ফাইলটি তৈরি করতে আপনাকে নীচের পদক্ষেপগুলি সম্পাদন করতে হবে:

umount /mnt
service walinuxagent restart

অন্যান্য বিতরণগুলির মতো ডিস্ক বিধান উবুন্টুতে ক্লাউড ইন্স দ্বারা নিয়ন্ত্রিত হয়। সুতরাং না, এটি কাজ করা উচিত নয় এবং ডক এবং আমার পরীক্ষা উভয়ই এটি নিশ্চিত করে।
বিটিন

2
আমি মাইক্রোসফট সমর্থন সাথে যোগাযোগ করেন এবং পাওয়া সমাধান সেট হয় ResourceDisk.Format, ResourceDisk.EnableSwapএবং ResourceDisk.SwapSizeMB। তবে গুরুত্বপূর্ণ পদক্ষেপটি হ'ল sudo service walinuxagent restartসোয়াপ ফাইল তৈরির জন্য একটি ম্যানুয়াল করা, যেমন কেবল রিবুট সার্ভারটি আমার পক্ষে কাজ করে না।
বিটিন

আমি এখনও ক্লাউড ইন্স এই সমস্ত বিষয় সম্পর্কে কীভাবে চিন্তা করি সে সম্পর্কে জিজ্ঞাসা করছি কারণ তাদের দস্তাবেজ এবং ওয়েজেন্ট.কনফ মন্তব্যগুলি বিভ্রান্তিকর।
বিটিন

হা. আমি দুঃখিত. এজেন্ট পুনরায় চালু অন্তর্ভুক্ত। আমি আমার উবুন্টু ভিএম পরীক্ষা করেছি এবং সমস্যা ছাড়াই কাজ করেছি। আমি উত্তর আপডেট করেছি। ক্লাউড-আরআইএন সম্পর্কে, আমি মনে করি না যে এটি একটি সোয়াপ ফাইলটি তৈরির সাথে কিছু করার সাথে এজেন্টের একটি ফাইল ext4 পার্টিশনের (/ mnt) ফাইল তৈরি করে creates এটি কোনও অদলবদল তৈরি করে না।
ব্রুনো ফারিয়া

2
আজুর গ্যালারী চিত্র থেকে তৈরি উবুন্টু 14.04 এলটিএস ভিএম-তে কাজ করেনি। সমস্ত পদক্ষেপ সম্পাদন করার পরে, swapon -sস্বাপ ফাইলগুলির খালি তালিকা দেখায়।
জাস্টামার্টিন

2

ব্রুনোর উত্তর একটি দুর্দান্ত সূচনা পয়েন্ট, তবে এটি কেবল পুনরায় বুট করার পরে এবং বুট করার পরে আরও এক মিনিট সময় দেওয়ার পরে এটি কাজ করে।

ক। /etc/waagent.confপ্রাসঙ্গিক লাইনগুলিতে অদলবদল সক্ষম করুন :

ResourceDisk.Format=y                   # Format if unformatted. If 'n', resour$
ResourceDisk.Filesystem=ext4            # Typically ext3 or ext4. FreeBSD image$
ResourceDisk.MountPoint=/mnt/resource   #
ResourceDisk.EnableSwap=y               # Create and use swapfile on resource d$
ResourceDisk.SwapSizeMB=2048            # Size of the swapfile.

খ। রুট হিসাবে নিম্নলিখিতটি করুন, এর মধ্যে আপনার মেশিনটি রিবুট করার অন্তর্ভুক্ত রয়েছে:

umount /mnt
service walinuxagent restart
reboot

গ। বুট করার পরে অদলবদল সক্রিয় হওয়ার আগে এটি কিছুটা সময় নেয়। আপনি এটি দিয়ে পরীক্ষা করতে পারেন swapon -s


1

আমি বিশ্বাস করি এটি করার সঠিক উপায় যাতে ক্লাউড-আরআর এবং ওয়েজেন্ট উভয়ই একসাথে 'দুর্দান্ত' খেলায় ( ক্লাউড- ইনিশ অ্যাজুরি ডক্স থেকে ) এই মানগুলি সেট করে রাখে

# disabling provisioning turns off all 'Provisioning.*' function
Provisioning.Enabled=n
# this is currently not handled by cloud-init, so let walinuxagent do it.
ResourceDisk.Format=y
ResourceDisk.MountPoint=/mnt

আমি মাউন্টপয়েন্টটি পরিবর্তন করার চেষ্টা করেছি তবে এটি সঠিকভাবে কাজ করছে বলে মনে হচ্ছে না তাই ডক্স সম্ভবত মানগুলি সম্পর্কে সঠিক

এবং তারপরে আপনি নিজের পছন্দ মতো অদলবদল বিকল্পগুলি কাস্টমাইজ করতে পারেন

# Create and use swapfile on resource disk.
ResourceDisk.EnableSwap=y

# Size of the swapfile.
ResourceDisk.SwapSizeMB=8192

একটি মৌলিক পুনঃসূচনা নতুন সোয়াপ সূক্ষ্ম তুলে তোলে

sudo service walinuxagent restart

free -m
             total       used       free     shared    buffers     cached
Mem:          3944        882       3061         44         29        163
-/+ buffers/cache:        689       3255
Swap:         8192          0       8192

0

আমি এ সম্পর্কে বেশ কয়েকটি পোস্ট পড়েছি, তবে আমি ধরে নিচ্ছি সঠিক পদ্ধতির বিষয়ে এখনও আমি অনিশ্চিত: ১। আমার একটি ডিফল্ট উবুন্টু আছে ১৪.০৪ এলটিএস ভিএম তৈরি করেছেন এবং অ্যাজুরে চালিয়ে যা, যা অদলবদলের সাথে আসে না। I অতিরিক্ত স্টোরেজ ব্যবহার করে একটি নতুন ডিস্ক তৈরির পরিবর্তে বিদ্যমান ভিএম স্টোরেজ ব্যবহার করে একটি সোয়াপ তৈরি করতে চান

আমি এটির জন্যও প্রয়োজন ছিলাম (আসলে ১৪.০৪ এর পরিবর্তে ১ 16.০৪, তবে আমার উত্তর আমার মনে হয় উভয়ের ক্ষেত্রেই প্রযোজ্য)।

আমি যে পোস্টগুলি পড়েছি:

তবে যখন আমি দেখলাম আমাকে এত দীর্ঘ প্রবন্ধগুলি পড়তে হয়েছে যেগুলি আপনি উল্লেখ করেছেন, আমি ছেড়ে যাচ্ছি ... তবে হঠাৎ ডিজিটালঅ্যাসনের ব্লগে একটি খুব সোজা প্রবন্ধের কথা মনে পড়ল:

উবুন্টুতে কীভাবে স্বয়প যোগ করবেন 14.04

এটি এত সহজ যে আমি এমনকি এটির জন্য একটি স্ক্রিপ্টও লিখেছি (কমপক্ষে সেরা অংশের জন্য, এখনও অদলবদল সেটিংস এবং অন্যান্য উন্নত সামগ্রী নয়):

#!/usr/bin/env fsharpi

open System
open System.IO
open System.Net
open System.Diagnostics

#load "InfraTools.fs"
open Gatecoin.Infrastructure

// automation of https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

let NUMBER_OF_GB_FOR_SWAP = 1

let isThereSwapMemoryInTheSystem (): bool =
    let _,output,_ = Tools.SafeHiddenExec("swapon", "-s")
    (output.Trim().Length > 0)

if (isThereSwapMemoryInTheSystem()) then
    Console.WriteLine("Swap already setup")
    Environment.Exit(0)

let swapFile = new FileInfo(Path.Combine("/", "swapfile"))
if not (swapFile.Exists) then
    Tools.BailIfNotSudoer("Need to use 'fallocate' to create swap file")
    Console.WriteLine("Creating swap file...")
    Tools.SafeExec("fallocate", String.Format("-l {0}G {1}", NUMBER_OF_GB_FOR_SWAP, swapFile.FullName), true)

let permissionsForSwapFile = 600
if not (Tools.OctalPermissions(swapFile) = permissionsForSwapFile) then
    Tools.BailIfNotSudoer("Need to adjust permissions of the swap file")
    Tools.SafeExec("chmod", String.Format("{0} {1}", permissionsForSwapFile, swapFile.FullName), true)

Tools.BailIfNotSudoer("Enable swap memory")
Tools.SafeExec("mkswap", swapFile.FullName, true)
Tools.SafeExec("swapon", swapFile.FullName, true)
if not (isThereSwapMemoryInTheSystem()) then
    Console.WriteLine("Something went wrong while enabling the swap file")
    Environment.Exit(1)

Tools.BailIfNotSudoer("Writing into /etc/fstab")
Tools.SafeHiddenExecBashCommand(String.Format("echo \"{0}   none    swap    sw    0   0\" >> /etc/fstab", swapFile.FullName))

উপরের কাজ করার জন্য আপনাকে sudo apt install fsharpপ্রথমে দরকার (কমপক্ষে উবুন্টু 16.04-র সংগ্রহস্থলে fsharp রয়েছে, 14.04 সম্পর্কে নিশ্চিত নয়)।

এছাড়াও আপনার এই InfraTools.fsফাইলটি দরকার :

open System
open System.IO
open System.Net

namespace Gatecoin.Infrastructure

module Tools =

    let HiddenExec (command: string, arguments: string) =
        let startInfo = new System.Diagnostics.ProcessStartInfo(command)
        startInfo.Arguments <- arguments
        startInfo.UseShellExecute <- false

        // equivalent to `>/dev/null 2>&1` in unix
        startInfo.RedirectStandardError <- true
        startInfo.RedirectStandardOutput <- true

        use proc = System.Diagnostics.Process.Start(startInfo)
        proc.WaitForExit()
        (proc.ExitCode,proc.StandardOutput.ReadToEnd(),proc.StandardError.ReadToEnd())

    let HiddenExecBashCommand (commandWithArguments: string) =
        let args = String.Format("-c \"{0}\"", commandWithArguments.Replace("\"", "\\\""))
        HiddenExec("bash", args)

    let SafeHiddenExecBashCommand (commandWithArguments: string) =
        let exitCode,stdOut,stdErr = HiddenExecBashCommand commandWithArguments
        if not (exitCode = 0) then
            Console.Error.WriteLine(stdErr)
            Console.Error.WriteLine()
            Console.Error.WriteLine("Bash command '{0}' failed with exit code {1}.", commandWithArguments, exitCode.ToString())
            Environment.Exit(1)
        exitCode,stdOut,stdErr

    let Exec (command: string, arguments: string, echo: bool) =
        let psi = new System.Diagnostics.ProcessStartInfo(command)
        psi.Arguments <- arguments
        psi.UseShellExecute <- false
        if (echo) then
            Console.WriteLine("{0} {1}", command, arguments)
        let p = System.Diagnostics.Process.Start(psi)
        p.WaitForExit()
        p.ExitCode

    let ExecBashCommand (commandWithArguments: string, echo: bool) =
        let args = String.Format("-c \"{0}\"", commandWithArguments.Replace("\"", "\\\""))
        if (echo) then
            Console.WriteLine(commandWithArguments)
        Exec("bash", args, false)

    let SafeHiddenExec (command: string, arguments: string) =
        let exitCode,stdOut,stdErr = HiddenExec(command, arguments)
        if not (exitCode = 0) then
            Console.Error.WriteLine(stdErr)
            Console.Error.WriteLine()
            Console.Error.WriteLine("Command '{0}' failed with exit code {1}. Arguments supplied: '{2}'", command, exitCode.ToString(), arguments)
            Environment.Exit(1)
        exitCode,stdOut,stdErr

    let SafeExec (command: string, arguments: string, echo: bool) =
        let exitCode = Exec(command, arguments, echo)
        if not (exitCode = 0) then
            Console.Error.WriteLine("Command '{0}' failed with exit code {1}. Arguments supplied: '{2}'", command, exitCode.ToString(), arguments)
            Environment.Exit(1)
            failwith "unreached"
        ()

    let SafeExecBashCommand (commandWithArguments: string, echo: bool) =
        let args = String.Format("-c \"{0}\"", commandWithArguments.Replace("\"", "\\\""))
        if (echo) then
            Console.WriteLine(commandWithArguments)
        SafeExec("bash", args, false)

    let FirstElementOf3Tuple (a, _, _) = a
    let SecondElementOf3Tuple (_, b, _) = b

    let SimpleStringSplit (str: string, separator: string): string list =
        List.ofSeq(str.Split([|separator|], StringSplitOptions.RemoveEmptyEntries))

    let SplitStringInLines (str: string): string list =
        SimpleStringSplit(str,Environment.NewLine)

    let CommandWorksInShell (command: string): bool =
        let exitCode =
            try
                Some(FirstElementOf3Tuple(HiddenExec(command,String.Empty))
            with
                | :? System.ComponentModel.Win32Exception -> (); None
        if exitCode.IsNone then
            false
        else
            true

    let BailIfNotSudoer(reason: string): unit =   
        if not (CommandWorksInShell "id") then
            Console.WriteLine ("'id' unix command is needed for this script to work")
            Environment.Exit(2)
            ()

        let _,idOutput,_ = HiddenExec("id","-u")
        if not (idOutput.Trim() = "0") then
            Console.Error.WriteLine ("Error: needs sudo privilege. Reason: {0}", reason)
            Environment.Exit(3)
            ()
        ()

    let OctalPermissions (file: FileInfo): int =
        let output = SecondElementOf3Tuple(SafeHiddenExec("stat", String.Format("-c \"%a\" {0}", file.FullName)))
        Int32.Parse(output.Trim())

অনেকগুলি সমাধান নিয়ে আলোচনা করা হয়েছিল তবে আমি এমন কোনও সন্ধান করতে পারি না যা সার্ভারের পুনরায় বুটগুলি জুড়ে থাকবে

সার্ভার পুনরায় বুট করার মাধ্যমে যে অংশটি আমার উত্তরকে কাজ করে তা হ'ল / etc / fstab ফাইলটিতে লেখা।

এই সমাধানটির ভাল জিনিসটি এটি অ্যাজুরে, ডিজিটাল ওশেন, ইউনামআইটি, ...

উপভোগ করুন!


2
"এটি এত সহজ" এর পরে 50 লাইনের কোড একটি অক্সিমোরন বলে মনে হচ্ছে!
kqw

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.