# 二重化運用サーバーへの接続

マニュアル > サーバ作成ガイド > インターフェース編 > IPLinkインターフェース > IPLinkクライアントライブラリ > IPLinkクライアントライブラリの応用 > # 二重化運用サーバーへの接続 |

概要

Serverアプリケーションを二重化運用している時に、ランニングしているServerアプリケーションへ接続を行うサンプルプログラムです。このサンプルでは、IPLinkサーバとの接続が切れた場合、他のIPLinkサーバへ接続を自動的に行う動作をします。この動作により、Serverアプリケーションの二重化運用に対応します。

IPLinkは通常接続先のIPLinkサーバーを1つしか設定できません。そのため、接続状態が切断扱いになると、動的に2つ目に登録したIPLinkサーバーへ接続を行うような作りになっています。

この機能のサンプルは、以下からご利用頂けます。

なお、サンプル及び詳細の説明は、VB.Net2010で行います。

| 本サプルではメイン機側IPアドレス：192.168.1.1、サブ機側IPアドレス：192.168.1.2としています。実際に動作などを行う際には、IPアドレスを環境に合わせて変更してください。

サーバーの設定

1.IPLinkインターフェースが有効になっている事を確認してください。また、メインとサブのIPアドレスを設定します。本サンプルでは、環境変数を使用して、IPアドレの設定を行います。変数ボタンを押して、設定画面を表示します。

2.環境変数設定画面が表示されたら、追加ボタンを押します。

3.以下のように設定を行います。
変数名：[IP]
メイン機の値：192.168.1.1
二重化を有効にするにチェック
メイン機の値：192.168.1.2

4.OKボタンを押して、ダイアログを閉じ、追加した環境変数を選択し、OKボタンを押します。

5.IPアドレス項目に環境変数が設定されていることを確認し、OKボタンでダイアログを閉じます。

6.次に二重化インターフェースの設定を行います。Redundancyインターフェースのプロパティを開き、メインとサブそれぞれのIPアドレスとポート番号の設定を行います。設定完了後、OKボタンでダイアログを閉じます。

7.サーバをメイン、サブどちらで動作させるかを設定します。本設定はメイン機及びサブ機の両方で行う必要があります。「運用」-「オプション」-「起動時設定」を開き、設定を行います。
メイン機の場合は「自機をメイン機として起動する」
サブ機の場合は「自機をサブ機として起動する」
この設定は、Serverアプリケーション再起動後から有効になるため、Serverアプリケーションを再起動します。

| 通常はメイン機側/サブ機側でIPアドレスが異なるため、それぞれの環境に合わせたIPを、インターフェースに設定する必要があります。その場合、サーバアプリケーションの設定ファイルが複数必要になり、複数の設定ファイルの管理を行う必要性が出てきます。これを避けるため、環境変数機能を使用します。この機能を使用することで、メインン機側/サブ機側どちらの環境でも1つの設定ファイルで動作できるようになります。

プラグラムの要点

プログラムの要点について説明します。

▪接続処理
Connectボタン押下時にNetworkParamプロパティの設定や、AddTagなどの初期設定を行います。AddTagには通常のタグの他に、「//Redundancy/StateMain」と「"//Redundancy/StateSub"」を行います。この2つはシステムプロパティと呼ばれるもので、Serverアプリケーションの二重化運用時のステータスを取得できるプロパティです。
システムプロパティの値を取得する場合は、一般的なタグと同様にAddTagする必要が有るため、ここの処理でAddTagを行います。

    'Connect Parameter set
    fvNetworkParam1 = txtMainParam.Text
    fvNetworkParam2 = txtSubParam.Text

    For i = 0 To fcItemCount + 1
        If i < 1 Then
            fvTagName(i) = fvTargetTag01
        Else
            fvTagName(i) = fvSystemTags(i - 1)
        End If
        fvActives(i) = True
    Next i

    AxIPLink1.AddTags(fcItemCount + 2, fvTagName, fvActives, vResults)
    AxIPLink1.NetworkParam = fvNetworkParam1
    AxIPLink1.Online = True
    AxIPLink1.CtlUpdate = True

