LinuxのビルドにSQLServerの高可用性クラスタ

 

まず、環境を準備

1つのデプロイメント環境:

サーバーの数:3セット

IPアドレス:192.168.1.191(メイン)

         192.168.1.192(から)

         192.168.1.193(から)

オペレーティングシステム:CentOSのLinuxリリース1810年7月6日(コア)

Cpu:2核

メモリ:4G

20ギガバイトのストレージ

2展開前の準備:

ファイアウォールオフ2.1ターン

バッシュ(すべて):

iptablesの-F

systemctlストップfirewalld

systemctl無効にfirewalld

2.2 hostsファイルを変更します

バッシュ(すべて):

vimの/ etc / hostsファイル

192.168.1.191 m191

192.168.1.192 M192

192.168.1.193 m193

 

2.3ホスト名を変更します

バッシュ(すべて):

ホスト名m191

ホスト名m191

ホスト名m191

2.4アップデートホスト名

バッシュ(すべて):

bashの

第二に、SQL Serverをインストールします

1 MSSQLサーバーをインストールします。

1.1ダウンロードMicrosoft SQL Serverの2019年のRed Hatリポジトリ設定ファイル:

須藤カール-o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo

1.2 SQL Serverをインストールするには、次のコマンドを実行します。

sudoのyumを-y MSSQLサーバーをインストールします

パッケージのインストールが完了すると、MSSQL-confの設定コマンドを実行し、SAのパスワードを設定し、(私は6を選んだ)のバージョンを選択するように表示される指示に従います。

sudoのは/ opt / MSSQL / binに/ MSSQL-confに設定

SAアカウント(大文字と小文字を含む少なくとも8つの文字、小数点以下の数字および/または英数字以外の記号)のための強力なパスワードを指定してください。

 

設定が完了した後1.3、サービスが実行されていることを確認します。

systemctlステータスMSSQLサーバ

 

1.4はRHEL上のファイアウォール上のリモート接続、オープンSQL Serverのポートを許可するには。 

デフォルトのSQL ServerポートTCP 1433。あなたがFirewallDファイアウォールを使用する場合は、次のコマンドを使用することができます。

sudoのファイアウォール-CMD --zone =公共--add-ポート= 1433 / tcpの--permanent

sudoのファイアウォール-CMD --reload

この場合、SQL Serverの2019 RHELは、お使いのコンピュータ上で実行し、使用する準備ができて!

1.5を起動し、SQL Serverエージェント(デフォルトではインストールされ、個別にインストールすることはできません)

 

yumをMSSQLサーバー・エージェントをインストールします

/ opt / MSSQL / binに/ MSSQL-confのセットが真sqlagent.enabled

 

 

2 SQL Serverのコマンドラインツールをインストールします。

データベースを作成するには、SQL Server上で接続することのTransact-SQLステートメントを実行するためのツールを使用する必要があります。:SQL Serverのコマンドラインツールをインストールするには、次の手順  のsqlcmdBCPを

2.1 MicrosoftダウンロードRed Hatのリポジトリ設定ファイル。

須藤カール-o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo

2.2以前のバージョンのMSSQLツールがインストールされている場合は、任意の古いunixODBCのパッケージを削除してください。

sudoのyumはunixODBCの-UTF16のunixODBC-UTF16-develのを削除

2.3 MSSQL-ツールと開発者のunixODBCパッケージをインストールするには、次のコマンドを実行します。

yumをsudoの-y MSSQL-ツールのunixODBC-develのインストール

 

2.4は/ opt / MSSQL-ツール/ binに/ PATH環境変数に。 

ですから、ツールを実行するときにフルパスを指定することができません。PATHのログインセッションとインタラクティブ/非ログインセッションを変更するには、以下のコマンドを実行します。

エコーの輸出PATH = "$ PATH:/ OPT / MSSQL-ツール/ binに" ">>〜/ .bash_profileの

