![](https://habrastorage.org/webt/e6/jf/mj/e6jfmjguitfe2_9_wzqpg_84jdk.jpeg)
免責事項
この記事は、著者の個人的な意見、世界に対する彼のビジョン、彼の道筋を表しています。これはすべて、絶対的な忠実性と客観性を主張するものではありません。 著者は、この情報を使用した結果に責任を負いません。彼は、この情報が誰かの生活を楽にするのに役立つことを望んでいます。
まえがき
最初は、サービスごとにデータベースを分散する方法について短い記事を書きたかったのですが、深化の過程で、さまざまな種類のものを追加しました(サービスの監視、1C内のユーザーの監視、zabbixのねじ込み、そして最終的にCIに到達しました) / 1Cに基づくCD)。 結局、これを1つの記事にまとめるのは多すぎることを理解しています。それをいくつかに分けることにしました。 名前は、「最小のネットワーク」という一連の記事に触発され、多くの楽しい時間を過ごし、「ネットワークを探索したい」という人たちに送られます。 さあ、行きましょう!
あなたが問題を認めると、あなたは半分知っている精神科医によってすでに治癒している(c)
この記事では、企業部門で多数の1Cを管理した経験を共有したいと思います。 ベースはすべて異なり、開発があり、テストベースがあり、すべてが他の人と同じです。 しかし、それらの多くがあります。 すべてが順調でしたが、ある時点で管理作業を実行することは非常に困難で危険でした。
どのような困難がありましたか:
- ぶら下がりベースはサービスの再起動を引っ張った、それは無実の被害者(他のデータベースのユーザー)を意味する
- 「今日のヒーロー」が誰であるかを理解することは困難でした-どの拠点がすべてのリソースを占有していましたか
- 更新リリース-更新すると、このサービスのすべてのデータベースの自動更新が行われます
- ユーザーへのベースの手動接続、移動の場合の手動変更
- モニタリング
そして今だけは、それが氷山の一角にすぎないことを理解しています...
第1幕、アクションゼロ
基本的な仮定に対するわずかな注意散漫、その実現には多くの血と痛みが与えられました。
- 1Cの以前のバージョン(最大8.3.11+)では、仮想化環境で作業するときにパフォーマンスが低下します。 (出典-Gilevおよび独自のテスト)
- クラスターがありますが、それではすべてが非常に困難です。 おそらくそれは後で完成するでしょうが、今のところは主にショーのためです。 (ソース-自身の経験)
- プロセッサを選択するときは、周波数のみを確認してください 。 3.4 GHzの6コアプロセッサは、2 GHzの20コアプロセッサをバラバラにします。 問題は、1Cが並列計算についてまったく何も知らないことです。 実際、これは次のように機能します-各サービスに一定数のワーカーがあり、それらはプロセッサに散在しています。また、ある種類のワーカーでユーザーが何らかの重いレポートを実行すると、1つのプロセッサコアのみがシステムにロードされます。 タスクが実行されている状態でワーカーが実行しているもの...データベースの場合、状況はまったく逆です。 (情報源-Gilev、自身の経験、同僚の経験)
- 「新しい」形式のログ(SQLLiteで記録)を使用しないでください。このソリューションのパフォーマンスは、ファイルバージョンよりもさらに悪いことがすぐにわかります。 (出典-自身の経験、同僚の経験)。
コメントからのプロンプトで、ログを別のインスタンスに送信するオプションがあります。
8.3.12で、彼らは通常の頬骨へのログを約束しました!!! - 1C soooooはIPv6が嫌いです。 1Cを搭載したすべてのサーバーでは、IPv6の優先順位をすぐに最低値に下げる方が適切です。 (出典-Gilev、自身の経験)
- 仮想サーバーには仮想ネットワークカードE1000を使用します。 残りにはパフォーマンスの問題があります(ソース-Gilev、ただし、特にテストされていませんが、私たちの経験では確認されていません)
- データベースのメンテナンスにより、特に合計の定期的な再計算、およびSQLインデックスのメンテナンスが可能になり、パフォーマンスが大幅に向上します(ソース-自身の経験、Gilev)
- 1C落下の原因の調査は、皮が付いていないサボテンを食べることに似ています。 痛み、屈辱、苦しみを通してのみ、本当に何かを見つけることが可能です。 (出典-自身の経験)
- ハイパーバイザーの公式イメージはありません。 私は一般的にドッカーについて沈黙しています。 (出典-1C Webサイト)
- サーバーのソフトウェアライセンスは、プロセッサのシリアル番号(および膨大な数のサーバーパラメータ)に関連付けられています。 ユビキタス仮想化の時代では、その動きは驚くべきものです。 私は説明します-彼らはサーバーを起動し、別のノードに移動し、マシンを再起動しました-1Cは起動しませんでした。 新しいアクティベーションコードを見つけます。 (ソース-自身の経験、おしゃべりなテクニカルサポート1C =))
- 1Cは会計システムであり、報告システムではありません。 大量の通常の大胆なレポートが必要な場合は、すぐに1Cを超えてください。 (出典-自身の経験)
- 1Cには2つの否定できない利点があります。そのため、長い間繁栄するでしょう。
- 製品/開発者のコスト
- 開発スピード
そして、残念ながらロシアのビジネスにとって、それらは最も重要です。 そして多くの場合、彼らが一般的に見ている唯一のもの。 (情報源-悲しい現実)
- 1C構成の保管場所としてファイルボールを使用しないでください。 サービスのみ。 そうでなければ、fall落した悪魔についての開発側のマットは、リポジトリがいつあなたの人生のコンパニオンになるかを知っています。 (出典-自身の経験、同僚の経験)
第1幕、第1幕
企業生活の最初の短いシーン
ステージ上-管理者(A)、1C(P1C)プログラマーおよびビジネス代表者(PB)
PB-実行中のプログラムが遅い!
そして-私のシステムではすべて問題ありません!
P1S-私はすべてを正しく書きました、すべてが私のコンピューターですぐに動作します!
PB(tim病で戸惑う)-しかし、彼女は長い時間がかかりました...
そして、コーラスのP1S-すべては順調です。問題はあなたの側にあります!
問題は常に間違った時間に発生する(s)(5歳の哲学者)
そして晴れた晴れた朝(実際には深い冬の夜でした)、明日は新しい基地を立ち上げる必要があることに気付きました。 明日は何千人もの著者によって何度も説明されてきたその美しい日であり、彼の名前はレギオンです! うわ、すみません、スキッドしました。 この日の名前は締め切りでした。 朝の1つ、明日、新しいデータベースが200台のコンピューターで起動するはずです。「はい、問題ありません。ドメインにすべてのコンピューターがあります。今すぐログインスクリプトを作成して、すべてが帽子になりました!」 あなたが思う。 そして、正しいこと-私たちは考えました。 そして彼らはやった。 ただ、通常起こるように、彼らは些細なことに燃え尽きました-私はログオンスクリプトに%filename%を登録しました。 コウモリと同僚が%ファイル名%を投稿しました。 cmd 。
もちろん、朝、ヘルプデスクは彼の手ですべてを実行するために走りました、そして、私はそのような愚かな失敗を非常に恥じました。 ケーキでみんなに謝罪しました。
しかし、このプロセスを自動化するという考えは頭の中でしっかりと固まっており、実装計画さえも形になり始めました。
その結果、次のイデオロギーに到達しました。
- すべてがADを介して配布されます-1cbases-%of platform version%-%database name%のグループが作成され、データベースを必要とするユーザーがhelppestの助けを借りてそこに追加されます。
- 1つのグループ-1つのベース
- 1cbasesは、グループの検索に便利なプレフィックスです
- プラットフォームバージョン81、82、83(リリースは基本的ではありません)
- データベースの名前は設定ファイルの名前に対応します
- すべてのファイルがデータベース(1つのデータベース-1つのファイル)への接続設定でレイアウトされる共通ファイル領域が選択されます
- コンピューターがブロックされると、ユーザーグループを読み取り、それに基づいてユーザーに必要な1Cベースを追加するスクリプトが呼び出されます
私たちがそれをした方法:
- グループポリシーを介して、スケジューラに新しいタスクが追加されます(スケジューラのタスクは、データベース接続ファイルへのパスをユーザーに指定することです)。
- ユーザーとして実行
- イベント-コンピューターのロック解除
- アクション-スクリプトを起動する
- ADに必要なグループを作成し、それらをユーザーで埋めます
- 1C自体を実行するために必要なファイルを作成します。 ここでもう少し詳しく説明します。 当初、私たちはリクエストでインターネットを長い間苦しめ、* .v8iファイル構造の完全な説明を見つけました。 しかし、その後、より簡単で独創的な方法が見つかりました。
- 1Cを実行
- データベースへの接続を構成する
- すべてが機能することを確認する
- データベースの名前を右クリックして、アイテムを選択-「ファイルへのリンクを保存」
# if (Test-Path "$env:HOMEDRIVE\!script_report\add_1c_bases_report.txt") { Remove-Item "$env:HOMEDRIVE\!script_report\add_1c_bases_report.txt" -Force -ErrorAction SilentlyContinue; } New-Item "$env:HOMEDRIVE\!script_report\add_1c_bases_report.txt" -ItemType file -Force -ErrorAction SilentlyContinue; Add-Content -Value (" : " + (Get-Date -Format F)) -Path "$env:HOMEDRIVE\!script_report\add_1c_bases_report.txt"; if ( (gwmi Win32_OperatingSystem | select Caption, CSDVersion) -notlike "*server*") # { Add-Content -Value " " -Path "C:\!script_report\add_1c_bases_report.txt"; if (!(Test-Path "$env:APPDATA\1C\1CEstart\ibases.v8i")) # 1 8.1 8.2 { New-Item "$env:APPDATA\1C\1CEstart\ibases.v8i" -ItemType file -Force; # Add-Content -Value " $env:APPDATA\1C\1CEstart\ibases.v8i , " -Path "C:\!script_report\add_1c_bases_report.txt"; } if (Test-Path "$env:APPDATA\1C\1CEstart\1CEStart.cfg") { Remove-Item "$env:APPDATA\1C\1CEstart\1CEStart.cfg" -Force #-ErrorAction SilentlyContinue # 8.1 } New-Item "$env:APPDATA\1C\1CEstart\1CEStart.cfg" -ItemType file -Force # 8.2 $GroupList = ([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof -replace '^CN=([^,]+).+$','$1' # foreach ($Group in $GroupList) # { if ($Group.Length -gt 6) # { If ($Group.Substring(0,7) -eq "1cbases") # 1 { Switch ($Group.Substring(8,2)) # 8.1 8.2 { "81" {Add-Content "$env:APPDATA\1C\1Cv81\ibases.v8l" -Value ("\\gold585.int\TechFiles\CommonBases\" + $Group.Substring(11) +".v8i")} # 8.1 "82" {Add-Content "$env:APPDATA\1C\1CEstart\1CEStart.cfg" -Value ("CommonInfoBases=\\gold585.int\TechFiles\CommonBases\" + $Group.Substring(11) +".v8i")} # 8.2 "83" {Add-Content "$env:APPDATA\1C\1CEstart\1CEStart.cfg" -Value ("CommonInfoBases=\\gold585.int\TechFiles\CommonBases\" + $Group.Substring(11) +".v8i")} # 8.3 } Add-Content -Value (" $Group") -Path "C:\!script_report\add_1c_bases_report.txt"; Add-Content -Value (" : CommonInfoBases=\\gold585.int\TechFiles\CommonBases\" + $Group.Substring(11) +".v8i") -Path "C:\!script_report\add_1c_bases_report.txt"; } } } } else { Add-Content -Value " " -Path "C:\!script_report\add_1c_bases_report.txt"; }
:
- — , —
- , ( — )
,
— (), 1 (1),
— 1 — $#%!!! !
1 — #$@! ! !
, , .
… () -
— , , , … , , ! — , %@!
— ?
— . % % , , . 3 . .
— !!!
— , ...
, , .
:
- — —
- - . — . , . , RBAC 1
- ( () )
- alias DNS , ip / dns ( , — , )
- 500 ( )
( . ):
- , " "
- MS , MAK-
- sqlncli — MS SQL Native Client. 2012
- C:\Windows\SysWOW64\config\systemprofile\Desktop — Word/Excel
- Windows 2016 1 8.1 dll ( C:\Program Files\Common Files\System\Ole DB sqloledb.dll sqloledb.rll )
- ODBC , MySQL/PostgreSQL
:
- 1CServer%basename% ( , )
- ( , ), ( )
@echo off chcp 1251 set base=%base_name% – set dsce=%base name% – set dscr=% % – set sver=8.3 – set fver=1cv8\8.3.9.2170 1 set port=8040 set regp=8041 set rnge=8060:8491 set name="1C:Enterprise %sver% Server Agent (x86-64) %dsce%" ( ) , set bpth=\"C:\Program Files\%fver%\bin\ragent.exe\" -srvc -agent set logs=D:\1C_Server_%base% set user="%login%@%domain_name%" 20 , , ; set view=" 1: %sver% (x86-64) %dscr%" sc create %name% binPath= "%bpth% -regport %regp% -port %port% -range %rnge% -d \"%logs%\"" type= "own" start= "auto" error= "severe" depend= "Tcpip/Dnscache/lanmanworkstation/lanmanserver" obj= %user%DisplayName= %view% : type= "own" – , start= "auto" – error= "severe" – , ErrorControl = 2 depend= "Tcpip/Dnscache/lanmanworkstation/lanmanserver" – ( , ) sc description %name% %view% , sc failure %name% reset= 0 actions= "restart/0" – , 0 ; 0 : @echo off chcp 1251 set base=%base_name% set dsce=%base name% set dscr=% % set sver=8.3 set fver=1cv8\8.3.9.2170 set port=8040 set regp=8041 set rnge=8060:8491 set name="1C:Enterprise %sver% Server Agent (x86-64) %dsce%" set bpth=\"C:\Program Files\%fver%\bin\ragent.exe\" -srvc -agent set logs=D:\1C_Server_%base% set user="%login%@domain.company" set view=" 1: %sver% (x86-64) %dscr%" sc create %name% binPath= "%bpth% -regport %regp% -port %port% -range %rnge% -d \"%logs%\"" type= "own" start= "auto" error= "severe" depend= "Tcpip/Dnscache/lanmanworkstation/lanmanserver" obj= %user% DisplayName= %view% sc description %name% %view% sc failure %name% reset= 0 actions= "restart/0"
:
- ,
- cmd chcp 1251
- ANSI
- — !!!
- , , — sc delete « name»
- 1 firewall
- —
:
- ,
- "" — ,
( ):
- MSSQL kerberos
- —
- 1 ,
- CI 1
UPD. -