まず、環境を準備
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のコマンドラインツールをインストールするには、次の手順 のsqlcmdとBCPを。
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)
- 使用以下语法注册服务器。 系统会提示输入有效的用户名和密码。
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