前言:
SQLServer数据库的部署比较繁琐,但好在有自动化编排系统kubernetes可以帮助我们从这些繁琐的部署中解放。本文在此仅仅做一个抛砖引玉:
1,利用kubernetes集群,快速的搭建一个安全可用的SQLServer,其中SQLServer的数据库文件利用hostpath挂载到本地目录中,使得这个数据库如同运行在本地一样丝滑柔顺。
2,SQLServer服务部署完成后,使用Navicat远程连接此数据库并建立一个测试数据库。
3,深入分析并解决远程连接数据库报远程主机强迫关闭了一个现有的连接,错误代码10054的错误。
一,
secret的建立
考虑到密码还是比较敏感的,因此,将要使用secret文件保存SQLServer的密码,部署secret的文件内容如下:
base64解码,可以看到解码后的MyC0m9l&xP@ssw0rd就是密码。
[root@node3 ~]# echo "MyC0m9l&xP@ssw0rd"|base64 TXlDMG05bCZ4UEBzc3cwcmQK [root@node3 ~]# echo "TXlDMG05bCZ4UEBzc3cwcmQK"|base64 -d MyC0m9l&xP@ssw0rd
cat >sqlserver-passwd.yaml <<EOF apiVersion: v1 data: SA_PASSWORD: TXlDMG05bCZ4UEBzc3cwcmQK kind: Secret metadata: creationTimestamp: null name: mssql namespace: kube-system EOF
或者使用命令直接生成:
kubectl create secret generic mssql --from-literal=SA_PASSWORD="MyC0m9l&xP@ssw0rd" -n kube-system -oyaml
二,
部署SQLServer的文件:
此文件是静态pod的格式,仍然使用hostpath形式挂载本地volume,本地路径为 /opt/mssql/data 特别注意,如果pod启动失败很可能是此目录没有权限,此目录可以开放为777权限。此文件使用的是hostNetwork 网络模式,因此,pod的端口是直接在kubernetes节点上,端口为1433。数据库的账号为sa,密码为上面的secret定义的MyC0m9l&xP@ssw0rd
cat >sqlserver.yaml<<EOF apiVersion: v1 kind: Pod metadata: name: sqlserver labels: run: sqlserver name: sqlserver namespace: kube-system spec: containers: - env: - name: MSSQL_PID value: Developer - name: ACCEPT_EULA value: "Y" - name: SA_PASSWORD valueFrom: secretKeyRef: name: mssql key: SA_PASSWORD image: mcr.microsoft.com/mssql/server:2019-latest imagePullPolicy: IfNotPresent livenessProbe: tcpSocket: port: 1433 initialDelaySeconds: 15 periodSeconds: 5 failureThreshold: 8 resources: requests: cpu: 200m name: sqlserver volumeMounts: - mountPath: /var/opt/mssql name: mssqldb readOnly: false dnsPolicy: ClusterFirst restartPolicy: Always volumes: - name: mssqldb hostPath: path: /opt/mssql/data type: DirectoryOrCreate hostNetwork: true priorityClassName: system-cluster-critical status: {} EOF
部署成功后的样子:
[root@node3 mnt]# kubectl get po -n kube-system NAME READY STATUS RESTARTS AGE coredns-7ff77c879f-nsj95 1/1 Running 8 4d3h etcd-node3 1/1 Running 8 4d3h kube-apiserver-node3 1/1 Running 8 4d3h kube-controller-manager-node3 1/1 Running 8 4d3h kube-flannel-ds-amd64-6cdl5 1/1 Running 9 4d3h kube-proxy-vdhzr 1/1 Running 8 4d3h kube-scheduler-node3 1/1 Running 8 4d3h mysql-node3 1/1 Running 2 23h sqlserver 1/1 Running 0 57m
正确的pod的日志如下;
[root@node3 mnt]# kubectl logs -n kube-system sqlserver SQL Server 2019 will run as non-root by default. This container is running as user mssql. Your master database file is owned by mssql. To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216. 2022-11-07 11:57:42.47 Server Setup step is FORCE copying system data file 'C:\templatedata\model_replicatedmaster.mdf' to '/var/opt/mssql/data/model_replicatedmaster.mdf'. 2022-11-07 11:57:42.56 Server Setup step is FORCE copying system data file 'C:\templatedata\model_replicatedmaster.ldf' to '/var/opt/mssql/data/model_replicatedmaster.ldf'. 2022-11-07 11:57:42.57 Server Setup step is FORCE copying system data file 'C:\templatedata\model_msdbdata.mdf' to '/var/opt/mssql/data/model_msdbdata.mdf'. 2022-11-07 11:57:42.59 Server Setup step is FORCE copying system data file 'C:\templatedata\model_msdblog.ldf' to '/var/opt/mssql/data/model_msdblog.ldf'. 2022-11-07 11:57:42.72 Server Microsoft SQL Server 2019 (RTM-CU18) (KB5017593) - 15.0.4261.1 (X64) Sep 12 2022 15:07:06 Copyright (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Linux (Ubuntu 20.04.5 LTS) <X64> 2022-11-07 11:57:42.73 Server UTC adjustment: 0:00 2022-11-07 11:57:42.73 Server (c) Microsoft Corporation. 2022-11-07 11:57:42.73 Server All rights reserved. 2022-11-07 11:57:42.73 Server Server process ID is 372. 2022-11-07 11:57:42.73 Server Logging SQL Server messages in file '/var/opt/mssql/log/errorlog'. 2022-11-07 11:57:42.74 Server Registry startup parameters: -d /var/opt/mssql/data/master.mdf -l /var/opt/mssql/data/mastlog.ldf -e /var/opt/mssql/log/errorlog 2022-11-07 11:57:42.74 Server SQL Server detected 2 sockets with 2 cores per socket and 2 logical processors per socket, 4 total logical processors; using 4 logical processors based on SQL Server licensing. This is an informational message; no user action is required. 2022-11-07 11:57:42.75 Server SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required. 2022-11-07 11:57:42.75 Server Detected 3146 MB of RAM. This is an informational message; no user action is required. 2022-11-07 11:57:42.76 Server Using conventional memory in the memory manager. 2022-11-07 11:57:42.76 Server Page exclusion bitmap is enabled. 2022-11-07 11:57:42.80 Server Buffer pool extension is not supported on Linux platform. 2022-11-07 11:57:42.80 Server Buffer Pool: Allocating 524288 bytes for 349377 hashPages. 2022-11-07 11:57:43.03 Server Buffer pool extension is already disabled. No action is necessary. 2022-11-07 11:57:43.42 Server Successfully initialized the TLS configuration. Allowed TLS protocol versions are ['1.0 1.1 1.2']. Allowed TLS ciphers are ['ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA']. 2022-11-07 11:57:43.46 Server Query Store settings initialized with enabled = 1, 2022-11-07 11:57:43.47 Server The maximum number of dedicated administrator connections for this instance is '1' 2022-11-07 11:57:43.49 Server Node configuration: node 0: CPU mask: 0x000000000000000f:0 Active CPU mask: 0x000000000000000f:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required. 2022-11-07 11:57:43.51 Server Using dynamic lock allocation. Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node. This is an informational message only. No user action is required. 2022-11-07 11:57:43.53 Server In-Memory OLTP initialized on lowend machine. 2022-11-07 11:57:43.58 Server [INFO] Created Extended Events session 'hkenginexesession' 2022-11-07 11:57:43.58 Server Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required. ForceFlush is enabled for this instance. 2022-11-07 11:57:43.60 Server Total Log Writer threads: 2. This is an informational message; no user action is required. 2022-11-07 11:57:43.65 Server clflush is selected for pmem flush operation. 2022-11-07 11:57:43.67 Server Software Usage Metrics is disabled. 2022-11-07 11:57:43.73 spid9s [1]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1. 2022-11-07 11:57:43.73 spid9s Starting up database 'master'. 2022-11-07 11:57:43.75 Server CLR version v4.0.30319 loaded. ForceFlush feature is enabled for log durability. 2022-11-07 11:57:44.30 spid9s Resource governor reconfiguration succeeded. 2022-11-07 11:57:44.30 spid9s SQL Server Audit is starting the audits. This is an informational message. No user action is required. 2022-11-07 11:57:44.31 spid9s SQL Server Audit has started the audits. This is an informational message. No user action is required. 2022-11-07 11:57:44.42 spid9s SQL Trace ID 1 was started by login "sa". 2022-11-07 11:57:44.44 spid9s Server name is 'node3'. This is an informational message only. No user action is required. 2022-11-07 11:57:44.55 spid24s Always On: The availability replica manager is starting. This is an informational message only. No user action is required. 2022-11-07 11:57:44.56 spid27s [4]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1. 2022-11-07 11:57:44.57 spid12s [32767]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1. 2022-11-07 11:57:44.57 spid24s Always On: The availability replica manager is waiting for the instance of SQL Server to allow client connections. This is an informational message only. No user action is required. 2022-11-07 11:57:44.58 spid27s Starting up database 'msdb'. 2022-11-07 11:57:44.59 spid12s Starting up database 'mssqlsystemresource'. 2022-11-07 11:57:44.61 spid29s [5]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1. 2022-11-07 11:57:44.62 spid29s Starting up database 'test'. 2022-11-07 11:57:44.63 spid12s The resource database build version is 15.00.4261. This is an informational message only. No user action is required. 2022-11-07 11:57:44.73 spid22s A self-generated certificate was successfully loaded for encryption. 2022-11-07 11:57:44.76 spid22s Server is listening on [ 'any' <ipv6> 1433]. 2022-11-07 11:57:44.78 spid22s Server is listening on [ 'any' <ipv4> 1433]. 2022-11-07 11:57:44.79 spid12s [3]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1. 2022-11-07 11:57:44.80 spid12s Starting up database 'model'. 2022-11-07 11:57:44.80 Server Common language runtime (CLR) functionality initialized. 2022-11-07 11:57:44.81 Server Server is listening on [ ::1 <ipv6> 1434]. 2022-11-07 11:57:44.81 Server Server is listening on [ 127.0.0.1 <ipv4> 1434]. 2022-11-07 11:57:44.82 Server Dedicated admin connection support was established for listening locally on port 1434. 2022-11-07 11:57:44.84 spid22s Server is listening on [ ::1 <ipv6> 1431]. 2022-11-07 11:57:44.86 spid22s Server is listening on [ 127.0.0.1 <ipv4> 1431]. 2022-11-07 11:57:44.87 spid22s SQL Server is now ready for client connections. This is an informational message; no user action is required. 2022-11-07 11:57:44.95 spid29s Parallel redo is started for database 'test' with worker pool size [2]. 2022-11-07 11:57:45.08 spid12s Clearing tempdb database. 2022-11-07 11:57:45.08 spid9s Parallel redo is shutdown for database 'test' with worker pool size [2]. 2022-11-07 11:57:45.40 spid12s [2]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1. 2022-11-07 11:57:45.41 spid12s Starting up database 'tempdb'. 2022-11-07 11:57:46.02 spid12s The tempdb database has 4 data file(s). 2022-11-07 11:57:46.04 spid24s The Service Broker endpoint is in disabled or stopped state. 2022-11-07 11:57:46.04 spid24s The Database Mirroring endpoint is in disabled or stopped state. 2022-11-07 11:57:46.05 spid24s Service Broker manager has started. 2022-11-07 11:57:46.06 spid9s Recovery is complete. This is an informational message only. No user action is required. 2022-11-07 12:03:11.29 spid58 Attempting to load library 'xplog70.dll' into memory. This is an informational message only. No user action is required. 2022-11-07 12:03:11.35 spid58 Using 'xplog70.dll' version '2019.150.4261' to execute extended stored procedure 'xp_msver'. This is an informational message only; no user action is required.
OK,部署完成后就可以进入Navicat测试环节了。
三,
Navicat测试连接SQLServer
大概说一下本次部署的版本:SQLServer版本为Microsoft SQL Server 2019,Navicat版本为permium 15,而我们要使用Navicat连接SQLServer服务器,需要一个客户端程序,如同Oracle数据库一样。当然,如果会编程,比如,Java程序或者python程序,连接数据库服务器是需要的驱动。
Navicat自己带有此客户端,但它不是默认安装,需要自己点一哈安装,此客户端存放在Navicat的安装目录下。
安装这个客户端最好还是使用管理员权限安装,Navicat自带的客户端版本是10,安装完毕后,打开Navicat,按如下填写:
这里报错了,远程主机强迫关闭了一个现有的连接。那么,前面的提示很明显是SQL Server Native Client 10.0,也就是说客户端的版本和服务器端的版本不兼容,两者之间的版本相差太多,OK,重新下载一个客户端即可,下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=50402
新的客户端下载完成后,直接管理员权限安装即可,目前的最新版本是12,安装完毕后在Navicat的高级里将可以看到:
在点击测试连接就OK了:
建立数据库:
右键点击Navicat的连接名,库名自定义,剩下的按我的设置,确定即可。
SQL预览里有建库语句,可复制下来保存留底:
SQLServer就这样简单的安装完毕了。