エコーの輸出PATH = "$ PATH:/ OPT / MSSQL-ツール/ binに" ">>〜/ .bashrcに

ソース〜/ .bashrcに

 

3ローカル接続

3.1次の手順では、新しいSQL Serverインスタンスへのsqlcmdのローカル接続を使用します。

SQL Serverの名前(-S)、ユーザ名(-U)とパスワード(-P)を使用して、引数の実行sqlcmdの。このチュートリアルでは、ローカルに接続しているユーザーは、サーバー名はlocalhost。ユーザー名SAは、パスワードは、インストールプロセス中にSAアカウントのために提供されたパスワードです。

bashのコピー

sqlcmdの-S localhostの-U SA -P '<あなたのパスワード>'

 プロンプト

あなたは、パスワードプロンプトを受信するためには、コマンドラインでパスワードを省略することができます。

 プロンプト

後でリモートで接続することを決定した場合、コンピュータ名またはIPアドレスの-Sパラメータを指定して、ファイアウォールのポート1433がオンになっていることを確認してください。

成功した場合、それはプロンプトsqlcmdのコマンドを表示する必要があります:1>。

接続が失敗した場合、最初のエラーメッセージに応じて、問題を診断してみてください。

 

データを作成し、クエリする3.2

次のセクションでは、徐々に新しいデータベースを作成しますSQLCMDを使用してデータを追加し、簡単なクエリを実行する方法について説明します。

3.2.1新規データベース

次の手順は、のTestDBと名前の新しいデータベースを作成します。

プロンプトのsqlcmdコマンドで、テスト・データベースを作成するには、次のTransact-SQLコマンドを貼り付けます。

SQLレプリケーション

DATABASE TestDBとのCREATE

次の行で、サーバー上のすべてのデータベースの名前を返すようにクエリを記述します。

SQLレプリケーション

sys.Databasesから名前を選択

最初の二つの注文はすぐに実行されていません。あなたは前のコマンドラインを実行するための新しいGOを入力する必要があります。

SQLレプリケーション

GO

3.3.2データの挿入

次に、二つの新しい行を挿入し、その後、新しいテーブルインベントリを作成します。

sqlcmdのコマンドプロンプトで、新しいデータベースTestDBとへのコンテキストスイッチ:

SQLレプリケーション

使用TestDBと

インベントリという名前の新しいテーブルを作成します。

SQLレプリケーション

表インベントリ(IDのINT、名前NVARCHAR(50)、数量INT)を作成

新しいテーブルにデータを挿入します。

SQLレプリケーション

INSERT INTOインベントリVALUES(1、 'バナナ'、150); INSERT INTOインベントリVALUES(2、 'オレンジ'、154);

上述のタイプのGOコマンドを実行するには:

SQLレプリケーション

GO

3.2.3データの選択

さて、Inventoryテーブルからデータを返すために、クエリを実行します。

152を超えるのテーブルインベントリ内の行の数を返すために、クエリを入力することにより、SQLCMDコマンドプロンプト:

SQLレプリケーション

インベントリからSELECT * WHERE量> 152。

コマンドを実行します。

SQLレプリケーション

GO

sqlcmdのコマンドプロンプトを終了

sqlcmdのセッションを終了するには、タイプがQUIT:

SQLレプリケーション

終了する

 

三、SQL Server構成証明と権限

SQL Serverの版本:Microsoft SQL Serverの2019(CTP2.4) - 15.0.1400.75(X64)2019年3月16日のLinux(CentOSのLinuxの7(Coreで午前11時53分26秒著作権(C)2019 Microsoft Corporationのエンタープライズエディション(64ビット) ))<X64>

1つの常にオン可用性グループ機能を有効に

バッシュ(すべて):

sudoのは/ opt / MSSQL / binに/ MSSQL-confのセットは1をhadr.hadrenabled

sudoのsystemctl再起動MSSQLサーバー

 

 

 

