자체 호스팅 된 .NET 서비스를위한 app.config 파트의 중앙 집중식 관리 다시 설치해야하는 경우에는 여러 대의 컴퓨터에서

일회성이 아니지만 정기적 인 경우 이러한 시나리오를 처리하는 가장 좋은 방법은 무엇입니까?

  • 중앙 집중 방식으로 다른 데이터베이스에 다시 설치해야하는 경우에는 여러 대의 컴퓨터에서 자체 호스팅 서비스가 필요합니다. 따라서 app.config를 변경하고 서비스를 다시 시작해야합니다.
  • 모든 서비스는 새로운 로깅 구성 (예 :)을 가져와야하며, App.config의 업데이트 섹션을 말하고 다시 시작해야합니다.

물론 이것은 powershell을 사용하여 자동화 할 수 있지만 확실히 그 도구입니다. 일부 기업에서는이를 위해 구성 관리 시스템을 사용합니다. 소금 , 책임감있는 , 요리사 또는 인형 ,하지만 그들은 이러한 종류의 작업에 적합합니다.

나는 또한 지금 자바 솔루션에 대해서 봄 구름 설정 ,하지만 .NET과 같은 것을 발견하지 못했습니다.



답변

설명하는 작업은 여러 가지 방법으로 해결할 수 있습니다. 각자의 장단점이 있기 때문에 “최선”은 없습니다.

업계 전체가 스크립트에서 구성 관리, 변경 불가능한 시스템으로 발전해 왔습니다.

예를 들어 IIS 웹 서버의 web.config를 관리하려면 appcmd.exe 명령을 실행합니다. Chef와 IIS cookbook을 사용하여 appcmd.exe 명령 멱등 원 자원을 추상화합니다.

  iis_config "session sql_provider" do
    cfg_cmd "Foobar/#{site} -section:system.web/sessionState /+\"providers.[name='#{session_name}',connectionString='#{session_connection_string}',type='#{session_type}']\""
    action :set
      notifies :restart, 'iis_site[mysite]'
  end

여기서 ‘# {}’안의 모든 것은 요리사 변수입니다. 리소스가 실행되면 IIS 서비스가 다시 시작됩니다.

appcmd.exe를 직접 사용하지 않고 리소스로 추상화하는 이점은 리소스가 변수를 매개 변수로 쉽게 사용할 수 있다는 것입니다. 이렇게하면 코드를 한 번 작성하고 여러 데이터 센터 및 환경에서 사용할 수 있습니다. 최종 목표는 모든 유형의 서버에 대한 정책을 작성하고 구성 관리가 서버를 정책에 맞추도록하는 것입니다.

셰프 내부에서 로깅 설정 파일을 관리하는 또 다른 예입니다.

template "#{node['web']['path']}/log4net.config.xml" do
  source 'wwwroot/log4net.config.erb'
  variables(
    :log_level => node['web']['log4net']['log_level']
  )
  action :create
end

xml 파일은 erb 템플릿으로 “템플리트 화”됩니다. & lt; % = – % & gt; 변수이다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <root>
      <level value="<%= @log_level -%>"/>

그런 다음 일정에 따라 요리사를 돌릴 수 있으므로 변수가 변경 될 수 있습니다. config 관리는 파일을 원하는 상태로 만듭니다.

Ansible, Chef, Puppet 및 Salt는 모두 매우 유사한 원리로 작동합니다.


답변