Chúng tôi đã trình bày một số lý thuyết về việc định cấu hình Nhóm luôn BẬT Tính khả dụng cho Máy chủ SQL dựa trên Linux. Bài viết hiện tại sẽ tập trung vào thực hành.
Chúng tôi sẽ trình bày quy trình từng bước của việc định cấu hình Nhóm Sẵn sàng Luôn BẬT của Máy chủ SQL giữa hai bản sao đồng bộ. Ngoài ra, chúng tôi sẽ nêu bật việc sử dụng bản sao chỉ cấu hình để thực hiện chuyển đổi dự phòng tự động.
Trước khi bắt đầu, tôi khuyên bạn nên tham khảo bài viết trước đó và làm mới kiến thức của mình.
Sơ đồ thiết kế bên dưới hiển thị bản sao đồng bộ hai nút và bản sao chỉ cấu hình giúp chúng tôi đảm bảo chuyển đổi dự phòng tự động và bảo vệ dữ liệu.
Chúng tôi đã tìm hiểu thiết kế này trong bài viết đã đề cập trước đó, vì vậy hãy tham khảo nó để biết thông tin trước khi chúng tôi tiến hành các công việc thực tế.
Cài đặt SQL Server trên Hệ thống Ubuntu
Sơ đồ thiết kế trên đề cập đến 3 hệ thống Ubuntu - aoagvm1 , aoagvm2 và aoagvm3 với các phiên bản SQL Server được cài đặt. Tham khảo hướng dẫn cài đặt SQL Server trên Ubuntu - ví dụ liên quan đến SQL Server 2019 trên hệ thống Ubuntu 18.04. Bạn có thể tiếp tục và cài đặt SQL Server 2019 trên cả 3 nút (đảm bảo cài đặt cùng một phiên bản xây dựng).
Để tiết kiệm chi phí giấy phép, bạn có thể cài đặt phiên bản SQL Server Express cho bản sao nút thứ ba. Cái này sẽ hoạt động như một bản sao chỉ cấu hình mà không cần lưu trữ bất kỳ cơ sở dữ liệu về tính khả dụng nào.
Sau khi SQL Server được cài đặt trên tất cả 3 nút, chúng ta có thể định cấu hình Nhóm khả dụng giữa chúng.
Định cấu hình Nhóm khả dụng giữa ba nút
Trước khi tiếp tục, hãy xác thực môi trường của bạn:
- Đảm bảo có sự liên lạc giữa tất cả 3 nút.
- Kiểm tra và cập nhật tên máy tính cho từng máy chủ bằng cách chạy lệnh sudo vi / etc / hostname
- Cập nhật tệp máy chủ lưu trữ với địa chỉ IP và tên Node cho mỗi nút. Bạn có thể sử dụng lệnh sudo vi / etc / hosts để hoàn thành việc này
- Đảm bảo bạn có tất cả các phiên bản chạy ngoài SQL Server 2017 CU1 nếu bạn không sử dụng SQL Server 2019
Bây giờ, hãy bắt đầu cấu hình Nhóm SQL Server Luôn BẬT Tính khả dụng giữa 3 nút. Chúng tôi cần bật tính năng Nhóm sẵn có trên cả 3 nút.
Chạy lệnh dưới đây (lưu ý rằng bạn cần khởi động lại dịch vụ SQL Server sau hành động đó):
--Enable Availability Group feature
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
--Restart SQL Server service
sudo systemctl restart mssql-server
Tôi đã thực hiện lệnh trên trên nút chính. Nó sẽ được lặp lại cho hai nút còn lại.
Đầu ra ở bên dưới - nhập tên người dùng và mật khẩu bất cứ khi nào được nhắc.
[email protected]:~$ sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
SQL Server needs to be restarted to apply this setting. Please run
'systemctl restart mssql-server.service'.
[email protected]:~$ systemctl restart mssql-server
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'mssql-server.service'.
Authenticating as: Ubuntu (aoagvm1)
Password:
Bước tiếp theo là bật Luôn BẬT sự kiện mở rộng cho mỗi phiên bản SQL Server. Mặc dù đây là bước tùy chọn nhưng bạn phải bật nó để khắc phục mọi sự cố có thể xảy ra sau này. Kết nối với phiên bản SQL Server bằng SQLCMD và chạy lệnh dưới đây:
--Connect to the local SQL Server instance using sqlcmd
sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
Go
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
Go
Kết quả là bên dưới:
[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
2>GO
1>
Khi bạn bật tùy chọn này trên nút bản sao chính, hãy thực hiện tương tự cho các nút aoagvm2 và aoagvm3 còn lại.
Các phiên bản SQL Server chạy trên Linux sử dụng chứng chỉ để xác thực giao tiếp giữa các điểm cuối sao chép. Vì vậy, tùy chọn tiếp theo là tạo chứng chỉ trên bản sao chính aoagvm1 .
Đầu tiên, chúng tôi tạo một khóa chính và một chứng chỉ. Sau đó, chúng tôi sao lưu chứng chỉ này trong một tệp và bảo mật tệp bằng khóa cá nhân. Chạy tập lệnh T-SQL dưới đây trên nút bản sao chính:
--Connect to the local SQL Server instance using sqlcmd
sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
--Configure Certificates
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]$terKEY';
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';
BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY (FILE = '/var/opt/mssql/data/dbm_certificate.pvk',ENCRYPTION BY PASSWORD = '[email protected]');
Đầu ra:
[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]$terKEY';
2>CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';
3>GO
1>BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
2>WITH PRIVATE KEY (FILE = '/var/opt/mssql/data/dbm_certificate.pvk',ENCRYPTION BY PASSWORD = '[email protected]');
3>GO
1>
Nút bản sao chính hiện có hai tệp mới. Một là tệp chứng chỉ dbm_certificate.cer và tệp khóa cá nhân dbm_certificate.pvk tại / var / opt / mssql / data / vị trí.
Sao chép hai tệp trên vào cùng một vị trí trên hai nút còn lại (AOAGVM2 và AOAGVM3) sẽ tham gia vào cấu hình Nhóm khả dụng. Bạn có thể sử dụng lệnh SCP hoặc bất kỳ tiện ích nào của bên thứ ba để sao chép hai tệp này vào máy chủ đích.
Sau khi các tệp được sao chép sang hai nút còn lại, chúng tôi sẽ chỉ định quyền cho mssql người dùng truy cập các tệp này trên cả 3 nút. Đối với điều đó, hãy chạy lệnh dưới đây và sau đó thực thi nó cho nút thứ 3 aoagvm3 nữa:
--Copy files to aoagvm2 node
cd /var/opt/mssql/data
scp dbm_certificate.* [email protected]:var/opt/mssql/data/
--Grant permission to user mssql to access both newly created files
cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*
Chúng tôi sẽ tạo khóa chính và tệp chứng chỉ với sự trợ giúp của hai tệp đã sao chép ở trên trên hai nút còn lại aoagvm2 và aoagvm3 . Chạy lệnh dưới đây trên hai nút đó để tạo khóa chính :
--Create master key and certificate on remaining two nodes
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]$terKEY';
CREATE CERTIFICATE dbm_certificate
FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY (FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '[email protected]');
Tôi đã thực hiện lệnh trên trên nút thứ hai aoagvm2 để tạo khóa chính và chứng chỉ . Hãy xem kết quả thực thi. Đảm bảo sử dụng các mật khẩu giống như khi tạo và sao lưu chứng chỉ và khóa chính.
[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]$terKEY';
2>CREATE CERTIFICATE dbm_certificate
3>FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
4>WITH PRIVATE KEY (FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '[email protected]');
5>GO
1>
Chạy lệnh trên trên AOAGVM3 nút nữa.
Bây giờ, chúng tôi định cấu hình các điểm cuối phản chiếu cơ sở dữ liệu - trước đó chúng tôi đã tạo chứng chỉ cho chúng. Điểm cuối sao chép có tên hadr_endpoint phải có trên cả 3 nút theo loại vai trò tương ứng của chúng.
Vì cơ sở dữ liệu về tính khả dụng chỉ được lưu trữ trên 2 nút aoagvm1 và aoagvm2, chúng tôi sẽ chạy câu lệnh dưới đây chỉ trên các nút đó. Nút thứ ba sẽ hoạt động giống như một nhân chứng - vì vậy chúng tôi sẽ chỉ thay đổi VAI TRÒ để chứng kiến trong tập lệnh bên dưới, rồi chạy T-SQL đến nút thứ ba aoagvm3 . Tập lệnh là:
--Configure database mirroring endpoint Hadr_endpoint on nodes aoagvm1 and aoagvm2
CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = ALL,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES);
--Start the newly created endpoint
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
Đây là đầu ra của lệnh trên trên nút bản sao chính. Tôi đã kết nối với sqlcmd và thực hiện nó. Đảm bảo thực hiện tương tự trên nút bản sao thứ 2 aoagvm2 nữa.
[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>CREATE ENDPOINT [Hadr_endpoint]
2>AS TCP (LISTENER_PORT = 5022)
3>FOR DATABASE_MIRRORING (ROLE = ALL, AUTHENTICATION = CERTIFICATE dbm_certificate, ENCRYPTION = REQUIRED ALGORITHM AES);
4>Go
1>ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
2>Go
1>
Khi bạn đã thực thi tập lệnh T-SQL ở trên trên 2 nút đầu tiên, chúng tôi cần sửa đổi nó cho nút thứ ba - thay đổi VAI TRÒ thành NHÂN CHỨNG.
Chạy tập lệnh bên dưới để tạo điểm cuối phản chiếu cơ sở dữ liệu trên nút nhân chứng AOAGVM3 . Nếu bạn muốn lưu trữ cơ sở dữ liệu về tính khả dụng ở đó, hãy chạy lệnh trên trên nút 3 bản sao. Nhưng hãy đảm bảo rằng bạn đã cài đặt phiên bản SQL Server phù hợp để đạt được khả năng này.
Nếu bạn đã cài đặt phiên bản SQL Server Express trên nút 3 để triển khai chỉ cấu hình bản sao , bạn chỉ có thể định cấu hình ROLE với tư cách là nhân chứng cho nút này:
--Connect to the local SQL Server instance using sqlcmd
sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
----Configure database mirroring endpoint Hadr_endpoint on 3rd node aoagvm3
CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = WITNESS, AUTHENTICATION = CERTIFICATE dbm_certificate, ENCRYPTION = REQUIRED ALGORITHM AES);
--Start the newly created endpoint on aoagvm3
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
Bây giờ chúng ta phải tạo Nhóm sẵn có có tên ag1 .
Kết nối với phiên bản SQL Server bằng cách sử dụng sqlcmd tiện ích và chạy lệnh dưới đây trên nút bản sao chính aoagvm1 :
--Connect to the local SQL Server instance using sqlcmd hosted on primary replica node aoagvm1
sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
--Create availability group ag1
CREATE AVAILABILITY GROUP [ag1]
WITH (CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ON
N'aoagvm1’ WITH (ENDPOINT_URL = N'tcp://aoagvm1:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC),
N'aoagvm2' WITH (ENDPOINT_URL = N'tcp://aoagvm2:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC),
N'aoagvm3' WITH (ENDPOINT_URL = N'tcp://aoagvm3:5022',
AVAILABILITY_MODE = CONFIGURATION_ONLY);
--Assign required permission
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
Tập lệnh trên định cấu hình các bản sao Nhóm khả dụng với các tham số cấu hình bên dưới (chúng tôi vừa sử dụng chúng trong tập lệnh T-SQL):
- CLUSTER_TYPE =BÊN NGOÀI bởi vì chúng tôi đang định cấu hình nhóm khả dụng trên các cài đặt SQL Server dựa trên Linux
- SEEDING_MODE =AUTOMATIC khiến SQL Server tự động tạo cơ sở dữ liệu trên mỗi bản sao thứ cấp. Cơ sở dữ liệu khả dụng sẽ không được tạo trên bản sao chỉ cấu hình
- FAILOVER_MODE =BÊN NGOÀI cho cả bản sao Sơ cấp và Trung học. điều đó có nghĩa là bản sao tương tác với trình quản lý tài nguyên cụm bên ngoài, chẳng hạn như Pacemaker
- AVAILABILITY_MODE =SYNCHRONOUS_COMMIT cho các bản sao chính và phụ để tự động chuyển đổi dự phòng
- AVAILABILITY_MODE =CONFIGURATION_ONLY cho bản sao thứ 3 hoạt động như một bản sao chỉ cấu hình
Chúng tôi cũng cần tạo thông tin đăng nhập Pacemaker trên tất cả các phiên bản SQL Server. Người dùng này phải được chỉ định ALTER , KIỂM SOÁT và XEM ĐỊNH NGHĨA quyền trên Nhóm khả dụng trên tất cả các bản sao. Để cấp quyền, hãy chạy tập lệnh T-SQL dưới đây trên tất cả 3 nút bản sao ngay lập tức. Đầu tiên, chúng tôi sẽ tạo thông tin đăng nhập Máy tạo nhịp tim. Sau đó, chúng tôi sẽ chỉ định các quyền ở trên cho thông tin đăng nhập đó.
--Create pacemaker login on each SQL Server instance. Run below commands on all 3 SQL Server instances
CREATE LOGIN pacemaker WITH PASSWORD = '[email protected]@12'
--Grant permission to pacemaker login on newly created availability group. Run it on all 3 SQL Server instances
GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO pacemaker
GRANT VIEW SERVER STATE TO pacemaker
Sau khi chỉ định các quyền thích hợp cho đăng nhập Pacemaker trên cả 3 bản sao, chúng tôi thực thi các tập lệnh T-SQL bên dưới để tham gia các bản sao phụ aoagvm2 và aoagvm3 vào nhóm khả dụng mới được tạo ag1 . Chạy các lệnh dưới đây trên bản sao phụ aoagvm2 và aoagvm3 .
--Execute below commands on aoagvm2 and aoagvm3 to join availability group ag1
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
Dưới đây là kết quả của các lần thực thi trên trên nút aoagvm2 . Đảm bảo chạy nó trên aoagvm3 nút nữa.
[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
2>Go
1>ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
2>Go
1>
Do đó, chúng tôi đã cấu hình Nhóm sẵn sàng. Bây giờ, chúng ta cần thêm người dùng hoặc cơ sở dữ liệu thử nghiệm vào Nhóm sẵn sàng này. Nếu bạn đã tạo cơ sở dữ liệu người dùng trên bản sao nút chính, chỉ cần chạy một bản sao lưu đầy đủ và sau đó để quá trình gieo hạt tự động khôi phục nó trên nút phụ.
Do đó, hãy chạy lệnh dưới đây:
--Run a full backup of test database or user database hosted on primary replica aoagvm1
BACKUP DATABASE [Test] TO DISK = N'/var/opt/mssql/data/Test_15June.bak';
Hãy thêm cơ sở dữ liệu này vào Kiểm tra vào Nhóm Khả dụng ag1 . Chạy câu lệnh T-SQL dưới đây trên nút chính aoagvm1 . Bạn có thể sử dụng sqlcmd tiện ích để chạy các câu lệnh T-SQL.
--Add user database or test database to the availability group ag1
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [Test];
Bạn có thể xác minh cơ sở dữ liệu người dùng hoặc cơ sở dữ liệu thử nghiệm mà bạn đã thêm vào Nhóm khả dụng bằng cách xem xét phiên bản SQL Server phụ, liệu nó có được tạo trên các bản sao thứ cấp hay không. Bạn có thể sử dụng SQL Server Management Studio hoặc chạy một câu lệnh T-SQL đơn giản để tìm nạp thông tin chi tiết về cơ sở dữ liệu này.
--Verify test database is created on a secondary replica or not. Run it on secondary replica aoagvm2.
SELECT * FROM sys.databases WHERE name = 'Test';
GO
Bạn sẽ nhận được Bài kiểm tra cơ sở dữ liệu được tạo trên bản sao thứ cấp.
Với bước trên, Nhóm luôn sẵn sàng đã được cấu hình giữa cả ba nút. Tuy nhiên, các nút này vẫn chưa thành cụm. Bước tiếp theo của chúng tôi là cài đặt Máy tạo nhịp tim cụm trên chúng. Sau đó, chúng tôi sẽ thêm Nhóm sẵn có ag1 làm tài nguyên cho cụm đó.
Cấu hình cụm PACEMAKER giữa ba nút
Vì vậy, chúng tôi sẽ sử dụng trình quản lý tài nguyên cụm bên ngoài PACEMAKER giữa tất cả 3 nút để hỗ trợ cụm. Hãy bắt đầu với việc bật các cổng tường lửa giữa tất cả 3 nút.
Mở các cổng tường lửa bằng lệnh dưới đây:
--Run the below commands on all 3 nodes to open Firewall Ports
sudo ufw allow 2224/tcp
sudo ufw allow 3121/tcp
sudo ufw allow 21064/tcp
sudo ufw allow 5405/udp
sudo ufw allow 1433/tcp
sudo ufw allow 5022/tcp
sudo ufw reload
--If you don't want to open specific firewall ports then alternatively you can disable the firewall on all 3 nodes by running the below command (THIS IS ALTERNATE & OPTIONAL APPROACH)
sudo ufw disable
Xem đầu ra - kết quả này là từ bản sao chính AOAGVM1 . Bạn cần thực hiện các lệnh trên trên cả ba nút, từng nút một. Đầu ra phải tương tự.
[email protected]:~$ sudo ufw allow 2224/tcp
Rules updated
Rules updated (v6)
[email protected]:~$ sudo ufw allow 3121/tcp
Rules updated
Rules updated (v6)
[email protected]:~$ sudo ufw allow 21064/tcp
Rules updated
Rules updated (v6)
[email protected]:~$ sudo ufw allow 5405/udp
Rules updated
Rules updated (v6)
[email protected]:~$ sudo ufw allow 1433/tcp
Rules updated
Rules updated (v6)
[email protected]:~$ sudo ufw allow 5022/tcp
Rules updated
Rules updated (v6)
[email protected]:~$ sudo ufw reload
Firewall not enabled (skipping reload)
Cài đặt Máy tạo nhịp tim và corosync gói trên cả 3 nút. Chạy lệnh dưới đây trên mỗi nút - nó sẽ định cấu hình Máy tạo nhịp tim , corosync và tác nhân hàng rào .
--Install Pacemaker packages on all 3 nodes aoagvm1, aoagvm2 and aoagvm3 by running the below command
sudo apt-get install pacemaker pcs fence-agents resource-agents
Đầu ra rất lớn - gần 20 trang. Tôi đã sao chép vài dòng đầu tiên và cuối cùng để minh họa nó (bạn có thể xem tất cả các gói đã cài đặt):
[email protected]:~$ sudo apt-get install pacemaker pcs fence-agents resource-agents
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
cluster-glue corosync fonts-dejavu-core fonts-lato fonts-liberation ibverbs-providers javascript-common libcfg6 libcib4 libcmap4 libcorosync-common4 libcpg4
libcrmcluster4 libcrmcommon3 libcrmservice3 libdbus-glib-1-2 libesmtp6 libibverbs1 libjs-jquery liblrm2 liblrmd1 libnet-telnet-perl libnet1 libnl-3-200
libnl-route-3-200 libnspr4 libnss3 libopenhpi3 libopenipmi0 libpe-rules2 libpe-status10 libpengine10 libpils2 libplumb2 libplumbgpl2 libqb0 libquorum5 librdmacm1
libruby2.5 libsensors4 libsgutils2-2 libsnmp-base libsnmp30 libstatgrab10 libstonith1 libstonithd2 libtimedate-perl libtotem-pg5 libtransitioner2 libvotequorum8
libxml2-utils openhpid pacemaker-cli-utils pacemaker-common pacemaker-resource-agents python-pexpect python-ptyprocess python-pycurl python3-bs4 python3-html5lib
python3-lxml python3-pycurl python3-webencodings rake ruby ruby-activesupport ruby-atomic ruby-backports ruby-did-you-mean ruby-ethon ruby-ffi ruby-highline
ruby-i18n ruby-json ruby-mime-types ruby-mime-types-data ruby-minitest ruby-multi-json ruby-net-telnet ruby-oj ruby-open4 ruby-power-assert ruby-rack
ruby-rack-protection ruby-rack-test ruby-rpam-ruby19 ruby-sinatra ruby-sinatra-contrib ruby-test-unit ruby-thread-safe ruby-tilt ruby-tzinfo ruby2.5
rubygems-integration sg3-utils snmp unzip xsltproc zip
Suggested packages:
ipmitool python-requests python-suds apache2 | lighttpd | httpd lm-sensors snmp-mibs-downloader python-pexpect-doc libcurl4-gnutls-dev python-pycurl-dbg
python-pycurl-doc python3-genshi python3-lxml-dbg python-lxml-doc python3-pycurl-dbg ri ruby-dev bundler
The following NEW packages will be installed:
cluster-glue corosync fence-agents fonts-dejavu-core fonts-lato fonts-liberation ibverbs-providers javascript-common libcfg6 libcib4 libcmap4 libcorosync-common4
libcpg4 libcrmcluster4 libcrmcommon3 libcrmservice3 libdbus-glib-1-2 libesmtp6 libibverbs1 libjs-jquery liblrm2 liblrmd1 libnet-telnet-perl libnet1 libnl-3-200
libnl-route-3-200 libnspr4 libnss3 libopenhpi3 libopenipmi0 libpe-rules2 libpe-status10 libpengine10 libpils2 libplumb2 libplumbgpl2 libqb0 libquorum5 librdmacm1
libruby2.5 libsensors4 libsgutils2-2 libsnmp-base libsnmp30 libstatgrab10 libstonith1 libstonithd2 libtimedate-perl libtotem-pg5 libtransitioner2 libvotequorum8
libxml2-utils openhpid pacemaker pacemaker-cli-utils pacemaker-common pacemaker-resource-agents pcs python-pexpect python-ptyprocess python-pycurl python3-bs4
python3-html5lib python3-lxml python3-pycurl python3-webencodings rake resource-agents ruby ruby-activesupport ruby-atomic ruby-backports ruby-did-you-mean
ruby-ethon ruby-ffi ruby-highline ruby-i18n ruby-json ruby-mime-types ruby-mime-types-data ruby-minitest ruby-multi-json ruby-net-telnet ruby-oj ruby-open4
ruby-power-assert ruby-rack ruby-rack-protection ruby-rack-test ruby-rpam-ruby19 ruby-sinatra ruby-sinatra-contrib ruby-test-unit ruby-thread-safe ruby-tilt
ruby-tzinfo ruby2.5 rubygems-integration sg3-utils snmp unzip xsltproc zip
0 upgraded, 103 newly installed, 0 to remove and 2 not upgraded.
Need to get 19.6 MB of archives.
After this operation, 86.0 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://azure.archive.ubuntu.com/ubuntu bionic/main amd64 fonts-lato all 2.0-2 [2698 kB]
Get:2 http://azure.archive.ubuntu.com/ubuntu bionic/main amd64 libdbus-glib-1-2 amd64 0.110-2 [58.3 kB]
…………
--------
Từng là Máy tạo nhịp tim quá trình cài đặt cụm đã hoàn tất, hacluster người dùng sẽ được điền tự động khi chạy lệnh dưới đây:
[email protected]:~$ cat /etc/passwd|grep hacluster
hacluster:x:111:115::/var/lib/pacemaker:/usr/sbin/nologin
Bây giờ, chúng tôi có thể đặt mật khẩu cho người dùng mặc định được tạo trong khi cài đặt Máy tạo nhịp tim và Corosync các gói. Đảm bảo sử dụng cùng một mật khẩu trên cả 3 nút. Sử dụng lệnh dưới đây:
--Set default user password on all 3 nodes
sudo passwd hacluster
Nhập mật khẩu khi được nhắc:
[email protected]:~$ sudo passwd hacluster
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Bước tiếp theo là kích hoạt và khởi động pcsd dịch vụ và Máy tạo nhịp tim trên cả 3 nút. Nó cho phép cả 3 nút tham gia vào cụm sau khi khởi động lại. Chạy lệnh dưới đây trên cả 3 nút để hoàn thành bước này:
--Enable and start pcsd service and pacemaker
sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl enable pacemaker
Xem quá trình thực thi trên bản sao chính aoagvm1 . Đảm bảo chạy nó trên hai nút còn lại.
--Enable pcsd service
[email protected]:~$ sudo systemctl enable pcsd
Synchronizing state of pcsd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable pcsd
--Start pcsd service
[email protected]:~$ sudo systemctl start pcsd
--Enable Pacemaker
[email protected]:~$ sudo systemctl enable pacemaker
Synchronizing state of pacemaker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable pacemaker
Chúng tôi đã định cấu hình Máy tạo nhịp tim các gói. Bây giờ chúng ta tạo một cụm.
Trước tiên, hãy đảm bảo rằng bạn không có bất kỳ cụm nào đã được định cấu hình trước đó trên các hệ thống đó. Bạn có thể hủy bất kỳ cấu hình cụm hiện có nào từ tất cả các nút bằng cách chạy các lệnh dưới đây. Lưu ý rằng việc xóa bất kỳ cấu hình cụm nào sẽ dừng tất cả các dịch vụ cụm và vô hiệu hóa Máy tạo nhịp tim dịch vụ - nó cần được kích hoạt lại.
--Destroy previously configured clusters to clean the systems
sudo pcs cluster destroy
--Reenable Pacemaker
sudo systemctl enable pacemaker
Dưới đây là đầu ra từ nút bản sao chính aoagvm1 .
--Destroy previously configured clusters to clean the systems
[email protected]:~$ sudo pcs cluster destroy
Shutting down pacemaker/corosync services...
Killing any remaining services...
Removing all cluster configuration files...
--Reenable Pacemaker
[email protected]:~$ sudo systemctl enable pacemaker
Synchronizing state of pacemaker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable pacemaker
Tiếp theo, chúng tôi tạo cụm 3 nút giữa tất cả 3 nút từ bản sao chính aoagvm1 . Quan trọng :Thực thi các lệnh dưới đây chỉ từ nút chính của bạn !
--Create cluster. Modify below command with your node names, hacluster password and clustername
sudo pcs cluster auth <node1> <node2> <node3> -u hacluster -p <password for hacluster>
sudo pcs cluster setup --name <clusterName> <node1> <node2...> <node3>
sudo pcs cluster start --all
sudo pcs cluster enable --all
Xem kết quả đầu ra trên nút bản sao chính:
[email protected]:~$ sudo pcs cluster auth aoagvm1 aoagvm2 aoagvm3 -u hacluster -p hacluster
aoagvm1: Authorized
aoagvm2: Authorized
aoagvm3: Authorized
[email protected]:~$ sudo pcs cluster setup --name aoagvmcluster aoagvm1 aoagvm2 aoagvm3
Destroying cluster on nodes: aoagvm1, aoagvm2, aoagvm3...
aoagvm1: Stopping Cluster (pacemaker)...
aoagvm2: Stopping Cluster (pacemaker)...
aoagvm3: Stopping Cluster (pacemaker)...
aoagvm1: Successfully destroyed cluster
aoagvm2: Successfully destroyed cluster
aoagvm3: Successfully destroyed cluster
Sending 'pacemaker_remote authkey' to 'aoagvm1', 'aoagvm2', 'aoagvm3'
aoagvm1: successful distribution of the file 'pacemaker_remote authkey'
aoagvm2: successful distribution of the file 'pacemaker_remote authkey'
aoagvm3: successful distribution of the file 'pacemaker_remote authkey'
Sending cluster config files to the nodes...
aoagvm1: Succeeded
aoagvm2: Succeeded
aoagvm3: Succeeded
Synchronizing pcsd certificates on nodes aoagvm1, aoagvm2, aoagvm3...
aoagvm1: Success
aoagvm2: Success
aoagvm3: Success
Restarting pcsd on the nodes to reload the certificates...
aoagvm1: Success
aoagvm2: Success
aoagvm3: Success
[email protected]:~$ sudo pcs cluster start --all
aoagvm1: Starting Cluster...
aoagvm2: Starting Cluster...
aoagvm3: Starting Cluster...
[email protected]:~$ sudo pcs cluster enable --all
aoagvm1: Cluster Enabled
aoagvm2: Cluster Enabled
aoagvm3: Cluster Enabled
Đấu kiếm là một trong những cấu hình cần thiết khi sử dụng cụm PACEMAKER trong sản xuất. Bạn nên định cấu hình hàng rào cho cụm của mình để đảm bảo không có bất kỳ sự cố hỏng dữ liệu nào trong trường hợp mất điện .
Có hai loại triển khai hàng rào:
- Cấp tài nguyên - đảm bảo rằng một nút không thể sử dụng một hoặc nhiều tài nguyên.
- Cấp nút - đảm bảo rằng một nút không chạy bất kỳ tài nguyên nào.
Chúng tôi thường sử dụng STONITH dưới dạng cấu hình hàng rào - hàng rào cấp độ nút cho PACEMAKER .
Khi PACEMAKER không thể xác định trạng thái của một nút hoặc một tài nguyên trên một nút, hàng rào đưa cụm về trạng thái đã biết một lần nữa. Để đạt được điều này, PACEMAKER yêu cầu chúng tôi bật STONITH , viết tắt của Shoot The Other Node In The Head .
Chúng tôi sẽ không tập trung vào cấu hình hàng rào trong bài viết này vì cấu hình hàng rào cấp nút phụ thuộc nhiều vào môi trường riêng lẻ. Đối với tình huống của chúng tôi, chúng tôi sẽ vô hiệu hóa nó bằng cách chạy lệnh dưới đây:
--Disable fencing (STONITH)
sudo pcs property set stonith-enabled=false
Tuy nhiên, nếu bạn định sử dụng Máy tạo nhịp tim trong môi trường sản xuất, bạn nên lập kế hoạch triển khai STONITH tùy thuộc vào môi trường của bạn và luôn bật.
Tiếp theo, chúng tôi sẽ đặt một số thuộc tính cụm cơ bản: cluster-recheck-period, start-fail-is-death, và thời gian chờ thất bại .
Theo MSDN, nếu thời gian chờ thất bại được đặt thành 60 giây và khoảng thời gian kiểm tra lại theo cụm được đặt thành 120 giây, quá trình khởi động lại được thử ở khoảng thời gian lớn hơn 60 giây nhưng nhỏ hơn 120 giây. Microsoft khuyên bạn nên đặt giá trị cho khoảng thời gian kiểm tra lại cụm lớn hơn giá trị của thời gian chờ thất bại . Một cài đặt khác start-fail-is-death cần được đặt là true . Nếu không, cụm sẽ không bắt đầu chuyển đổi dự phòng từ bản sao chính sang bản sao thứ cấp tương ứng của chúng, nếu xảy ra bất kỳ sự cố vĩnh viễn nào.
Chạy các lệnh dưới đây để định cấu hình tất cả 3 thuộc tính cụm quan trọng:
--Set cluster property cluster-recheck-interval to 2 minutes
sudo pcs property set cluster-recheck-interval=2min
--Set start-failure-is-fatal to True
sudo pcs property set start-failure-is-fatal=true
--Set failure-timeout to 60 seconds. Ag1 is the name of the availability group. Change this name with your availability group name.
pcs resource update ag1 meta failure-timeout=60s
Tích hợp Nhóm khả dụng vào Nhóm Cụm máy tạo nhịp tim
Ở đây, mục tiêu của chúng tôi là mô tả quá trình Tích hợp Nhóm sẵn có mới được tạo ag1 tới Máy tạo nhịp tim mới được tạo nhóm cụm.
Trước tiên, chúng tôi sẽ cài đặt tác nhân tài nguyên SQL Server để tích hợp với Pacemaker trên cả 3 nút:
--Install SQL Server Resource Agent on all 3 nodes
sudo apt-get install mssql-server-ha
Tôi đã thực hiện lệnh trên trên cả 3 nút. Xem kết quả đầu ra bên dưới (lấy từ aoagvm1 ):
--Install SQL Server resource agent for integration with Pacemaker
[email protected]:~$ sudo apt-get install mssql-server-ha
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
mssql-server-ha
0 upgraded, 1 newly installed, 0 to remove, and 2 not upgraded.
Need to get 1486 kB of archives.
After this operation, 9151 kB of additional disk space will be used.
Get:1 https://packages.microsoft.com/ubuntu/16.04/mssql-server-preview xenial/main amd64 mssql-server-ha amd64 15.0.1600.8-1 [1486 kB]
Fetched 1486 kB in 0s (4187 kB/s)
Selecting previously unselected package mssql-server-ha.
(Reading database ... 90430 files and directories currently installed.)
Preparing to unpack .../mssql-server-ha_15.0.1600.8-1_amd64.deb ...
Unpacking mssql-server-ha (15.0.1600.8-1) ...
Setting up mssql-server-ha (15.0.1600.8-1) ...
Lặp lại các bước trên trên 2 nút còn lại.
Chúng tôi đã tạo Máy tạo nhịp tim đăng nhập trên tất cả các phiên bản SQL Server được lưu trữ trên 3 nút khi chúng tôi đã định cấu hình Nhóm khả dụng ag1 . Bây giờ, chúng tôi chỉ định vai trò sysadmin trên cả 3 phiên bản SQL Server. Bạn có thể kết nối bằng sqlcmd để chạy lệnh T-SQL này. If you have not created the Pacemaker login, you can run the below command to do it.
--Create a pacemaker login if you missed creating it in the above section.
USE master
Go
CREATE LOGIN pacemaker WITH PASSWORD = '[email protected]@12'
Go
--Assign sysadmin role to pacemaker login on all 3 nodes. Run this T-SQL on all 3 SQL Server instances.
ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemaker]
We must save the above SQL Server Pacemaker login and its credentials on all 3 nodes. Run the below command there:
--Save pacemaker login credentials on all 3 nodes by executing below commands on each node
echo 'pacemaker' >> ~/pacemaker-passwd
echo '[email protected]@12' >> ~/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
We will create the Availability Group Resource as master/subordinate .
We are using the pcs resource create command to create the Availability Group resource and set its properties. The following command will create the ocf:mssql:ag resource for the Availability Group ag1 .
The Pacemaker resource agent automatically sets the value of REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT on the Availability Group based on the Availability Group’s configuration during the creation of the Availability Group resource.
Execute the below command:
--Create availability group resource ocf:mssql:ag
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s --master meta notify=true
Next, we create a virtual IP resource in Pacemaker . Ensure you have the unused private IP address from your network . Replace the IP value with your virtual IP address. This IP will point to the primary replica and you can use it to make databases connections with active nodes.
The command is below:
--Configure virtual IP resource
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=10.50.0.7
We are adding the colocation constraint and ordering constraint to the Pacemaker cluster configuration . These constraints help the virtual IP resource to make decisions on resources, e.g., where they should run.
Constraints have some scores, and Pacemaker uses these scores to make decisions. Scores are calculated per resource. The cluster resource manager chooses the node with the highest score for a particular resource.
The colocation constraint has an implicit ordering constraint . We need to add an ordering constraint to prevent the IP address from temporarily pointing to the node with the pre-failover secondary . Ordering constraint ensures the cluster comes online in a particular sequential manner.
Run the below commands to add colocation constraint and ordering constraint to the cluster.
--Add colocation constraint
sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master
--Add ordering constraint
sudo pcs constraint order promote ag_cluster-master then start virtualip
Hence, Two-Node Synchronous Replicas (aoagvm1 &aoagvm2) and a Configuration-Only Replica (aoagvm3) on PACEMAKER Cluster between 3-Node Ubuntu Systems has been completed.
We can test the configuration to validate the automatic failover. Run the below command to check the status of the Pacemaker cụm. The command also initiates the Availability Group failover.
Remember, once you couple your Availability Group with the PACEMAKER cluster, you cannot use T-SQL statements to initiate the Availability Group failovers. You can also shut down the primary replica to initiate the automatic failover.
The command is the following:
--Validate the PACEMAKER cluster configuration
sudo pcs status
--Initiate availability group failover to verify AOAG configuration
sudo pcs resource move ag_cluster-master aoagvm2 –master
Kết luận
This article was meant to help you understand the configuration of the Two-Node Synchronous Replicas and a Configuration-Only Replica on PACEMAKER Cluster. We hope that you got useful information that will help you in your workflow.
Always plan all steps carefully and do proper testing in a lower life cycle before deploying to your production environment.
We’ll be glad to hear your thoughts about this topic. Feel free to leave your feedback in a comment section.