| システムプロパティで取得できる内容は以下のとおりです。 「//Redundancy/StateMain」：メイン機の状態を表します（1：異常/2：待機中/3：運転中） 「//Redundancy/StateSub」：サブ機の状態を表します（1：異常/2：待機中/3：運転中）

▪Serverアプリケーションの二重化状態を取得
二重化システムプロパティの値をValueStateChangedイベントで取得して、テキストボックスに表示を行います。メイン機側とサブ機側両方の状態を画面上で確認できるようにします。

    '------------------------------------------
    ' Event - ValueStateChanged
    '------------------------------------------
    Private Sub AxIPLink1_ValueStateChanged(sender As Object, e As AxIPLINKLib6._DClientIPLinkEvents_ValueStateChangedEvent) Handles AxIPLink1.ValueStateChanged

        '/// Redundancy Status //////////////////////////////////////
        If fvSystemTags(0) = e.tagPath Or fvSystemTags(1) = e.tagPath Then
            '/// Redundancy Status(Main Machine Status) //////////////////////////////////////
            If fvSystemTags(0) = e.tagPath Then
                If e.value Is CStr(1) Then
                    lblMainState.Text = fvStatus(0)
                ElseIf e.value Is CStr(2) Then
                    lblMainState.Text = fvStatus(1)
                ElseIf e.value Is CStr(3) Then
                    lblMainState.Text = fvStatus(2)
                Else
                    lblMainState.Text = fvStatus(3)
                End If
            End If
            '/// Redundancy Status(Sub Machine Status) //////////////////////////////////////
            If (fvSystemTags(1) = e.tagPath) Then
                If e.value Is CStr(1) Then
                    lblSubState.Text = fvStatus(0)
                ElseIf e.value Is CStr(2) Then
                    lblSubState.Text = fvStatus(1)
                ElseIf e.value Is CStr(3) Then
                    lblSubState.Text = fvStatus(2)
                Else
                    lblSubState.Text = fvStatus(3)
                End If
            End If
        End If
    End Sube

▪Serverアプリケーションの二重化状態を取得
二重化システムプロパティの値をValueStateChangedイベントで取得して、テキストボックスに表示を行います。メイン機側とサブ機側両方の状態を画面上で確認できるようにします。

    '------------------------------------------
    ' Event - StateChanged
    '------------------------------------------
    Private Sub AxIPLink1_StateChanged(sender As Object, e As AxIPLINKLib6._DClientIPLinkEvents_StateChangedEvent) Handles AxIPLink1.StateChanged
        '/// IPLink Status ///////////////////////////////////////////
        lblIPLinkState.Text = CStr(e.state)

        '/// Redundancy Status Change ////////////////////////////////
        If e.state = True Then
            Timer1.Enabled = False
        Else
            Timer1.Interval = fcTimerInterval
            Timer1.Enabled = True
        End If
    End Sub

| 本サンプルでは接続状態に変化があった場合、タイマーを使用して、インターバルを設けて接続の切り替え処理を行っています。これは、メインとサブ両方に接続ができない場合、頻繁に切り替え処理が発生することを防ぐためです。インターバルの間隔は、変数「fvTimerInterval」で設定されており、値を変更することで、間隔を変えることができます。

動作確認

1.メイン機アプリケーション、サブ機アプリケーションの順にオンライン化した後に、メイン機アプリケーションのRedundancyインターフェースの情報を表示させ、「State」と「Line1 State」が共に「Running」になっていることを確認して下さい。また、この際、後からオンライン化した方が待機状態になるため、サブ機側は「State」が「Waiting」になります。

2.Visual Basicアプリケーションを実行し、MainとSubのStateが共にRunningになることを確認してください。合わせて、Readボタンを押すと、タグの値を取得できることを確認して下さい。

3.メイン機稼働中にサブ機がオフラインの場合、Sub StateがAbnormalになることを確認して下さい。また、サブ機稼働中にメイン機がオフラインの場合、Main StateがAbnormalになることを確認して下さい。