1.1すべてのサーバー:SQL ServerのAlwaysOnのAGのLinuxリソースエージェントをインストールするには

クラスタリソースエージェントMSSQLサーバ-haのSQL Serverとペースメーカーの間のインタフェースであります
バッシュ(すべて)
yumを-y MSSQLサーバ-HAをインストール 

yumの情報MSSQLサーバ-HA

 

2 AlwaysOn_healthイベントセッションを有効にします

SQL(すべて):

ALTER EVENT SESSION AlwaysOn_health上のサーバと(STARTUP_STATE = ON)。

GO

 

3すべてのノード上のライブラリミラーリングエンドポイント(エンドポイント)のユーザーを作成します。

(Linuxの必要性に注意し、強力なパスワードの使用をエンドポイントに専用されているユーザーのdbm_user、用dbm_loginとユーザー名(ユーザー)のログイン名(ログイン)を作成します)

SQL(すべて):

LOGIN dbm_login WITH PASSWORD = '1111.aaa' を作成します。

LOGINのdbm_loginためのユーザーdbm_userを作成します。

 

4マスターノードに証明書を作成します

SQL(メイン):

PASSWORD =「1111.aaa BY」マスターキーの暗号化を作成します。

=「DBM」SUBJECTを持つ証明書のdbm_certificateを作成します。

BACKUP CERTIFICATE dbm_certificate

   FILE = '/var/opt/mssql/data/dbm_certificate.cer' に

   WITH PRIVATE KEY(

           FILE = '/var/opt/mssql/data/dbm_certificate.pvk'

           PASSWORD = '1111.aaa' による暗号化

       );

 

この場合は4.1、メインのディレクトリに上記のデータは、2つのファイルが生成されます。

バッシュ(メイン):

dbm_certificate.cer ##証明書

dbm_certificate.pvk ##プライベート

 

 

 

4.2サーバーからすべて同じディレクトリに続いてこれらの2つのファイル

バッシュ(メイン):

CDの/ var / opt / MSSQL /データ/

SCP dbm_certificate。* 192.168.1.192:/var/opt/mssql/data/

SCP dbm_certificate。* 192.168.1.193:/var/opt/mssql/data/

 

 

 

 

4.3ペア認証用のサーバからの証明書

バッシュ(から)。

CDの/ var / opt / MSSQL /データ/

chownコマンドmssql.mssql dbm_certificate。*

 

 

5セカンダリノード上の証明書を作成します。

SQL(から):

PASSWORD =「1111.aaa BY」マスターキーの暗号化を作成します。

CERTIFICATE dbm_certificateのCREATE

    AUTHORIZATIONのdbm_user

    FILE = '/var/opt/mssql/data/dbm_certificate.cer' から

    WITH PRIVATE KEY(

    FILE = '/var/opt/mssql/data/dbm_certificate.pvk'

    PASSWORD = '1111.aaa' でDECRYPTION

            );

 

6データベースミラーリングエンドポイントを作成します。

SQL(すべて);

CREATE ENDPOINT [Hadr_endpoint]

    AS TCP(LISTENER_PORT = 5022)

    (DATABASE_MIRRORING FOR

        ROLE = ALL、

        AUTHENTICATION =証明書dbm_certificate、

        ENCRYPTION = REQUIREDアルゴリズムAES

        );

ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED。

GRANT CONNECT ON ENDPOINT :: [Hadr_endpoint] TO [dbm_login]。

 

ポート5022に対応するポートが有効になっているかどうかを確認するには、上記とオープン(すべて)で、完成した後、

 

 

 

sudoのファイアウォール-CMD --zone =公共--add-ポート= 5022 / tcpの--permanent

sudoのファイアウォール-CMD --reload

 

 

マスターノードAGに作成7

7.1のSQLServerへのホスト名を確認してください

SQL(すべて);

@@ SERVERNAMEを選択します。

右の単語が表示されます。

 

 

 

誤っは、次に順に変更すること。

