আমি কীভাবে পুতুল বা এমক্লিকটিভের সাথে রোলিং ওএস আপগ্রেডগুলি এবং রিবুটগুলি স্থাপন করতে পারি?


8

আমি আমার অবকাঠামোর জন্য নিয়মিত রোলিং আপগ্রেড করার সর্বোত্তম উপায়টি সন্ধান করছি।

সাধারণত, এটি প্রতিটি হোস্টে এটি করা জড়িত, একবারে একটি করে:

sudo yum update -y && sudo reboot

তবে, আমি এটিকে স্কেলেবল হওয়ার সীমাবদ্ধতা দিচ্ছি।

আমি আমার প্রতিটি ভূমিকার মধ্যে একবারে কেবল একটি নোড রিবুট করতে চাই, যাতে এটি বলে যে আমি আমার সমস্ত লোড ব্যালান্সার বা ডিবি ক্লাস্টার সদস্যকে একই সাথে নামাচ্ছি না।

আদর্শভাবে, আমি কিছু করতে চাই:

for role in $(< roles_list.txt) ; do
    mco package update_all_and_reboot \
        --batch 1 --batch-sleep 90 \
        -C $role -F environment=test
done

কিন্তু, এটির বেশিরভাগ অস্তিত্ব আছে বলে মনে হয় না। আমি নিশ্চিত না "শেল" এজেন্ট ব্যবহার করা কি সেরা পদ্ধতির হয়?

mco shell run 'yum update -y && reboot' \
    --batch 1 --batch-sleep 90

আমি কি শুধু এই কাজের জন্য ভুল ধরণের সরঞ্জামের দিকে তাকিয়ে আছি? এই ধরণের ঘূর্ণায়মান রিবুটগুলি পরিচালনার জন্য আরও ভাল কিছু আছে, তবে আমি আমার পুতুল-নিয়োগের ভূমিকাগুলির সাথে কোনওভাবে লিঙ্ক করতে পারি, যাতে আমি স্বাচ্ছন্দ্য বোধ করতে পারি যে আমি একবারে কোনও গুরুত্বপূর্ণ কিছু নিচ্ছি না, তবে আমি এখনও পারব কিছু সমান্তরাল আপডেট এবং রিবুট করবেন?


রিবুট কেন ( unix.stackexchange.com/a/28162/65367 )? এটি কি পুতুল হওয়া দরকার বা অন্যান্য দ্রবণগুলিও অনুমোদিত?
030

কারণ ইদানীং ঘন ঘন লিনাক্স কার্নেলের আপডেট রয়েছে যার জন্য পুনঃসূচনা প্রয়োজন।
পাইওটো

ঠিক আছে. আমি এটি পরীক্ষা করেছি এবং এটি আমার সিস্টেমে কাজ করে। আপনি কি এটি আপনার সিস্টেমেও পরীক্ষা করতে পারবেন?
030

উত্তর:


2

কনফিগারেশন

স্থাপন

cd /usr/share/ruby/vendor_ruby/mcollective/application
wget https://raw.githubusercontent.com/arnobroekhof/mcollective-plugin-power/master/application/power.rb

এবং

cd /usr/libexec/mcollective/mcollective/agent
wget https://raw.githubusercontent.com/arnobroekhof/mcollective-plugin-power/master/agent/power.ddl
wget https://raw.githubusercontent.com/arnobroekhof/mcollective-plugin-power/master/agent/power.rb

উভয় হোস্টে, যেমন test-server1এবং test-server2

সেবা

উভয় পরিষেবাগুলিতে বিবিধ পুনরায় চালু করুন:

[vagrant@test-server1 ~]# sudo service mcollective restart

এবং

[vagrant@test-server2 ~]# sudo service mcollective restart

কমান্ড

এমকোলেক্টিভ সার্ভার নোডে নিম্নলিখিত কমান্ডগুলি চালনা করুন:

হোস্ট test-server2শুনছেন:

[vagrant@test-server1 ~]$ mco ping
test-server2                             time=25.32 ms
test-server1                             time=62.51 ms


---- ping statistics ----
2 replies max: 62.51 min: 25.32 avg: 43.91

পুনরায় বুট করুন test-server2:

[vagrant@test-server1 ~]$ mco power reboot -I test-server2

 * [ ============================================================> ] 1 / 1

test-server2                             Reboot initiated

Finished processing 1 / 1 hosts in 123.94 ms

test-server2পুনরায় বুট করার নেই:

[vagrant@test-server1 ~]$ mco ping
test-server1                             time=13.87 ms


---- ping statistics ----
1 replies max: 13.87 min: 13.87 avg: 13.87

