Этот вопрос имеет миллион ответов, и большинство из них не будет право для Вас.
Это - операционная система определенные, конкретные аппаратные средства и конкретная загрузка.
Если это решение состоит в том, чтобы быть быстро реагирующим т.е. быстрым для сокращения энергопотребления и быстрый для возвращения, необходимо посмотреть на аппаратные средства с функциональностью сна ACPI вместо закрытия. Как упомянуто выше wakeonlan будет только работать правильно, когда аппаратные средства будут в состоянии сна.
2-я часть этой проблемы является управлением. Когда поместить систему для сна и когда проснуться, она создает резервную копию снова. Не зная, как Ваш кластер управляет рабочей нагрузкой, Вы действительно не получите ответ на это.
Лично я выполняю веб-ферму, которая имеет подсистему балансировки нагрузки впереди. Трафик направлен к паре хостов вплоть до определенного уровня и затем этого циклические алгоритмы остальные. Когда те другие серверы не показывают действия в течение часа или после 18:00 часов, они помещаются в состояние сна. Когда snmp сценарии показывают, что пользовательский объем растет на подсистеме балансировки нагрузки, те хосты сна отправляются wakeonlan волшебный пакет, и кластер возвращается к полной силе. Это могло быть более мелкомодульным, но я могу действительно только экспериментировать в живом, таким образом, это было мало перемещений, в которых я уверен.
Аплодисменты M.
Я закончил тем, что использовал файл шаблона конфигурации и маленькую программу Python с помощью string.Template
средство для генерации двух различных конфигураций. Я включал его ниже.
Это заменяет значениями конфигурации в generic.tmpl.conf
(который является сайтом внутренняя конфигурация), затем делает результат доступным как ${conf}
для использования в test.tmpl.conf
и production.tmpl.conf
, которые имеют блок VirtualHost, содержащий ${conf}
, файлы журнала и другая такая определенная для хоста информация.
#!/usr/bin/python
import string
from optparse import OptionParser
# ---
parser = OptionParser()
parser.add_option("--clean", dest="clean", action="store_true", default=False,
help="Clean files instead of creating them.")
(options, args) = parser.parse_args()
if len(args) != 0:
parser.error("No non-option arguments expected.")
# ---
def readconf(name):
return string.Template(open(name).read())
def writeconf(out, outer, inner, fields):
outerfields = fields.copy()
outerfields["conf"] = inner.substitute(fields).replace("\n", "\n\t")
out.write(outer.substitute(outerfields))
out.close()
# ---
if options.clean:
os.remove("production.conf")
os.remove("test.conf")
else:
commonconf = readconf("generic.tmpl.conf")
liveconf = readconf("production.tmpl.conf")
testconf = readconf("test.tmpl.conf")
writeconf(open("production.conf", "w"), liveconf, commonconf, {
# ... configuration values redacted ...
})
writeconf(open("test.conf", "w"), testconf, commonconf, {
# ... configuration values redacted ...
})
Мой собственный ответ: То, о чем я думал, должно использовать SetEnv для хранения путей для текущей машины в переменных среды, затем Включать общий конфигурационный файл с $ {} везде существует что-то конкретная машина. Но я никогда не использовал эти средства прежде, и я не знаю, существует ли некоторый протест.
Теперь это не прямой ответ на Ваш вопрос, потому что он включает изменение установки, но избегать точно этой проблемы, я виртуализирую и свою систему тестирования и свой рабочий сервер. Я надеюсь, что это даст мне меньше стычки с конфигурацией, поскольку я выполню идентичные изображения и добавлю легкую масштабируемость или дублирование в будущем.
Возможно, у Вас есть возможность работать виртуализированный....
Необходимо также взглянуть на те два потока о конфигурациях сервера управления версиями и дублирования и перемещении установленных Linux между платформами
Это могло быть возможно просто открыть некоторые леса с помощью sym/hardlinks, изменить точки монтирования и т.д. так, чтобы тестовая среда соединила производство соответствия каналом. В зависимости от Вашей конкретной установки это могло быть довольно легко, или это могло бы быть и ужасно и сложно..
Для доступа к тестовой среде используйте, это - IP, или Вы могли добавить дополнительный ServerAlias с именем, которое указывает на Вашу тестовую среду, или Вы могли бы просто настроить то же название обеих машин и использовать Ваш локальный/etc/hosts для переключения, к какому Вы хотите получить доступ.
/etc/hosts
в особенности было бы слишком широко, так как я хочу смочь получить доступ к своему собственному живому сайту от моей персональной машины.
– Kevin Reid
23 May 2010 в 18:51
Попытайтесь использовать <Location>
вместо <Directory>
если это возможно, так, чтобы изменение DocumentRoot
покроет большинство Ваших изменений. Это - вероятно, самый легкий способ заботиться о нем.
Include
директива может также быть Вашим другом - можно засунуть ее внутри a <Directory>
или <Location>
блок для включения частей конфигурации, которая не изменится между машинами.
Это - немного больше взлома, но Вы могли также использовать DirectoryMatch
соответствовать и Вашим каталогам тестирования и производства в одном разделе.
<Location>
кажется хорошей идеей независимо, но этим won' t на самом деле помогают здесь, потому что установка тестирования http://localhost/test-site/foo
в противоположность http://live-site.example.com/foo
.
– Kevin Reid
24 May 2010 в 05:50