一分鐘搞定!CentOS 7.9上用Ansible自動(dòng)化部署SQL Server 2019
一分鐘搞定!CentOS 7.9上用Ansible自動(dòng)化部署SQL Server 2019
不熟悉整個(gè)流程的朋友可以先看之前的部署文章,手動(dòng)部署一遍
一步步教你在CentOS 7.9上安裝SQL Server 2019
前言
這套Ansible腳本屬于紅帽官方出品,是一套mssql的自動(dòng)化運(yùn)維腳本,能夠?qū)崿F(xiàn)mssql的單實(shí)例部署和AlwaysOn集群的部署,它會(huì)自動(dòng)判斷當(dāng)前操作系統(tǒng)的類型和版本,查找適合當(dāng)前Linux系統(tǒng)安裝的SQL Server版本, 然后更新相應(yīng)的yum倉(cāng)庫(kù),自動(dòng)下載SQL Server安裝包然后安裝。
linux-system-roles腳本支持SQL Server 2017到SQL Server 2022。
因?yàn)檫@次部署的操作系統(tǒng)版本是CentOS7.9,所以只能安裝的SQL Server最高版本是 SQL Server 2019,Ansible會(huì)自動(dòng)安裝好SQL Server 2019。
使用Ansible 2.9版本安裝SQL Server
- 0、查看當(dāng)前的操作系統(tǒng)版本
可以看到當(dāng)前版本是CentOS 7.9
[root@2_mssql_68 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
- 1、確保控制機(jī)已經(jīng)安裝好Ansible
Ansible版本是2.9,Python版本是2.7.5,即使是舊機(jī)器,這套ansible腳本也可以使用!
[root@2_mssqll_68 ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
- 2、創(chuàng)建主機(jī)文件inventory,因?yàn)樵诒緳C(jī)安裝,直接使用local
echo "[sqlgroup]" > myhosts
echo localhost ansible_connection=local >> myhosts
[root@2_mssqll_68 ~]# cat myhosts
[sqlgroup]
localhost ansible_connection=local
- 3、 測(cè)試被控機(jī)器的連通性
[root@2_mssqll_68 ~]# ansible all -i myhosts -m ping
localhost | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
- 4、安裝ansible角色
需要安裝紅帽官方的rhel-system-roles 角色
yum install -y ansible-collection-microsoft-sql rhel-system-roles
- 5、編輯playbook文件mssql.yml
需要修改mssql.yml文件里的mssql_password和mssql_edition參數(shù),實(shí)際上,還有其他的參數(shù),參數(shù)比較多,文末會(huì)放出各個(gè)參數(shù)含義的文檔,如果沒(méi)有開(kāi)啟防火墻服務(wù),那么需要去掉防火墻的那個(gè)play
mssql_edition的值有:Enterprise、Standard、Web、Developer、Express、Evaluation,或一個(gè)格式為 #####-#####-#####-#####-##### 的數(shù)據(jù)庫(kù)產(chǎn)品密鑰,其中 # 是數(shù)字或字母。如果要指定版本,可以使用參數(shù)mssql_version: 2019
vi mssql.yml
---
- hosts: localhost
vars:
mssql_accept_microsoft_odbc_driver_17_for_sql_server_eula: true
mssql_accept_microsoft_cli_utilities_for_sql_server_eula: true
mssql_accept_microsoft_sql_server_standard_eula: true
mssql_password: 'RedH@123!'
mssql_edition: 'Developer'
mssql_enable_sql_agent: true
mssql_install_fts: false
mssql_install_powershell: true
mssql_tune_for_fua_storage: true
mssql_datadir: "/data/mssql/1433/database"
mssql_logdir: "/data/mssql/1433/database"
roles:
- microsoft.sql.server
- hosts: localhost
tasks:
- firewalld:
service: mssql
permanent: yes
immediate: yes
state: enabled
- 6、運(yùn)行Playbook文件
在當(dāng)前路徑下執(zhí)行,大概運(yùn)行1分鐘就安裝完成,大概有30個(gè)任務(wù)tasks
[root@2_mssqll_68 ~]# ansible-playbook -vvv -i myhosts mssql.yml
TASK [microsoft.sql.server : Configure the forceencryption setting] ******************************
task path: /usr/share/ansible/collections/ansible_collections/microsoft/sql/roles/server/tasks/main.yml:472
skipping: [localhost] => {
"changed": false,
"skip_reason": "Conditional result was False"
}
META: ran handlers
META: ran handlers
PLAY RECAP ***************************************************************************************
localhost : ok=30 changed=0 unreachable=0 failed=0 skipped=41 rescued=0 ignored=0
- 7、查看SQL Server服務(wù)是否在運(yùn)行
看到Active: active (running) 字樣就表示SQL Server服務(wù)已經(jīng)啟動(dòng),安裝成功
[root@2_mssqll_68 ~]# systemctl status mssql-server.service --no-pager
● mssql-server.service - Microsoft SQL Server Database Engine
Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2025-02-09 11:36:06 CST; 4s ago
Docs: https://docs.microsoft.com/en-us/sql/linux
Main PID: 999 (sqlservr)
CGroup: /system.slice/mssql-server.service
└─999 /opt/mssql/bin/sqlservr
Feb 09 11:36:06 2_mysql_68 systemd[1]: Started Microsoft SQL Server Database Engine.
- 8、連接數(shù)據(jù)庫(kù)并查看當(dāng)前數(shù)據(jù)庫(kù)版本
Ansible自動(dòng)識(shí)別到當(dāng)前操作系統(tǒng)版本是centos7.X,然后安裝適配當(dāng)前系統(tǒng)版本的最高SQL Server版本SQL Server 2019
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "RedH@123!" -Q "SELECT @@VERSION"
- 9、查看SQL Server實(shí)例的數(shù)據(jù)目錄結(jié)構(gòu)
- 系統(tǒng)庫(kù)和tempdb數(shù)據(jù)庫(kù)都放在同一個(gè)目錄下,如果是生產(chǎn)環(huán)境需要注意分開(kāi),/var/opt/mssql/secrets目錄是用來(lái)存放證書文件,特別是在搭建AlwaysOn集群的時(shí)候
[root@2_mssqll_68 ~]# tree /var/opt/mssql/
/var/opt/mssql/
├── data
│ ├── Entropy.bin
│ ├── master.mdf
│ ├── mastlog.ldf
│ ├── modellog.ldf
│ ├── model.mdf
│ ├── model_msdbdata.mdf
│ ├── model_msdblog.ldf
│ ├── model_replicatedmaster.ldf
│ ├── model_replicatedmaster.mdf
│ ├── msdbdata.mdf
│ ├── msdblog.ldf
│ ├── tempdb2.ndf
│ ├── tempdb3.ndf
│ ├── tempdb4.ndf
│ ├── tempdb.mdf
│ └── templog.ldf
├── log
│ ├── errorlog
│ ├── errorlog.1
│ ├── errorlog.2
│ ├── errorlog.3
│ ├── errorlog.4
│ ├── HkEngineEventFile_0_133835034943490000.xel
│ ├── HkEngineEventFile_0_133835034997660000.xel
│ ├── HkEngineEventFile_0_133835048280420000.xel
│ ├── HkEngineEventFile_0_133835457796360000.xel
│ ├── log_1.trc
│ ├── log_2.trc
│ ├── log_3.trc
│ ├── log.trc
│ ├── mssql-conf
│ │ └── mssql-conf.log
│ ├── sqlagent.1
│ ├── sqlagent.out
│ ├── sqlagentstartup.log
│ ├── system_health_0_133835034957910000.xel
│ ├── system_health_0_133835035001390000.xel
│ ├── system_health_0_133835048284420000.xel
│ └── system_health_0_133835457809610000.xel
├── mssql.conf
└── secrets
└── machine-key
4 directories, 39 files
Playbook腳本中用到的參數(shù)解釋和Playbook腳本源代碼地址
需要解釋的是,這套腳本可以完成mssql的單實(shí)例安裝和AlwaysOn集群的部署,可以說(shuō)紅帽官方真的非常貼心!編寫好Playbook腳本五分鐘就可以部署好3個(gè)節(jié)點(diǎn)的AlwaysOn集群!
第一個(gè)網(wǎng)址有AlwaysOn搭建示例參考
-
https://github.com/linux-system-roles/mssql
-
https://github.com/redhat-cop/sqlserver-coi/tree/master/ansible
-

本文版權(quán)歸作者所有,未經(jīng)作者同意不得轉(zhuǎn)載。
浙公網(wǎng)安備 33010602011771號(hào)