এবং এটি পুনরায় বুট করা হয়েছে:

[vagrant@test-server1 ~]$ mco ping
test-server1                             time=22.88 ms
test-server2                             time=54.27 ms


---- ping statistics ----
2 replies max: 54.27 min: 22.88 avg: 38.57

নোট করুন যে কোনও হোস্টের পাশাপাশি শাটডাউন করাও সম্ভব:

[vagrant@test-server1 ~]$ mco power shutdown -I test-server2

 * [ ============================================================> ] 1 / 1

test-server2                             Shutdown initiated

Finished processing 1 / 1 hosts in 213.18 ms

আসল কোড

/usr/libexec/mcollective/mcollective/agent/power.rb

module MCollective
  module Agent
    class Power<RPC::Agent

      action "shutdown" do
  out = ""
  run("/sbin/shutdown -h now", :stdout => out, :chomp => true )
  reply[:output] = "Shutdown initiated"
      end

      action "reboot" do
  out = ""
  run("/sbin/shutdown -r now", :stdout => out, :chomp => true )
  reply[:output] = "Reboot initiated"
      end

    end
  end
end

# vi:tabstop=2:expandtab:ai:filetype=ruby

/usr/libexec/mcollective/mcollective/agent/power.ddl

metadata    :name        => "power",
            :description => "An agent that can shutdown or reboot them system",
            :author      => "A.Broekhof",
            :license     => "Apache 2",
            :version     => "2.1",
            :url         => "http://github.com/arnobroekhof/mcollective-plugins/wiki",
            :timeout     => 5

action "reboot", :description => "Reboots the system" do
    display :always

    output :output,
           :description => "Reboot the system",
           :display_as => "Power"
end

action "shutdown", :description => "Shutdown the system" do
    display :always

    output :output,
           :description => "Shutdown the system",
           :display_as  => "Power"
end

/usr/share/ruby/vendor_ruby/mcollective/application/power.rb

class MCollective::Application::Power<MCollective::Application
  description "Linux Power broker"
  usage "power [reboot|shutdown]"

  def post_option_parser(configuration)
    if ARGV.size == 1
      configuration[:command] = ARGV.shift
    end
  end

  def validate_configuration(configuration)
    raise "Command should be one of reboot or shutdown" unless configuration[:command] =~ /^shutdown|reboot$/

  end

  def main
    mc = rpcclient("power")

    mc.discover :verbose => true
    mc.send(configuration[:command]).each do |node|
      case configuration[:command]
      when "reboot"
        printf("%-40s %s\n", node[:sender], node[:data][:output])
      when "shutdown"
        printf("%-40s %s\n", node[:sender], node[:data][:output])
      end 
    end

    printrpcstats

    mc.disconnect

  end

end

# vi:tabstop=2:expandtab:ai

সংশোধিত কোড

/usr/libexec/mcollective/mcollective/agent/power.ddl

metadata    :name        => "power",
            :description => "An agent that can shutdown or reboot them system",
            :author      => "A.Broekhof",
            :license     => "Apache 2",
            :version     => "2.1",
            :url         => "http://github.com/arnobroekhof/mcollective-plugins/wiki",
            :timeout     => 5

action "update-and-reboot", :description => "Reboots the system" do
    display :always

    output :output,
           :description => "Reboot the system",
           :display_as => "Power"
end

/usr/libexec/mcollective/mcollective/agent/power.rb

module MCollective
  module Agent
    class Power<RPC::Agent    
      action "update-and-reboot" do
        out = ""
        run("yum update -y && /sbin/shutdown -r now", :stdout => out, :chomp => true )
        reply[:output] = "Reboot initiated"
      end
    end
  end
end

# vi:tabstop=2:expandtab:ai:filetype=ruby

হুকুম

[vagrant@test-server1 ~]$ mco power update-and-reboot -I test-server2

 * [ ============================================================> ] 1 / 1


Finished processing 1 / 1 hosts in 1001.22 ms

অনেক ভাল বিস্তারিত, ধন্যবাদ। আমি এমন একক কমান্ডের সন্ধান করছিলাম যা একসাথে আপডেট এবং রিবুট সম্পাদন করতে পারে, উদাহরণস্বরূপ, এমসিও পাওয়ার আপডেট-এবং-রিবুট -I পরীক্ষা-সার্ভারগুলি। এমসিও তার পরে একটি সার্ভারে আপডেট-রিবুট প্রয়োগ করে, এটি আবার ফিরে আসার জন্য অপেক্ষা করুন, তারপরে দ্বিতীয়টিতে প্রয়োগ করুন।
বেনিয়ামিন গুডাক্রে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.