Tải bản đầy đủ (.pdf) (26 trang)

Giới thiệu Tính sẵn sàng cao và Kết nối trong suốt của IBM solidDB potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (250.8 KB, 26 trang )

Giới thiệu Tính sẵn sàng cao và Kết nối trong suốt của IBM solidDB
Sami Salkosuo, Kiến trúc sư phần mềm, IBM
Tóm tắt: IBM® solidDB® là một đề xuất cơ sở dữ liệu trong bộ nhớ hiệu năng
cao được tối ưu hóa cho tốc độ và tính sẵn sàng. Bài viết này tập trung riêng vào
khả năng sẵn sàng bằng cách giới thiệu cho bạn về các tính năng kết nối trong suốt
(TC) và tính sẵn sàng cao (HA) của solidDB. Bài viết này cũng bàn về những lợi
ích mà các tính năng này cung cấp và cách chúng ảnh hưởng đến hiệu năng. Nó
cũng cho bạn thấy cách cấu hình các tính năng, mô tả một ứng dụng thử nghiệm
và đem đến cho bạn một video trình diễn.
Mở đầu
Tính năng sẵn sàng cao của solidDB được sử dụng để triển khai thực hiện chức
năng Dự trữ nóng (HSB - HotStandby). HSB cho phép một máy chủ thứ cấp chạy
song song với máy chủ chính và giữ một bản sao cập nhật của dữ liệu trong máy
chủ chính. Kết nối trong suốt của solidDB khắc họa các máy chủ HSB từ các ứng
dụng và cho phép một ứng dụng thực hiện một kết nối hợp lý duy nhất đến các
máy chủ trong chế độ HSB. Các trình điều khiển IBM solidDB, bao gồm trình
điều khiển kết nối cơ sở dữ liệu Java (JDBC), duy trì các kết nối tới các máy chủ
sao cho có một kết nối dự phòng thứ cấp tới máy chủ HSB thứ cấp trong trường
hợp kết nối đến máy chủ chính bị ngắt. Trình điều khiển JDBC chỉ ra sự ngắt kết
nối với một mã lỗi đặc biệt.
Phần Tài nguyên ở cuối bài viết này cung cấp các liên kết đến tài liệu sản phẩm
solidDB, bao gồm toàn bộ các chi tiết về Tính sẵn sàng cao, Dự trữ nóng và Kết
nối trong suốt.


Kiến trúc
Hình 1 minh họa kiến trúc của một cấu hình Tính sẵn sàng cao của solidDB. (Hình
này được sửa lại từ các sơ đồ trong Trung tâm Thông tin IBM solidDB).

Hình 1. Kiến trúc Tính sẵn sàng cao


Sau đây là các mô tả về các thành phần trong hình trên:
 Nút 1 là máy vật lý bao gồm máy chủ solidDB chính và Trình điều khiển
Tính sẵn sàng cao (HA Controller).
 Nút 2 là máy tính vật lý bao gồm máy chủ solidDB thứ cấp và HA
Controller. Máy chủ solidDB thứ cấp luôn duy trì cập nhật với máy chủ
solidDB chính.
 Máy chủ chính (Primary server) bao gồm cơ sở dữ liệu IBM solidDB
chính. Các ứng dụng kết nối đến máy chủ này và thực hiện các giao dịch
dựa vào cơ sở dữ liệu chính.
 Máy chủ thứ cấp (Secondary server) bao gồm cơ sở dữ liệu thứ cấp. Nếu
máy chủ chính bị lỗi, Trình điều khiển HA (HAC) thực hiện xử lý dữ phòng
lỗi để chuyển đổi máy chủ thứ cấp thành máy chủ chính.
 Trình điều khiển HA (HA Controller-HAC) là chương trình quản lý dự
phòng tự động cho HSB của IBM solidDB. HAC phát hiện các lỗi, thực
hiện các dự phòng lỗi và khởi động lại máy chủ khi cần thiết. HAC cũng có
một API cho phép Các nhà quản lý HA (HA Manager) kết nối với nó.
 Trình quản lý HA ( HA Manager) là một công cụ dựa trên giao diện người
dùng đồ họa cho thấy trạng thái của các máy chủ dự trữ nóng (HotStandby)
và trạng thái của Các trình điều khiển HA. HA Manager cũng bao gồm
chức năng cơ bản để quản lý HAC. Công cụ này được sử dụng trong trình
diễn để mô phỏng một lỗi trên máy chủ chính và thực hiện một chuyển đổi
sang máy chủ thứ cấp.


