热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单而快速地搞定SQLServer高可用(中篇)


网管小贾的博客 www.sysadm.cc

花开两朵,各表一枝。

各位小伙伴们,大家好!

我是网管小贾。

上一篇我们说到,为了给一台跑 SQL Server
的老爷机一条后路,不得不考虑高用可的问题。

前篇链接:https://www.sysadm.cc/index.php/xitongyunwei/846-simple-and-fast-solution-to-always-on-high-availability-of-sql-server-1


由于文章篇幅较长,前一篇我们做了很多准备工作,随后只讨论到了群集的建立。

好了,现在多少有点空了,让我们进入另一个重点,SQL Server 高可用的设定。


我们在此先回顾一下各节点服务器的信息列表。

  • A89230 192.168.89.230 SQL Server 节点一(主)

  • A89231 192.168.89.231 SQL Server 节点二(辅)

  • A89219 192.168.89.219 文件共享服务器(共享见证)

  • A89220 192.168.89.220 AD 服务器(域名服务器)域名:sysadm.local

  • MSSql_Cluster 192.168.89.232 群集名称(虚拟 IP 地址)

  • MSSql_Listener 192.168.89.233 SQL Server Always On 可用性组侦听器(虚拟 IP 地址)


安装 SQL Server 2019 企业版

这里需要事先啰嗦几句话哈,如果你使用的是 SQL Server 2016
也是可以的,但一定要保证是企业版。

这一点很重要,因为标准版之类的并没有诸如可读副本等功能,实际使用起来并不能达到我们预期的效果。


什么是可读副本功能?

字面意思,就是建立的节点服务器不能拿来直接访问,而只能作为辅助备份之用。

这个好像就差点意思了是不?

最好是每个节点服务器都能提供服务。


好,将镜像加载到虚拟光驱,或是直接解压缩到磁盘根目录下,都可以执行安装。

需要注意的是,解压缩后必须保证文件夹路径尽可能简短并不包含中文,否则安装时容易出现不可描述的错误。


操作对象:主辅服务器

执行安装程序,在 SQL Server 安装中心
左侧点击 安装
,然后点击右侧 全新 SQL Server 独立安装或向现有安装添加功能


经过检测及跳过更新。

注意,不安装 Windows Update
妈妈也不会担心,跳过便是。



作为演示我们仅安装 SQL Server 复制
一项。

在实际生产环境中,你可以安装你想要的其他功能和组件。


直接使用默认实例,下一步。

还是那句话,在实际生产环境中,你按实际需求来,并且务必保证主副节点服务器上的实例相同。


服务帐户选择默认,下一步。


设定 sa
密码,并添加本地管理员 Administrator
SQL Server
管理员。


确认列表内容,开始安装。



安装 SQL Server 客户端 SSMS

操作对象:主辅服务器


SQL Server Management Studio
简称 SSMS
,是微软自家出口的 SQL Server
客户端管理工具。

SQL Server 2017
开始,服务端与客户端的安装程序就被分开了,所以客户端需要单独安装。

此外,较低版本的 SSMS
是无法访问较高版本的 SQL Server
 服务的,所以建议安装最新版本。


当前搬运最新版 SSMS 18.9.1 (651M)

下载链接:https://pan.baidu.com/s/1xJFE9O0rYfA1pyiETFHxoQ

提取码:<关注公众号,发送 000847>


SSMS 客户端安装需要 Net Framework 4.7.2
,想要速度快些,也可以先安装 .Net
后再安装 SSMS


Net Framework 4.7.2 (80M)

下载链接:https://pan.baidu.com/s/1JuMgYPpBVzPxLuvGdgdWug

提取码:<关注公众号,发送 000847>


耗时十多分钟,完成安装,就是这么简单。

还有记得重新启动服务器才能生效。


设定 SQL Server 服务的专用管理员帐户

通常有些小伙伴喜欢使用默认的管理员帐户 Administrator
来管理系统的日常操作。

然而 SQL Server
的高可用(Alwasys On
)是由多台服务器组成的,所以它们之间必须要共用一个相同密码的管理员帐户。

这就导致了一个问题,除了要保证几个节点服务器上的管理员帐户密码要一致外,还不能将这个管理员帐户挪作他用。

比如你在这儿使用了 Administrator
这个帐号,一旦你想修改密码,那么就得每个节点服务器都要改上一遍,想想也是心累啊!

当然,如果是域管理员帐户只需修改密码一次,但说来说去什么都使用这个 Administrator
终究不是最佳实践。

所以,我个人建议还是新建一个帐户专门用于实现和运行 Always On
功能。

当然了,如果你执意就是想使用 Domain\Administrator
或节点本地的 Administrator
也都是没问题的。

好,想要最佳实践,按我个人建议,我们就来另行新建一个专属管理员帐户吧。

其实在域环境下,创建一个专属管理员帐户还是挺方便的。


操作对象:主辅服务器


使用 AD 用户和计算机
管理器新建一个域用户, 我这里命名为 admin_mssql

基于高可用的实际要求,此用户属性必然是要设定为不能更改密码密码永不过期



将新建的用户加入到域管理员组内。


点击开始菜单,找到并打开 SSMS


输入服务器名称、并填写好登录名及密码,连接 SQL Server 服务。


左侧展开 安全性
,右击 登录名
后选择 新建登录名(N)...


常规
选项的登录名中,输入前面新建的域用户,比如本例的 sysadm\admin_mssql


服务器角色
选项中,勾选 sysadm