8.1.1 Sys.SysServersから選択*; //システム名をすべて表示します

8.1.2 sp_dropserverを 'localhost' の删除//サーバー名localhost

8.1.3 sp_addserverの 'M192'、 'LOCAL' //ホスト名M190を変更し、

設定が完了したら有効にするにSQLServerのサービスを再起動してください。

 

 

 

7.2プライマリノード上のAGを作成します

SQL(メイン):

可用性グループをCREATE [AG1]

     (DB_FAILOVER = ON、CLUSTER_TYPE = EXTERNAL)WITH

     REPLICA ON FOR

         N'm191 "

          WITH (

             ENDPOINT_URL = N'tcp://m192:5022',

             AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

             FAILOVER_MODE = EXTERNAL,

             SEEDING_MODE = AUTOMATIC,

              SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)

             ),

         N'm192'

          WITH (

             ENDPOINT_URL = N'tcp://m192:5022',

             AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

             FAILOVER_MODE = EXTERNAL,

             SEEDING_MODE = AUTOMATIC,

              SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)

             ),

N'm193'

          WITH (

             ENDPOINT_URL = N'tcp://m193:5022',

             AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

             FAILOVER_MODE = EXTERNAL,

             SEEDING_MODE = AUTOMATIC,

              SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)

             );

 

ALTER AVAILABILITY GROUP [AG1] GRANT CREATE ANY DATABASE;

 

7.3 将从节点添加进去

Sql(从):

 

ALTER AVAILABILITY GROUP [AG1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);        

ALTER AVAILABILITY GROUP [AG1] GRANT CREATE ANY DATABASE

 

7.4 测试创建数据库db1

Sql(主):

CREATE DATABASE [db1];

ALTER DATABASE [db1] SET RECOVERY FULL;

BACKUP DATABASE [db1]

   TO DISK = N'/var/opt/mssql/data/db1.bak';

ALTER AVAILABILITY GROUP [AG1] ADD DATABASE [db1];

 

 

7.5 在从节点上面再次点击db1,发现可以点开

 

 

 

 

 

至此AG配置已经完成,但是塔仅同步并不能shi先真正的高可用,还需要进行故障转移,毕竟在企业中你不可能只管理一个数据库,下章《配置集群管理器Pacemaker》,是主推的高可用技术,AlwaysON当然也要提供一定的功能来实现这种“透明”切换,它提供了虚拟IP(vip)的感念。

7.6 AG操作

删除可用性组

DROP AVAILABILITY GROUP group_name

 

四、配置集群管理器Pacemaker

1 安装必备工具包

Red Hat Enterprise Linux (RHEL)

Bash(all)

  1. 使用以下语法注册服务器。 系统会提示输入有效的用户名和密码。

  sudo subscription-manager register

 

  列出可用的注册池。

  sudo subscription-manager list –available

 

  运行以下命令,将 RHEL 高可用性与订阅相关联

  sudo subscription-manager attach --pool=<PoolID>

其中,“PoolId”是上一步中高可用性订阅的池 ID 。

 

  使存储库能够使用高可用性加载项。

sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms

 

Bash(all):

yum install pacemaker pcs resource-agents corosync fence-agents-all -y

2 对所有节点配置公共密码

Bash(all):

passwd hacluster  (这里密码一定要设置成一样的,我这设置的是123456.com)

 

3 启动相应服务

Bash(all):

sudo systemctl enable pcsd

sudo systemctl start pcsd

sudo systemctl enable pacemaker

 

 

 

3.1在所有群集节点上,打开 Pacemaker 防火墙端口。 若要使用 firewalld 打开这些端口,请运行以下命令:

firewall-cmd --add-service=high-availability --zone=public --permanent

firewall-cmd --zone=public --add-port=2224/tcp --permanent

firewall-cmd --zone=public --add-port=3121/tcp –permanent

firewall-cmd --zone=public --add-port=5405/udp --permanent 