Các lợi ích và hiệu năng
Lợi ích chính của Tính sẵn sàng cao trong một môi trường IBM solidDB là các
ứng dụng được bảo vệ khỏi các tác động của một lỗi trong cơ sở dữ liệu chính.
Một cấu hình HA cùng với Kết nối trong suốt cho phép các ứng dụng hoàn toàn sử
dụng được ngay cả khi có lỗi cơ sở dữ liệu trong một giao dịch. Một lợi ích nữa là
các ứng dụng, sử dụng một cấu hình HA, có thể cho thấy sự cải thiện về hiệu

năng.
Hiệu năng
Phần này nói thêm về hiệu năng có thể thực sự cải thiện như thế nào khi bạn sử
dụng một cấu hình HA trong IBM solidDB.
Hiệu năng IBM solidDB bị ảnh hưởng bởi các phần tử như cấu hình, cách sử dụng
cơ sở dữ liệu, bộ nhớ có sẵn và hoạt động mạng và I/O. Ba cái sau là những phần
tử phổ biến nhất ảnh hưởng đến hiệu năng của IBM solidDB (và hầu hết các cơ sở
dữ liệu khác). Thông tin dưới đây giải thích cấu hình và các kịch bản sử dụng cụ
thể ảnh hưởng đến hiệu năng IBM solidDB như thế nào và bạn có thể điều chỉnh
solidDB như thế nào cho phù hợp. Tuy nhiên, nó không đi sâu vào các chi tiết về
cách thực hiện điều chỉnh.
Các phần tử ảnh hưởng lớn đến hiệu năng IBM solidDB là:
 Độ bền ghi nhật ký giao dịch.
 Giao thức sao chép giữa các máy chủ.
 Chính sách báo nhận cho giao thức sao chép.
 Các giao dịch chỉ đọc được thực hiện trên máy chủ thứ cấp.
 Song song hóa bên trong của máy chủ.
Bạn có thể thiết lập độ bền giao dịch là strict (chặt chẽ), relaxed (thoải mái),
adaptive (thích nghi). Các thiết lập độ bền strict có nghĩa là giao dịch được ghi
nhật ký ngay sau khi nó được cam kết. Các thiết lập độ bền relaxed có nghĩa là
một giao dịch được ghi nhật ký khi máy chủ ít bận hoặc khi máy chủ có thể ghi
một số giao dịch cùng một lúc. Các thiết lập độ bền adaptive có nghĩa là máy chủ
chính hoạt động trong chế độ ghi nhật ký thoải mái nếu máy chủ thứ cấp cũng
đang hoạt động. Các thiết lập ghi nhật ký strict là an toàn nhất; còn các thiết lập
relaxed là nhanh nhất.
Giao thức sao chép giữa các máy chủ liên quan đến mức an toàn của bản sao này.
Bạn có thể thiết lập giao thức sao chép giữa các máy chủ là hoặc 1-safe hoặc 2-
safe. Với thiết lập 1-safe (an toàn-1), thành phần điều khiển trả về ứng dụng ngay
sau khi giao dịch được cam kết trên máy chủ chính; việc sao chép đến máy chủ
thứ cấp được thực hiện không đồng bộ. Với thiết lập 2-safe (an toàn-2), thành

phần điều khiển trả về ứng dụng chỉ sau khi giao dịch được cam kết trên cả máy
chủ chính lẫn máy chủ thứ cấp. Thiết lập 1-safe nhanh nhất; thiết lập 2-safe an
toàn nhất.
Cấu hình chính sách báo nhận ảnh hưởng đến hiệu năng khi giao thức sao chép
được thiết lập là 2-safe. Bạn có thể thiết lập chính sách báo nhận là 2-safe
received, 2-safe visible hay 2-safe durable. Thiết lập này xác định khi nào máy chủ
thứ cấp gửi một tin báo nhận tới máy chủ chính. Với thiết lập 2-safe received, tin
báo nhận được gửi đi khi nhận được dữ liệu. Với thiết lập 2-safe visible, tin báo
nhận được gửi đi khi các ứng dụng thấy dữ liệu. Với thiết lập 2-safe durable, tin
báo nhận được gửi đi khi dữ liệu được ghi vào đĩa.
Hai phần tử cuối cùng, có ảnh hưởng đến hiệu năng, đang đọc từ máy chủ thứ cấp
và song song hóa bên trong. Các ứng dụng cho phép các phần tử này hoạt động.
Với một cấu hình HA, có thể đọc dữ liệu từ cả hai máy chủ chính và thứ cấp để
phân bố tải trọng đồng đều giữa hai máy. Song song hóa bên trong đơn giản chỉ có
nghĩa là các ứng dụng có thể sử dụng nhiều kết nối cơ sở dữ liệu để truy cập tới cơ
sở dữ liệu solidDB và do đó cải thiện hiệu năng trong nhiều trường hợp.


