
Um administrador real pode dormir em paz apenas quando tudo é feito backup, monitorado e duplicado.
Ou quando ele trabalha em uma boa equipe, onde você sempre pode culpar os outros.Aconteceu que eu uso principalmente produtos da Microsoft no meu trabalho e posso dizer que a empresa leva a sério o backup de seus serviços: Active Directory, DAG do Exchange, SQL Always On, DFSR etc. Como em outros lugares, existem implementações muito elegantes e bem-sucedidas, além de obviamente inconvenientes e difíceis. Há também uma solução para o serviço de impressão, mas requer clustering baseado no Hyper-V. E eu queria uma solução simples "pronta para uso", que não requer financiamento adicional. O Windows 2012 R2 foi tomado como base, mas provavelmente o mesmo esquema funcionará sem problemas em nenhuma versão de servidor a partir do Windows 2008 e até mesmo em sistemas operacionais clientes do Vista e versões superiores (olá para os fãs que estão economizando o orçamento!). Quem se importa - peço um gato.
Isenção de responsabilidadePara respeitar o trabalho dos índios, como o público da Habr fala principalmente russo e facilita os administradores iniciantes, os exemplos usam a versão russa da interface do Windows. Os links, sempre que possível, também levam a recursos no idioma russo.
Pouco de teoria
Qualquer pessoa que não goste de teoria e queira clicar mais rapidamente com um mouse e teclado pode ir diretamente para a próxima parte.
Como mencionado acima, a
recomendação oficial hoje é uma solução usando cluster e virtualização Hyper-V. Além disso, nada impede garantir a tolerância a falhas do serviço de impressão no nível do sistema de virtualização, e não necessariamente o Hyper-V, mas essas soluções custam dinheiro.
Eu realmente queria algo semelhante ao
DHCP Failover , mas para o papel de um servidor de impressão.
Nada adequado foi encontrado na Internet em geral e no Habr
em particular - e eu mesmo tive que inventar.
A essência da ideia em um parágrafoA solução descrita abaixo é baseada no utilitário BrintBrm, que faz parte da
distribuição padrão do Windows
e veio substituir o printmig .
O servidor em espera funciona no modo de espera e sincroniza as configurações com o servidor principal com a frequência especificada usando este utilitário. Para os clientes, um CNAME com um pequeno TTL foi criado no DNS, referenciando o servidor principal. No caso de uma falha do servidor principal, o administrador corrige o CNAME alternando os clientes para o servidor de backup. Isso, de fato, é tudo.
Se o tópico for interessante e eu quiser me familiarizar com os solavancos que já estão cheios comigo e com as maneiras de contornar o rake, siga a seguir.
Antes de começar ou o que você precisa saber sobre o PrintBrm
Então, o que é esse utilitário PrintBrm, cujo principal objetivo é atender o servidor de impressão?
- Bem conservado. Possui uma implementação de GUI chamada Migração de Impressão e pode ser iniciada no snap-in Gerenciamento de Impressão . A versão da GUI é menos funcional e tem problemas com a portabilidade da porta.
- Atencioso. Por padrão, ele lida com as ACLs da impressora do servidor de impressão. Em outras palavras, se você permitiu imprimir na impressora \\ servidor de impressão \ impressora1 apenas para funcionários que são membros do grupo de Contabilidade AD, essa restrição será levada em consideração na importação / exportação. Ou não, se você colocar a tecla -NOACL . No entanto, a ACL do próprio servidor de impressão não é processada, independentemente da chave.
- Moody. No momento da importação de parâmetros de um arquivo, o servidor de destino deve ter pelo menos uma impressora compartilhada, caso contrário, você receberá um erro.
- Gentil. Perdeu vendo espaços no caminho do arquivo. À vista das aspas que enquadram esse caminho, ele fica chateado e comete um erro 0x8007007b.
- Modesto. Se o arquivo especificado já existir durante a tentativa de exportar as configurações, ele não poderá sobrescrevê-lo, é tímido perguntar e também termina com um erro.
- Misterioso. Sempre retorna um código de saída 0 . Acontece que o programa perfeito.
- Apto para pensar. Pode congelar na fase de 100% minutos por 5 e, às vezes, mais. Mas então ele pensa e termina o trabalho (a menos que, é claro, você tenha paciência para não pressionar Ctrl + C).
- Repentino e contraditório. Pode organizar essas surpresas .
- Inteligente. Pode reatribuir drivers de origem para outras pessoas. Por exemplo, usando um arquivo XML, você pode especificar que todos os drivers do HP Universal Printing PCL 5 em um arquivo salvo no servidor de destino devem ser reatribuídos ao HP Universal Printing PCL 6. Não o usei na prática, mas pode ser útil para alguém.
- Wayward. Não pude usá-lo para transferir configurações entre domínios sem confiança, mesmo com a opção -NOACL. Ou ele não pode fazer isso em princípio, ou minha mágica não é forte o suficiente.
- Você pode conhecer melhor aqui e aqui , mas para aqueles corajosos que não hesitam em perguntar diretamente, existe uma chave /?
Eu admito que alguns recursos eu imerecidamente ignorei. Talvez no Windows 10/2016 ela tenha começado a se comportar de maneira diferente. Se houver informações, compartilhe.
Preparação do ambiente
Supõe-se que você já implantou o Active Directory e conhece pelo menos três maneiras de desabilitá-lo e pelo menos duas delas foram testadas na prática.
Algumas letrasPartindo do tópico do artigo, observo que gosto do pedido e sou o fato de que toda impressora de rede e MFP possui um adesivo correspondente ao seu nome de rede. Isso simplifica o trabalho dos funcionários de TI quando eles tentam descobrir pelo usuário sobre quais impressoras
fotográficas de gato importantes relatórios analíticos importantes são impressos em tons ácidos tóxicos, em vez de delicados pistaches.
É melhor colar esses adesivos na parte inferior da impressora, para que todos fiquem mais interessados e mais divertidos.Também gosto quando cada impressora de rede é registrada na zona DNS interna. Um servidor DHCP baseado no Windows
pode fazer isso
facilmente .
Por exemplo, o nome da impressora pode estar no formato msk-prn001 ou sale-printer023, e os nomes das portas dessas impressoras no servidor de impressão são exatamente iguais. Mas essa é minha preferência pessoal, estou pronto para ouvir objeções nos comentários.
Assumiremos que todas as impressoras estão em rede e disponíveis para impressão nos servidores de impressão primário e de backup. Permita que esses servidores sejam chamados
prn-srv01 e
prn-srv02, respectivamente.
Servidores de domínio no Windows Server não inferiores a 2008 são adequados como servidores de impressão.Em princípio, os sistemas operacionais clientes começando com o Vista também são adequados, se você realmente deseja economizar algum dinheiro. O exemplo usa o Windows 2012 R2. É altamente recomendável instalar todas as atualizações necessárias do sistema operacional antes de configurar os servidores e as máquinas clientes.
Você mesmo, é claro, entende, mas o limite ainda requer atenção: se os servidores de impressão forem virtuais, eles deverão ser distribuídos para diferentes servidores físicos; caso contrário, nosso failover simplesmente se transformará em falha.
Em
prn-srv01 e
prn-srv02 , a função de servidor de impressão deve ser adicionada. É mais conveniente usar o cmdlet do PowerShell:
Install-WindowsFeature Print-Services
Além disso, um ajuste no registro deve ser aplicado nos servidores de impressão, o que corrige o
erro 0 × 00000709 quando as máquinas clientes acessam o servidor de impressão via CNAME. Você pode fazer isso com o comando do artigo no link acima:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Print /v DnsOnWire /t REG_DWORD /d 1
Após aplicar o comando, você deve reiniciar o serviço
Gerenciador de Impressão .
Eu recomendo que você aloque uma UO separada para os servidores de impressão e distribua essa configuração
usando o GPP .
Iniciamos o snap-in DNS no controlador de domínio e habilitamos a exibição estendida:
É necessário mapeamento avançado para poder definir TTL para registros criados.
No DNS, crie um registro de
impressão CNAME que faça referência a
prn-srv01 com um valor TTL de 5 minutos:
Esse nome deve ser usado pelas máquinas clientes para conectar-se ao servidor de impressão. I.e. o cliente se conectará aos endereços \\ print \ printer01, \\ print \ printer02, etc.
Quanto menor o valor TTL, mais frequentemente os clientes atualizam o registro e mais cedo “entendem” que precisam mudar para outro servidor de impressão. 5 minutos é suficiente para mim.
Ao definir o valor muito baixo, você gera tráfego DNS na sua rede
e, especificando uma ou duas horas, enfatiza sua tolerância ao estresse e nervos fortes .
Uma maneira alternativa de adicionar um registro CNAME usando o PowerShell:
Import-Module DnsServer
Add-DnsServerResourceRecordCName -Name "print" -HostNameAlias "prn-srv01.lab.net" -ZoneName "lab.net" -TimeToLive 00:05:00
(É claro que alteramos lab.net para seu contoso.local ou o que for)
Lembre-se de que, se você tiver vários sites do AD, a atualização dos registros DNS em todos os locais levará mais tempo devido à replicação entre sites. Você pode forçar o processo com o
comando repadmin / syncall .
Usando a Diretiva de Grupo, permitimos que usuários comuns instalem drivers a partir do servidor de impressão. Como fazer isso é descrito em detalhes
aqui .
Crie uma conta de serviço no AD (chamei-o de svc-printsync) com uma validade ilimitada da senha:
De acordo com os requisitos do PrintBrm, esta conta deve ter todos os direitos no servidor de impressão; portanto, a adicionamos ao
domínio admins para que tudo funcione com certeza e escrevemos a senha no campo de descrição para não esquecer o grupo local de
Administradores em
prn-srv01 e
prn-srv02 ( por exemplo, usando
o snap-
in Gerenciamento do computador ).
Configure o primeiro servidor
Se todas as impressoras necessárias na impressora principal já tiverem sido adicionadas, você poderá prosseguir imediatamente para a seção sobre configuração do segundo servidor.
Usando
o snap-in
Gerenciamento de Impressão , adicionamos drivers para as impressoras necessárias no servidor:
O assistente de instalação do driver é iniciado. É intuitivo, você pode descobrir por si mesmo. Prestarei atenção apenas ao momento com profundidade de bits.
Porque Como o Windows 2012R2 está disponível apenas na versão x64, os drivers também devem ser x64. Se os clientes com versões x86 do Windows se conectarem ao servidor de impressão, não se esqueça de marcar a caixa correspondente:
Alguns kits de drivers contêm um arquivo inf comum para os sistemas x86 e x64, enquanto outros têm uma separação.
Some more lyricsMuitos drivers vêm na forma de um instalador, mas, como esses instaladores colocam muito lixo junto com os drivers, tento seguir o princípio de "necessário e suficiente" e adiciono drivers manualmente, conforme descrito acima.
Além disso, por uma questão de consistência, eu me esforço para usar a versão Universal dos drivers ao máximo (quase todos os fornecedores normais possuem). Mas, às vezes, pode ser um problema. Assim, quando encontrei um bug em uma das versões do HP Universal Printing PCL 6, na qual um documento PDF através do EasyPrint em uma sessão RDP era impresso espelhado para a esquerda da direita para a direita.
Você também pode olhar para os
drivers v4 .
Quando todos os drivers necessários forem adicionados, lidaremos com portas e impressoras. Você pode adicioná-los manualmente a partir do mesmo snap-in, mas recomendo criar um arquivo CSV no Excel e alimentá-lo com um script do PowerShell. Obviamente, nada impede o Excel de usar qualquer outro editor de planilha ou bloco de notas em geral. O principal é que o separador e a codificação especificados no script correspondem ao separador e codificação no arquivo CSV.
Observe também que o nome do driver no arquivo CSV deve ser exatamente igual ao especificado no snap-in
Gerenciamento de impressão.
Copiar e colar para o resgate Embora eu tenha escrito acima que gosto quando todas as impressoras têm nomes de rede unificados, o exemplo (campo de
endereço da impressora ) usa um vinagrete de endereços IP e nomes, caso você
não tenha ordem na sua rede um pouco mais tarde.
Salve esta tabela no formato CSV:
clique
Nota Apesar de vírgulas serem indicadas como separadores no campo "Tipo de arquivo", o Excel fez um ponto-e-vírgula como separador. Provavelmente seja mais interessante e mais divertido. E aqui está o próprio script:
CreatePrintersFromCsv.ps1 # $InputFile = 'C:\Scripts\Printers.csv' # CSV- $Printers = (Import-Csv $InputFile -Delimiter ";" -Encoding Default) # ForEach ($Printer in $Printers) { # $PrinterName = $Printer.' ' $ShareName = $Printer.' ' $DriverName = $Printer.' ' $PrinterAddr = $Printer.' ' $Comment = $Printer.'' $Location = $Printer.'' # Add-PrinterPort -Name $PrinterAddr -PrinterHostAddress $PrinterAddr -SNMP 1 -SNMPCommunity 'public' # Add-Printer -Name $PrinterName -DriverName $DriverName -PortName $PrinterAddr -Comment $Comment -Location $Location # Set-Printer -Name $PrinterName -Shared $True -Published $False -ShareName $ShareName }
Se o caractere de tabulação for usado como um delimitador no seu CSV, no script você precisará definir
-Delimiter "` t "Observe que, se uma impressora não estiver disponível no servidor enquanto o script estiver em execução, adicioná-la ao servidor de impressão levará mais tempo (2-3 minutos em vez de alguns segundos)
O resultado do script:
Para garantir que tudo funcione nesse estágio, adicione uma impressora compartilhada a qualquer uma das máquinas clientes do servidor de impressão principal usando o CNAME criado anteriormente (por exemplo, \\ print \ printer01) e tente imprimir algo nela.
Para esse fim, a frase “Preved, sou um pedaço de papel”, digitada em negrito Arial com tamanho 200, é mais adequada para esse fim.Configure um segundo servidor
Um artista copia, um grande artista roba (Pablo Picasso)
Nosso
prn-srv02 ainda não atingiu o nível de gran artista, por isso nos limitaremos a copiar.
Embora ... seja possível com um movimento do pulso ...Criamos e compartilhamos pelo menos uma impressora, caso contrário, o PrintBrm dará um erro. Você pode fingir, mas é importante não escolher o driver ou a porta errada. Por exemplo, uma impressora com um driver Microsoft XPS Document Writer ou uma porta FILE não pode ser compartilhada.
Criamos um script de sincronização simples. Prefiro o PowerShell, mas ninguém proíbe a criação de um arquivo em lotes de tubos quentes.
PrintSync.ps1 # PrintBrm $ProgramPath = 'C:\Windows\System32\Spool\Tools\PrintBrm.exe' # $SourceServer = 'prn-srv01' $DestServer = 'prn-srv02' #, . , .. PrintBrm $ConfigFilePath = 'C:\Scripts\prn-config.printerExport' # $Arguments = "-s $SourceServer -f $ConfigFilePath -b" Start-process $ProgramPath -ArgumentList $Arguments -Wait -PassThru # $Arguments = "-s $DestServer -f $ConfigFilePath -r -o force" Start-process $ProgramPath -ArgumentList $Arguments -Wait -PassThru # Del $ConfigFilePath
Colocamos o script em um local isolado (no exemplo, é
C: \ Scripts ) e criamos uma tarefa no Agendador.
Iremos executar a partir da conta svc-printsync criada anteriormente com as permissões mais altas:
Determine a frequência de execução para si mesmo. O suficiente para mim uma vez por dia:
Na guia Ações, crie uma nova ação de inicialização do PowerShell:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Como argumentos, definimos o caminho para o script com os seguintes parâmetros:
C:\Scripts\PrintSync.ps1 -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass
Deixamos o restante dos parâmetros da tarefa nas guias
Condições e
Parâmetros por padrão.
Ao salvar a tarefa, uma senha será solicitada para a
conta svc-printsync . Você não o esqueceu? Se você já se esqueceu (o artigo é longo),
tudo foi feito em vão e a vida não teve êxito.Refina-o usando o snap-in ADUC ou de outra maneira conveniente
e especifique-o já no campo de descrição para torná-lo mais calmo .
NotaO trabalho não precisa ser executado no servidor de impressão de backup. Se você tiver um servidor separado para executar rotinas, poderá criar uma tarefa nele. Nesse caso, a conta svc-printsync deve ter o direito de efetuar login como um trabalho em lotes neste servidor. Por padrão, o grupo local Operadores de Backup tem esse direito e, se isso não for alterado em seu ambiente, inclua a conta de serviço no grupo de operadores de arquivamento do servidor no qual a tarefa será executada.
Pela primeira vez, iniciamos a tarefa manualmente e aguardamos sua conclusão.
Para o meu zoológico, onde existem cerca de 50 impressoras de tipos diferentes, ameaçadas de extinção e criadas recentemente, o procedimento de sincronização leva cerca de 10 minutos. O arquivo, ao mesmo tempo, pesa quase 1 GB.
Para acelerar o processo de importação / exportação, você pode usar a
opção -NOBIN , responsável por copiar os drivers. Faz sentido quando a frota de impressoras consiste nos mesmos modelos e os drivers necessários estão instalados em todos os servidores.
Após a conclusão, execute o snap-in
Visualizador de Eventos , vá para a seção
Logs de Aplicativos e Serviços , abra o
log Microsoft \ Microsoft \ PrintBRM \ Administrator e analise-o quanto a erros e avisos.
E se houver muitos deles, é mais provável que limpemos a revista para que nossos olhos não fiquem calosos.Me deparei com os códigos 20, 22, 80 e 81. Por exemplo,
Como está claro no texto, houve um problema ao transferir um driver específico. Examinando o log, fazemos uma lista de drivers problemáticos e os colocamos no servidor de backup com nossas mãos, ou substituí-los por outros que não são avessos a viajar. Eu só tive problemas com a HP, Kyocera e Konica Minolta, nenhum erro foi detectado para drivers de outros fabricantes (talvez porque sejam melhores ou talvez porque simplesmente não os temos).
Como resultado, você precisa obter a mesma lista de impressoras nos servidores primário e de backup e a ausência de erros e avisos nos logs.
Mudar para reserva
Sob a batida dos machados e a trituração dos garfos, barricamos a porta do escritório e desligamos o telefone. Execute o snap-in DNS e edite o registro CNAME para que ele aponte para o servidor de backup:
Depois de um tempo (o que você colocou no TTL lá?), Os
gritos ameaçadores desaparecerão, as máquinas clientes mudarão para prn-srv02
e a porta com o telefone poderá ser destrancada .
Volta
Se durante a recuperação do servidor principal no backup houve alterações na configuração que precisam ser salvas, iniciamos a sincronização na direção oposta. Para fazer isso, no script
PrintSync.ps1 acima
, trocamos os valores das variáveis
$ SourceServer e
$ DestServer . Após transferir as alterações, não se esqueça de retornar esses valores, caso contrário, todas as alterações na configuração da impressora em
prn-srv01 serão impiedosamente
varridas todas as noites pela má vontade do destino.
No snap-in DNS, defina
print para o registro CNAME como o valor do nó de destino prn-srv01 - e tudo retornará à estaca zero.
Qual é o resultado?
Aplausos tempestuosos da liderança, jogando o administrador em seus braços, aumentando o salário (para o autor do artigo - 10% honestos do aumento) ...
Bem, alguns pensamentos na direção da orientação de mais beleza.
Infelizmente, não há milagres suficientes para todos, e essa solução não é um failover completo. Se, no momento do colapso do servidor de impressão principal, houver filas de impressão não vazias nele, o conteúdo provavelmente desaparecerá no ar e alguém precisará repetir o envio para impressão.
Mas será muito conveniente para os usuários realizarem de maneira transparente a manutenção de rotina dos servidores de impressão.
Você segue as recomendações da Microsoft? Os fãs de automação podem ir além e criar um script que receba nomes de servidores com um intervalo de sincronização na entrada e faça o restante das próprias configurações: cria uma conta de serviço, se necessário, uma tarefa no agendador etc.
Os gurus do monitoramento adicionarão o monitoramento da tarefa de sincronização e os erros nos logs.
Os amantes do aprofundamento podem pensar na sincronização bidirecional, no espírito da replicação do AD, com alterações no rastreamento de tempo para cada impressora. O PrintBrm não ajudará aqui, mas ninguém cancelou o PowerShell!
A cereja no topo do bolo será a instalação automática de impressoras nas máquinas clientes usando GPP, visando o grupo AD. Adicione o usuário ao grupo - e a impressora desejada voará para ele. É verdade que essa é outra história que vai além do escopo do artigo.
Espero que alguém a minha publicação seja útil. Desejo a todos menos falhas e aguardo perguntas e sugestões nos comentários.