firewall-cmd --reload

4 创建集群

为防止集群中的异常文件残留,需要先删除已经存在的集群。

Bash(all):

sudo pcs cluster destroy

sudo systemctl enable pacemaker

创建对应的集群,此处需要一个节点(一般在主节点)运行

Bash(主):

sudo pcs cluster auth m191 m192 m193 -u hacluster -p 123456.com

sudo pcs cluster setup --name AG1 m191 m192 m193 

 

 

 

 

chown -R hacluster.haclient /var/log/cluster

pcs cluster start --all
pcs cluster enable –all

 

4.1查看当前集群状态:

pcs cluster status

 

 

4.2检查pacemaker服务:

ps aux | grep pacemaker

 

4.3检验Corosync的安装及当前corosync状态:

corosync-cfgtool -s

corosync-cmapctl | grep members

pcs status corosync

 

 

4.4检查配置是否正确(假若没有输出任何则配置正确):

crm_verify -L -V

 

4.5禁用STONITH(all):

pcs property set stonith-enabled=false

 

4.6无法仲裁时候,选择忽略(all):

pcs property set no-quorum-policy=ignore

 

 

 

5 所有节点隔离(STONITH)资源

隔离的目的是确保在配置资源过程中引起服务中断时,不会发生数据损坏,为了测试环境相对简单,需要禁用隔离,在实际环境中需要与管理员和设备供应商讨论是否需要启用。

Bash(all):

sudo pcs property set stonith-enabled=false

 

 

6 在所有节点安装资源包

Bash(all):

yum install mssql-server-ha –y

sudo systemctl restart mssql-server

 

7 设置群集属性群集重新检查间隔(可不配置)

cluster-recheck-interval 指示检查群集资源参数、 约束或其他群集选项中的更改的轮询间隔。 如果副本出现故障,群集将尝试重新启动的时间间隔,由绑定的副本failure-timeout值和cluster-recheck-interval值。 例如,如果failure-timeout设置为 60 秒和cluster-recheck-interval设置为 120 秒,在重新启动尝试的时间间隔大于 60 秒,但不超过 120 秒。 我们建议将故障超时设置为 60 秒和群集重新检查的间隔超过 60 秒的值。 不建议将群集重新检查间隔设置为较小的值。

若要将属性值更新为2 minutes运行:

sudo pcs property set cluster-recheck-interval=2min

 

(包括 RHEL 7.3 和 7.4) 的所有使用最新可用 Pacemaker 包 1.1.18-11.el7 分布引入开始失败-是的致命群集设置的行为更改其值为 false。 此更改会影响故障转移工作流。 如果主副本发生服务中断,群集应故障转移到其中一个可用的辅助副本。 相反,用户会注意到该群集会一直尝试启动失败的主副本。 如果该主永远不会处于联机状态 (由于的永久中断),群集永远不会故障转移到另一个可用的辅助副本。 由于此更改,以前推荐的配置来设置开始失败-是的致命将不再有效,需要恢复回其默认值设置true。 此外,需要更新,以包含 AG 资源failover-timeout属性。

若要将属性值更新为true运行:

sudo pcs property set start-failure-is-fatal=true

若要更新ag_cluster资源属性failure-timeout到60s运行:

pcs resource update AG1 meta failure-timeout=60s

8.1 在所有节点上创建基于Pacemaker的使用账户

Sql(all):

USE [master]

GO

CREATE LOGIN [pacemakerLogin] with PASSWORD= N'1111.aaa';

 

ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin]

 

 

9 所有节点保存登陆信息

Bash(all):

sudo echo 'pacemakerLogin' >> ~/pacemaker-passwd

sudo echo '1111.aaa' >> ~/pacemaker-passwd

sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd

sudo chown root:root /var/opt/mssql/secrets/passwd

sudo chmod 400 /var/opt/mssql/secrets/passwd [ge1] 

 