Cấu hình
Việc đặt cấu hình IBM solidDB với Tính sẵn sàng cao là một nhiệm vụ nhanh
chóng và dễ dàng. Sử dụng các bước sau đây để triển khai một môi trường Tính
sẵn sàng cao của solidDB với các thay đổi tối thiểu đối với các giá trị cấu hình
mặc định:
1. Cài đặt IBM solidDB trên hai máy chủ. Tên các máy chủ là Primary
(Chính) và Secondary (Thứ cấp).
2. Trên mỗi máy chủ tạo ra một thư mục làm việc (ví dụ, c:\solidDB) và tạo ra
một cơ sở dữ liệu có tên là dba. Sử dụng dba làm tên người dùng và mật
khẩu của cơ sở dữ liệu.
3. Trong thư mục làm việc của máy chủ có tên là Primary, tạo ra một tệp cấu
hình có tên là solid.ini, như trong 1:


Liệt kê 1. Tệp cấu hình solid.ini cho Primary

[HotStandby]
HSBEnabled=yes
Connect=tcp 192.168.1.37 1964

Thay thế địa chỉ IP bằng địa chỉ IP của máy chủ Secondary của bạn. (1964
là số cổng mặc định cho IBM solidDB).
4. Trong thư mục làm việc của máy chủ có tên là Primary, hãy tạo ra một tệp
cấu hình có tên là solidhac.ini, như trong Liệt kê 2:

Liệt kê 2. Tệp cấu hình solidhac.ini cho Primary

[HAController]
Listen=tcp 3155

Username=dba
Password=dba
DBUsername=dba
DBPassword=dba

EnableDBProcessControl=Yes

[LocalDB]
Connect=tcp 127.0.0.1 1964
StartScript=c:\soliddb\start_solid.bat

[RemoteDB]
Connect=tcp 192.168.1.37 1964


o Giá trị tiếp sau Listen=tcp là số cổng người nghe của Trình điều
khiển HA.
o DBUsername và DBPassword dùng để truy cập Trình điều khiển HA
và cơ sở dữ liệu solidDB tên là dba mà bạn đã tạo trong bước 2.
o Thiết lập EnableDBProcessControl=Yes chỉ biết rằng HAC sẽ điều
khiển khởi động và dừng quá trình solidDB.
o Các thiết lập LocalDB và RemoteDB định nghĩa các địa chỉ và các
cổng IP cho các cơ sở dữ liệu và trong trường hợp của LocalDB,
đường dẫn tới kịch bản lệnh khởi động cho cơ sở dữ liệu cục bộ. Ví
dụ, nội dung của kịch bản lệnh khởi động có thể là: start
c:\IBM\solidDB\solidDB6.5\bin\solid.exe -cC:\soliddb.
5. Khởi động Trình điều khiển HA trên Primary khi sử dụng lệnh sau đây:
solidhac.exe -c c:\soliddb

solidhac.exe nằm trong /bin của thư mục cài đặt solidDB của bạn. Vì bạn
đã cho phép điều khiển quá trình với HAC ở bước trước, nên việc khởi
động HAC cũng khởi động cơ sở dữ liệu solidDB.
6. Trong thư mục làm việc của máy chủ có tên là Secondary, hãy tạo một tệp
cấu hình có tên là solid.ini, như trong Liệt kê 3:

Liệt kê 3. Tệp cấu hình solid.ini cho Secondary

[HotStandby]
HSBEnabled=yes
Connect=tcp 192.168.1.33 1964

Thay thế địa chỉ IP bằng địa chỉ IP của máy chủ Primary của bạn. (1964 là
số cổng mặc định cho IBM solidDB).
7. Trong thư mục làm việc của máy chủ có tên là Secondary, hãy tạo một tệp

cấu hình tên là solidhac.ini, như trong Liệt kê 4:

Liệt kê 4. Tệp cấu hình solidhac.ini cho Secondary

[HAController]
Listen=tcp 3155

Username=dba
Password=dba
DBUsername=dba
DBPassword=dba

EnableDBProcessControl=Yes