用户映射
选项中,将各个数据库勾选的后,同时选中数据库角色成员身份中的 db_owner


按确定按钮完成用户的新建。


这里需要特别补充说明一下,如果想要创建非域环境下的高可用,那么就应该在各个节点服务器上分别新建一个相同名称的管理员帐户,当然密码也要一样。

域与非域情况下,其创建管理员帐户的操作方法基本一致,区别仅仅是前者只要在AD上创建即可,而后者则需要挨个在各个节点服务器上分别创建。


设定并调整 SQL Server 服务

默认安装好的 SQL Server
服务虽然已经正常运行着,但直接拿来用会有问题,需要我们给它打扮调教一下。

操作对象:主辅服务器


点击开始菜单,找到并打开 SQL Server 2019 配置管理器


在左侧展开 SQL Server 网络配置
,点击 MSSQLSERVER 的协议

右键点击右侧的 TCP/IP
,选择属性。


TCP/IP 属性
窗口中选择 IP 地址
选项卡,并将其中实际指向本机 IP 地址的那一项启用。

这样可以确保通过本机 IP 地址能正常访问到 SQL Server
服务。


点击左侧 SQL Server 服务
,右击右侧 SQL Sever (MSSQLSERVER)
,选择 属性


将服务运行帐户修改为前面新建的域帐户和密码,比如本例 sysadm\admin_mssql


切换到 启用 Always On 可用性组
选项卡,勾选 启用 Always On 可用性组(E)


好了,SQL Server 服务设定完毕,记得一定要重启服务,否则不生效。


进入 SSMS
,右键点击服务器名称后选择属性,可以看到 是否启用 HADR
一项为 True


配置证书用于生成数据库可用性端点(非域环境)

如果情况特殊,比如我手上就这么几台服务器,只是单纯为了实现 SQL Server
高可用,而不想建立域环境,那太麻烦还得额外搭建个域控制器,其实非域环境下高可用也是可行的。

你的地盘你做主嘛,来,我们看看如何搞定非域环境情况下的高可用。


在域环境下,端点之间通讯可以根据域信息来验证身份,所以不需要额外添加证书来证明各自的身份。

而在非域环境下,端点之间的通讯就要依靠证书来验证身份了。


本例中有两个节点服务器,所以就要在各自的节点上生成证书,然后交换后再各自导入对方的证书。

生成并导入证书这一系列的操作要用到 SSMS
,所以我们先打开它,再按下面的脚本操作即可。

操作对象:主辅服务器


1、生成证书

一共四个步骤,生成主密钥、创建证书、备份证书、创建端点。

需要的注意点是,证书名称要有识别度,端点名称要统一。

USE master;

GO

-- 创建主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '12345678';

-- 创建证书,证书名称为 CERT_XXX,每个节点证书名不可相同
CREATE CERTIFICATE CERT_XXX WITH SUBJECT = 'CERT_XXX', START_DATE = '2021-01-01', EXPIRY_DATE = '2099-12-30';

-- 将证书备份到文件
BACKUP CERTIFICATE CERT_XXX TO FILE = 'C:\CERT\CERT_XXX.CER';

-- 根据证书创建端点 ag1_endpoint ,所有端点名称最好保持一致
CREATE ENDPOINT [ag1_endpoint] AUTHORIZATION [sa] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = ALL,AUTHENTICATION = CERTIFICATE CERT_XXX, ENCRYPTION = REQUIRED ALGORITHM AES)

GO


2、删除证书

如果在生成证书等一系列操作中存在失误,比如证书名称输错了想重新来过,那么就要先删除原先的证书。

当然要注意它们是有先后顺序的。

-- 删除端点
DROP ENDPOINT [ag1_endpoint]

--删除证书
DROP CERTIFICATE CERT_XXX

--删除主密钥
DROP MASTER KEY


3、载入其他节点证书

切记先将除自身以外的其他节点的证书文件复制过来,然后再使用以下脚本逐一导入。

USE master;

GO

-- 载入其它节点证书
CREATE CERTIFICATE CERT_YYY
FROM FILE = 'C:\CERT\CERT_YYY.CER';

GO


以上证书生成导入脚本下载:

下载链接:https://pan.baidu.com/s/1LmBitugDmnF8cwZ4LFgLJA

提取码:<关注公众号,发送 000847>


证书生成并成功导入后,我们在创建 Alwasy On
可用性组或添加副本节点时就可以看到相应的端点名称了。


小结

本篇我们承接了上一篇后继续具体地讨论了 SQL Server 的一些关于高可用的操作,实际上也是一些准备工作。

其中最关键的,正是运行 SQL Server
服务的帐户及其设置,这直接关乎之后高可用创建的成败。

而有一些小规模的高可用使用情况,比如非域环境下我就搞两台服务器做节点,那么证书导入也是很重要的,并且别忘记它们之间的通讯一定要有域名后缀。

好了,小伙伴们不要着急,准备工作做得如此充分,我们在下一篇文章中就可以大胆地来创建高可用功能了。

在下一篇中,重点内容除了如何创建高可用外,还包含了在整个前期和后期的安装调整过程中我踩坑的记录。

等你看完并实际动手去做了,就知道这些坑所说非虚。

OK,耐心等我写出来吧,别忘记关注三连哦!

本文博客链接:https://www.sysadm.cc/index.php/xitongyunwei/847-simple-and-fast-solution-to-always-on-high-availability-of-sql-server-2

扫码关注@网管小贾,阅读更多
网管小贾的博客 / www.sysadm.cc


推荐阅读
author-avatar
Annfeliz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有