10 搭建主节点配置AG,创建虚拟IP

搭建好集群之后,就可以创建虚拟Ip,这里选用192.168.1.220为VIP

Bash(主)

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=AG1 meta failure-timeout=60s master notify=true

 

sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=192.168.1.220

执行完之后查看是否绑定成功

ip  addr show

 

 

 

 

11 设置主节点(或副本)执行集群依赖关系和启动顺序

11.1目的在于当集群拥有两个以上的节点,且发生故障转移时,应选择哪一节点作为新的主节点。

11.1.1用户问题pcs resource move到可用性组主副本从节点 1 到节点 2。

11.1.2节点 1 上虚拟 IP 资源停止。

11.1.3节点 2 上虚拟 IP 资源启动。

 

此时,IP 地址暂时指向节点 2,同时节点 2 仍为故障转移前的次要副本。

11.1.4节点 1 上的可用性组主要副本降级为次要副本。

11.1.5节点 2 上的可用性组次要副本升级为主要副本。

Bash(主)

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master

 

sudo pcs constraint order promote ag_cluster-master then start virtualip

 

 

 

11.2  查看集群状态

sudo pcs status

 

 

 

12 访问VIP

这次使用vip访问sqlserver服务器,一般情况下,1433端口可以不加(sa,密码123456.com)

如下图我们顺利完成了搭建,在无故障的情况下,当前DB(注意我们使用vip连接,也就是可能你不知道具体的主节点在哪里)如图;

Sql(VIP):

 

 

 

 

13 首先我们要了解当前状态,使用下面语句查看AG信息

Sql(VIP):

-- group info

SELECT

    g.name as ag_name,

    rgs.primary_replica,

    rgs.primary_recovery_health_desc as recovery_health,

    rgs.synchronization_health_desc as sync_health

From sys.dm_hadr_availability_group_states as rgs

JOIN sys.availability_groups AS g

                      ON rgs.group_id = g.group_id

 

--replicas info

SELECT

         g.name as ag_name,

         r.replica_server_name,

         rs.is_local,

         rs.role_desc as role,

         rs.operational_state_desc as op_state,

         rs.connected_state_desc as connect_state,

         rs.synchronization_health_desc as sync_state,

         rs.last_connect_error_number,

         rs.last_connect_error_description

From sys.dm_hadr_availability_replica_states AS  rs

JOIN sys.availability_replicas AS r

         ON rs.replica_id = r.replica_id

JOIN sys.availability_groups AS g

         ON g.group_id = r.group_id

 

 

--DB level

SElECT

     g.name as ag_name,

     r.replica_server_name,

     DB_NAME(drs.database_id) as [database_name],

     drs.is_local,

     drs.is_primary_replica,

     synchronization_state_desc as sync_state,

     synchronization_health_desc as sync_health,

     database_state_desc as db_state

FROM sys.dm_hadr_database_replica_states AS drs

     JOIN sys.availability_replicas AS r

     ON r.replica_id = drs.replica_id

     JOIN sys.availability_groups AS g

     ON g.group_id = drs.group_id

ORDER BY g.name, drs.is_primary_replica DESC;

GO

 

 

 

 

-

14 模拟故障转移

使用命令停掉主节点的sql server服务(我们期望它能发生自动故障转移,并且希望在本例中主节点能转移到m191或m192上面,同时又保证VIP能继续使用,等待少许时间后/故障转移需要一定的时间,特别是繁忙的大型系统,可能需要数秒到几分钟/)

 

 

14.1 故障转移(手动)

Sql(主):

将m192转换为主数据库

sudo pcs resource move ag_cluster-master m192 --master

 

 

 

 

 

14.2 查看vip地址是否可以漂移到m192上

 

 

 

 

14.3 至此,集群模式搭建完成

 

 

 

 

 

 

 

 


 [ge1] Only readable by root

 

おすすめ

転載: www.cnblogs.com/guarderming/p/12082936.html