[LocalDB]
Connect=tcp 127.0.0.1 1964
StartScript=c:\soliddb\start_solid.bat

[RemoteDB]
Connect=tcp 192.168.1.33 1964

8. Khởi động Trình điều khiển HA trên Secondary sử dụng lệnh sau đây:
solidhac.exe -c c:\soliddb

solidhac.exe nằm trong /bin của thư mục cài đặt solidDB của bạn. Vì bạn
đã cho phép điều khiển quá trình với HAC ở bước trước, nên việc khởi
động HAC cũng khởi động cơ sở dữ liệu solidDB. Lệnh này cũng bắt đầu
phối hợp với máy chủ Primary để thiết lập cấu hình HA.
9. Tiếp theo, bạn sẽ sử dụng HA Manager để hiển thi trực quan cấu hình HA
của solidDB và thử nghiệm HA. HA Manager là một ứng dụng Java nằm

trong /samples/hac của thư mục cài đặt solidDB của bạn. Trong thư mục
làm việc HA Manager, hãy tạo một tệp cấu hình có tên là HAManager.ini,
như trong Liệt kê 5:

Liệt kê 5. HAManager.ini

; All the following lines are mandatory.
Window_title = HA Manager
Header_text = IBM solidDB HotStandby

; Display names, host addresses and port numbers
; of the SolidHAC (HA Controllers) instances
;Server 1 HA Controller
;
Server1_name = Primary
Server1_host = 192.168.1.33
Server1_port = 3155
Server1_user = dba
Server1_pass = dba
;
;Server 2 HA Controller
;
Server2_name = Secondary
Server2_host = 192.168.1.37
Server2_port = 3155
Server2_user = dba
Server2_pass = dba

Thay đổi các mục nhập ở trên khi cần thiết để kết nối với các Trình điều
khiển HA trong máy chủ Primary và Secondary của bạn.

10. Khởi động HA Manager khi sử dụng câu lệnh sau:
java
-jar HAManager.jar

Hình 2 cho thấy một hiển thị trực quan ví dụ của một cấu hình HA khi được
HA Manager hiển thị.

Hình 2. HA Manager cho thấy cấu hình Dự trữ nóng của IBM solidDB



Ứng dụng thử nghiệm
Phần này cho bạn thấy cách tạo ra một máy khách thử nghiệm để cho bạn có thể
thấy Tính sẵn sàng cao của IBM solidDB ảnh hưởng đến các ứng dụng như thế
nào. Liệt kê 6 chứa mã nguồn cho một máy khách Java đơn giản chèn một triệu
hàng vào cơ sở dữ liệu. Mã này cũng có sẵn trong phần Tải về ở cuối bài viết này.
Mã này được phát triển bằng cách sử dụng Java phiên bản 6. Trước khi sử dụng ví
dụ này, hãy chắc chắn rằng biến môi trường CLASSPATH của bạn bao gồm
đường dẫn cài đặt tệp .jar của solidDB JDBC Driver.
Các phần mã in đậm được giải thích thêm ngay sau liệt kê này.

Listing 6. SolidDBTestClient.java

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;


public class SolidDBTestClient
{
private final static int MAX_ROWS = 5000;

private static String jdbcURL = "jdbc:solid://
192.168.1.33:1964,192.168.1.37:1964/dba/dba";

public static void main(String[] args)
{
Connection conn = null;
try
{
Class.forName("solid.jdbc.SolidDriver"); // create db connection
Properties props = new Properties();
props.setProperty("solid_tf_level", "SESSION");
conn = DriverManager.getConnection(jdbcURL, props);
createTables(conn);

long start=System.currentTimeMillis();

InsertThread it = new InsertThread(conn);
Thread t = new Thread(it);
t.start();
t.join();

long end=System.currentTimeMillis();
long totalTime=end-start;
double avg=(1.0*totalTime)/MAX_ROWS;
System.out.println("Total time: "+totalTime);

System.out.println("Avg time: "+avg);

}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (conn != null)
{
try
{
conn.close();
}
catch (SQLException e)
{
}
}
}
}

private static void createTables(Connection conn)
{
try
{
String sql = "CREATE TABLE sample (id INTEGER PRIMARY KEY, time
BIGINT)";
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);

stmt.close();
}
catch (Exception e)
{
//ignore
}
}

static class InsertThread implements Runnable
{
private Connection conn;

public InsertThread(Connection conn)
{
this.conn = conn;
}

private void doInsert(String sql, int i) throws SQLException
{
Statement stmt = null;
try
{
stmt = conn.createStatement();
stmt.execute(sql);
System.out.print(i + "\r");
}
finally
{
stmt.close();
}

}

public void run()
{
String sql = "delete from sample";
try
{
conn.createStatement().executeUpdate(sql);
}
catch (SQLException e1)
{
System.out.println(e1.toString());
}
for (int i = 1; i <= MAX_ROWS; i++)
{
sql = "insert into sample values(" + i + ","
+ System.nanoTime() + ")";
try
{
doInsert(sql, i);
}
catch (SQLException e)
{
System.out.println();
System.out.println(e.toString());
if (e.getSQLState().equals("HY000"))
{ System.out.println("Rolling back connection ");
try { conn.rollback(); // do new insert after rollback
System.out.println("Inserting "+i+" again ");
doInsert(sql, i); }

catch (SQLException e1) { System.out.println(e1.toString()); } }
else
{
e.printStackTrace();
}
}
}
}
}
}

Phần đầu tiên in đậm cho thấy URL của JDBC cho cấu hình solidDB HSB. Chú ý
các địa chỉ IP và các số cổng của cả hai máy chủ trong cấu hình HSB có mặt trong
URL như thế nào.
Phần in đậm thứ hai thiết lập đặc tính solid_tf_level làm SESSION (Phiên). Đặc
tính này thiết lập mức Kết nối trong suốt. Giá trị SESSION có nghĩa là kết nối và
phiên kết nối được bảo tồn. Các giá trị hợp lệ khác là CONNECTION, bảo tồn kết
nối nhưng không bảo tồn phiên và NONE, chẳng bảo tồn kết nối cũng chẳng bảo
tồn phiên.
Phần in đậm thứ ba chứa mã để xử lý dự phòng lỗi cơ sở dữ liệu và chuyển đổi kết
nối. Trong trường hợp có dự phòng lỗi, trình điều khiển cơ sở dữ liệu solidDB đưa
ra một SQLException (ngoại lệ SQL) có trạng thái đặc biệt là HY000. Nếu dự
phòng lỗi xảy ra, phần mã này gọi phương thức rollback() của đối tượng Kết nối
Java để làm mới kết nối đó. Sau khi cam kết lại, ứng dụng vẫn tiếp tục như trước.
Cấu hình ảnh hưởng đến hiệu năng như thế nào
Để cho thấy cấu hình HA có thể ảnh hưởng đến hiệu năng như thế nào, tác giả sử
dụng ứng dụng thử nghiệm từ phần trước để chèn 5000 hàng vào cơ sở dữ liệu.
Bảng 1 so sánh hiệu năng dựa trên các kiến trúc và các thiết lập ghi nhật ký khác
nhau.


Bảng 1. Cấu hình IBM solidDB ảnh hưởng đến hiệu năng
Kiến trúc Ghi nhật ký Thời gian trung bình (msec)
Độc lập Chặt chẽ 14.1344
Độc lập Thoải mái 5.125
HA, Dự trữ nóng Chặt chẽ 17.3314
HA, Dự trữ nóng Thoải mái 5.472
Các kết quả cho thấy rằng việc sử dụng ghi nhật ký thoải mái trong một cấu hình
HA chỉ ảnh hưởng chút ít đến hiệu năng
Các thử nghiệm trên đã được chạy khi sử dụng cả hai IBM solidDB như là các ảnh
ảo VMWare trong một máy chủ duy nhất trong một mạng WLAN.


Trình diễn
Để xem các khái niệm được mô tả trong bài viết này đang hoạt động, bạn có thể
xem video YouTube này: Trình diễn Tính sẵn sàng cao của IBM solidDB. Hình 3
cho thấy một ảnh chụp màn hình từ video này.

Hình 3. Video trình diễn



Tóm tắt
Bài viết này đã giải thích cách cấu hình Tính sẵn sàng cao của IBM solidDB và
cách các ứng dụng có thể tận dụng tính năng Kết nối trong suốt của IBM solidDB.
Tính sẵn sàng cao của IBM solidDB, kết hợp với tốc độ rất cao của IBM solidDB,
cung cấp một tầng cơ sở dữ liệu rất mạnh mẽ cho các ứng dụng. Ngoài ra, với yêu
cầu quản trị rất nhỏ (nếu có) cho IBM solidDB, làm cho IBM solidDB trở thành
một lựa chọn cơ sở dữ liệu tốt cho bất kỳ ứng dụng ISV nào.


×