Hexa's Blog

Nam Đế 3, danh sách tướng chiêu hiền và thế lực

19/04/2021 Nam Đế 3

Danh sách và thứ tự các tướng chiêu hiền của game Nam Đế 3. Tướng chiêu hiền sẽ xuất hiện lần lượt và thay đổi sau mỗi 48 giờ.

[1]
Danh sách tướng chiêu hiền và thế lực
[1] Danh sách tướng chiêu hiền và thế lực

How to disable touchscreen temporary/permanent?

31/03/2021 Linux

How to disable touchscreen temporarily?

  • Determine touchscreen device ID using following command xinput. It will give a list of all available input device.
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad              	id=11	[slave  pointer  (2)]
⎜   ↳ Logitech G304                           	id=17	[slave  pointer  (2)]
⎜   ↳ Touchscreen                           	id=30	[slave  pointer  (2)]    # <-------- remember the ID [30]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Power Button                            	id=8	[slave  keyboard (3)]
    ↳ HP Truevision HD: HP Truevision         	id=9	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=10	[slave  keyboard (3)]
    ↳ HP Wireless hotkeys                     	id=12	[slave  keyboard (3)]
    ↳ HP WMI hotkeys                          	id=13	[slave  keyboard (3)]
    ↳ SINO WEALTH USB KEYBOARD System Control 	id=14	[slave  keyboard (3)]
    ↳ SINO WEALTH USB KEYBOARD Consumer Control	id=15	[slave  keyboard (3)]
    ↳ SINO WEALTH USB KEYBOARD                	id=16	[slave  keyboard (3)]
    ↳ Logitech G304                           	id=18	[slave  keyboard (3)]
  • Disable the input device using this command xinput disable 30. 30 is the device ID.

How to disable touchscreen permanently?

  • Go to the following file /usr/share/X11/xorg.conf.d/10-evdev.conf
  • Find a config section contained touchscreen config, for example:
Section "InputClass"
        Identifier "evdev touchscreen catchall" # <-------- Look at this Identifier
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "Ignore" "on"  # <-------- Add this config to ignore the touchscreen input.
EndSection
  • Add Option "Ignore" "on" to ignore touchscreen input.

Cải thiện MSI 3080 Ventus 10G OC

11/03/2021 Mining Rig

I. Lời nói đầu

Sau một thời gian dài chịu đựng sự ồn ào của bé trâu. Tôi đã quyết định cho bé lên trại. Sau một khoảng thời gian theo dõi vấn đề nhiệt độ của 3080 lại phát sinh. Lần này không phải là của MSI 3080 TRIO mà là của MSI 3080 VENTUS 10G OC. Nguyên nhân chắc chắn là đến từ nhiều phía.

  • Từ nhiệt độ môi trường xung quanh
  • Từ cách thiết kế case 4U chưa hợp phù hợp cho những card màn hình sử dụng loại ram GDDR6X.
  • Từ nguồn nhiệt tỏa ra từ những card màn hình xung quanh trong case 4U.
  • Từ chính hệ thống tản nhiệt của card màn hình,
  • Từ tôi, sự tham lam Hashrate của chính mình.

Ở bài viết này tôi sẽ miêu tả tình trạng của MSI 3080 VENTUS 10G OC trước và sau khi cải thiện, cũng như là cách thiết lập của mình trên MSI Afterburner

II. Phương pháp

Tôi có tham khảo nhiều phương cách của những người chơi card màn hình 3090 trước. Họ gắn thêm ốp lưng nhôm cho card màn hình, tiếp theo là gắn quạt luôn. Cách tiếp cận này rất hiệu quả, tuy nhiên độ mỹ thuật và tinh tế có lẽ không tỷ lệ thuận với sự hiệu quả mà nó mang lại.

[1] Ốp nhôm + quạt cho lưng 3090. Ảnh tìm trên mạng
[1] Ốp nhôm + quạt cho lưng 3090. Ảnh tìm trên mạng

Dưới đây là phương pháp tôi sử dụng. Tôi đã đốt một ngày nghỉ + một đống pad tản nhiệt gelid 15W và Gel tản nhiệt cho lần thử nghiệm này.

  • Thay pad tản nhiệt của vram gốc thành gelid 15W - 2 mm
  • Thay gel tản nhiệt Noctua H2
  • Độn phần pad tản nhiệt của vram gốc thêm gelid 15W - 0.5 mm
  • Cắt tấm mica thay thế ốp nhôm của case4U, đục lỗ để lắp quạt. Hút khí thổi ra từ card màn hình. Lý do sử dụng mica thay thì nhôm là vì ánh sáng LED nhấp nháy sẽ giúp bạn không lạc lối trên con đường đào coin khó khăn mệt mỏi.
  • Lắp thêm 3 quạt nữa để hút khí nóng thổi ra từ card.
[1] Gel Noctua H2 & Gelid 15W 1.0mm
[1] Gel Noctua H2 & Gelid 15W 1.0mm
[2] Tấm mica + đã đục lỗ lắp thêm quạt
[2] Tấm mica + đã đục lỗ lắp thêm quạt
[3] Quạt lắp thêm trên tấm mica.
[3] Quạt lắp thêm trên tấm mica.
[5] 9/3/2021 21:57. Kết quả sau cùng
[5] 9/3/2021 21:57. Kết quả sau cùng

III. So sánh trước và sau (100MH/s)

a. Trước

Để đạt được con số 100.433MH/s, mức thiết lập của tôi là:

  • Power Limit: 80%
  • Temperature Limit: 65C
  • Core Clock: -502MHz
  • Memory Clock: 1300Mhz

Với mức thiết lập này, nhiệt độ sẽ cho ra như sau:

  • GPU Temperature: 62C
  • GPU Memory Junction Temperature: 110C
[6] Card số #1, MSI VENTUS 10G OC - 100.433MH/s
[6] Card số #1, MSI VENTUS 10G OC - 100.433MH/s
[7] Thiết lập MSI Afterburner.
[7] Thiết lập MSI Afterburner.

b. Sau

[8] MSI 3080 VENTUS 10G OC - 100.493MH/s
[8] MSI 3080 VENTUS 10G OC - 100.493MH/s

Để đạt được con số 100.433MH/s, mức thiết lập của tôi cũng như lúc trước:

  • Power Limit: 80%
  • Temperature Limit: 65C
  • Core Clock: -502MHz
  • Memory Clock: 1300Mhz

Với mức thiết lập này, nhiệt độ sẽ cho ra như sau:

  • GPU Temperature: 62C
  • GPU Memory Junction Temperature: 96C

Kết luận đơn giản nhất mà tôi có thể đưa ra ngay lúc này đó là VRAM đã giảm đc 14 độ C. Từ 110 độ C xuống còn 96 độ C. Với những ai đang sở hữu card màn hình có sử dụng vram loại GDDR6X đều muốn xuống dưới mức 100 độ C. 96 độ C cho vram chạy 100.433MH/s là rất tuyệt vời.

IV. Mức thiết lập ổn định chạy 24/7 (95MH/s)

[9] 10/3/2021 11:45. Card số #3 MSI 3080 VENTUS 10G OC
[9] 10/3/2021 11:45. Card số #3 MSI 3080 VENTUS 10G OC
[10] 10/3/2021 21:21. Card số #3 MSI 3080 VENTUS 10G OC
[10] 10/3/2021 21:21. Card số #3 MSI 3080 VENTUS 10G OC

Để đạt được con số 95.539MH/s, mức thiết lập của tôi cũng như sau:

  • Power Limit: 77%
  • Temperature Limit: 65C
  • Core Clock: -502MHz
  • Memory Clock: 800Mhz

Với mức thiết lập này, sau khi quan trắc nhiệt độ sẽ cho ra như sau:

  • 11:45 trưa
    • GPU Temperature: 65C
    • GPU Memory Junction Temperature: 96C
  • 21:21 tối
    • GPU Temperature: 63C
    • GPU Memory Junction Temperature: 94C

V. Vấn đề

Tôi chắc chắn là đã khắc phục thành công vấn đề nhiệt của VRAM bằng cách thay pad và lắp thêm quạt. Tuy nhiên vì lý do thi công lắp đặt, tôi đã tạo ra vấn đề mới với GPU core. Nhiệt độ của VRAM ở trên ảnh là ở mức dưới 100C, tuy nhiên nhiệt độ GPU thì bị tăng 1-2C lên 65-66C. Tôi sẽ tìm cách khắc phục vấn đề này sau. Thời điểm tôi quan trắc cũng là vấn đề lớn, thông tin quan trắc bị ảnh hưởng nhiều bởi nhiệt độ xung quanh.

Thiết lập thông số 3080 - Dàn #1 Thanh Long

10/03/2021 Mining Rig

I. Lời mở đầu

Bài viết này phục vụ mục đích duy nhất là đó là nếu tôi lỡ tay xóa mấy profile trên MSI Afterburner. Tôi sẽ quay lại đây xem. Hiện tại đây là 4 VGA trực thuộc dàn #1

  • MSI 3080 VENTUS 10G OC (1 cái)
  • MSI 3080 GAMING X TRIO (2 cái)
  • ASUS 3080 ROG STRIX GAMING OC (1cái)
[1] Dàn 3080 - #1 Thanh Long
[1] Dàn 3080 - #1 Thanh Long

II. Mức thiết lập - 95MH/s

a. Tinh chỉnh tốc độ quạt theo nhiệt độ

  • 30C –> 40% Fan
  • 50C –> 60% Fan
  • 60C –> 85% Fan
  • 65C –> 100% Fan
[2] Tinh chỉnh tốc độ quạt
[2] Tinh chỉnh tốc độ quạt

b. MSI 3080 VENTUS 10G OC

  • Power Limit: 77%
  • Temperature Limit: 65C
  • Core Clock: -502Mhz
  • Memory Clock: 800MHz
  • Fan: User define - Auto

Kết quả thu được:

  • Hashrate: 95.443MH/s
  • Công suất: 246Walt
  • Nhiệt độ GPU: 62C
  • Nhiệt độ VRAM: 94C

c. MSI 3080 GAMING X TRIO

  • Power Limit: 106%
  • Temperature Limit: 65C
  • Core Clock: -502Mhz
  • Memory Clock: 825Mhz
  • Fan: User define - Auto

Kết quả thu được:

  • Hashrate: 95.436MH/s
  • Công suất: 235W
  • Nhiệt độ GPU: 58C
  • Nhiệt độ VRAM: 98C

d. ASUS 3080 ROG STRIX GAMING OC

  • Power Limit: 67%
  • Temperature Limit: 65C
  • Core Clock: -502Mhz
  • Memory Clock: 800Mhz
  • Fan: User define - Auto

Kết quả thu được:

  • Hashrate: 95.474MH/s
  • Công suất: 248W
  • Nhiệt độ GPU: 58C
  • Nhiệt độ VRAM: 96C

Tinh chỉnh Afterburner, chi phí & lợi nhuận vận hành MSI RTX 3080

12/02/2021 Mining Rig

I. Giới Thiệu

Tôi đã mua MSI 3080 Ventus 10G OC vào ngày 2/2/2021 và MSI Trio X Gaming vào ngày 2/5/2021. Sau một thời gian sử dụng đây là các thiết lập MSI Afterburner tôi đang sử dụng để đào Ethereum (ETH). Trước khi đi sâu vào thiết lập, tôi muốn đề cập đến giá của ETH hiện tại, ngày 11/2/2021, 1 ETH = $1,789 USD, xấp xỉ 41,196,850 VND. Bên cạnh đó, giá điện sinh hoạt tôi đang sử dụng theo bảng sau:

[1] Bảng giá điện
[1] Bảng giá điện
[2] 11/2/2021 23:23 GMT+7, CoinMarketCap, Giá trị Ethereum
[2] 11/2/2021 23:23 GMT+7, CoinMarketCap, Giá trị Ethereum

MSI 3080 Ventus 10G OC & Trio X Gaming sau khi đã áp dụng các thiệt lập sẽ có hiệu năng như hình dưới đây. Hoàn toàn có thể đấy lên 101MH/s nếu muốn. Tuy nhiên tôi chỉ muốn ở mức 100MH/s cho mỗi card màn hình. Nếu bạn để ý kĩ, bạn sẽ thấy răng mặc dù Ventus và Trio có mức hashrate là tương đương nhau, tuy nhiên số lượng share của Trio luôn luôn lớn hơn của Ventus, khá là kì quặc, có lẽ là tiền nào của nấy. Khi nào thị trường bớt khan hiếm, tôi sẽ thử xem MSI 3080 Suprim có gì đặc biệt hơn.

[3] Hiệu năng sau khi tinh chỉnh
[3] Hiệu năng sau khi tinh chỉnh

II. MSI 3080 Ventus 10G OC

  • Power Limit: 80%
  • Temperature Limit: 65 độ C
  • Core Clock: -502
  • Memory Clock: +1300 MHz
  • Fan: Auto

Mức thiết lập này sẽ có kết quả như sau:

  • Hashrate: 100.622 MH/s
  • Tiêu thụ: 256W
  • Nhiệt độ: 55 độ C

III. MSI 3080 Trio X Gaming

  • Power Limit: 116%
  • Temperature Limit: 70 độ C
  • Core Clock: -502
  • Memory Clock: +1300 Mhz
  • Fan: Auto

Mức thiết lập này sẽ có kết quả như sau:

  • Hashrate: 100.417MH/s
  • Tiêu thụ: 319W
  • Nhiệt độ: 60 độ C

IV. Chi phí và lợi nhuận

a. Chi phí

Phi phí dưới đây sẽ dựa trên thông tin ghi trên phần mềm, chưa có áp dụng cho case, quạt của case 4U.

  • Tổng năng lượng điện tiêu thụ cho MSI 3090 Ventus & Trio trong một tháng: 414kWh
  • Tổng tiền điện trong một tháng theo bảng giá điện sinh hoạt 2020: 949,978 VND
[4] Tiền điện phải trả cho riêng Ventus & Trio (414kWh)
[4] Tiền điện phải trả cho riêng Ventus & Trio (414kWh)

b. Lợi nhuận

Theo như trang web https://www.cryptocompare.com/ thì với hashrate là 201MH/s , mỗi tháng sẽ kiếm đc 0.3766 Ethereum. Nếu quy đổi số Ethereum này thành USD thì sẽ là $669 USD hoặc là 15,514,733 VND . Sau khi trừ đi chi phí lợi nhuận còn lại sẽ là 14.564.755 VND.

[5] 12/2/2021, CryptoCompare, 201MH/s sẽ cho ra 0.3766 ETH một tháng
[5] 12/2/2021, CryptoCompare, 201MH/s sẽ cho ra 0.3766 ETH một tháng

V. Trích Dẫn

Bảng Giá Điện Sinh Hoạt 2020-Giá Bán Điện Kinh Doanh EVN 2020, https://vuphong.vn/bang-gia-dien-sinh-hoat-2020-gia-ban-dien-kinh-doanh-evn-2020/?gclid=Cj0KCQiAyJOBBhDCARIsAJG2h5dKdg4-F3BXhEVhDcn8_bQQr-VW8uTR3Fql8j3nQjN4bp-LPxIWyAAaApRjEALw_wcB

CryptoCompare, https://www.cryptocompare.com/mining/calculator/eth?HashingPower=201&HashingUnit=MH%2Fs&PowerConsumption=0&CostPerkWh=0.11&MiningPoolFee=1

CoinMarketCap, https://coinmarketcap.com/vi/currencies/ethereum/

Cải thiện performance của MSI RTX 3080 TRIO X GAMING

09/02/2021 Mining Rig

Hiện tại tôi đã và đang sử dụng card màn hình này để đào ETH. Chiếc card đồ họa này có vấn đề nghiêm trọng với việc tản nhiệt. Về vấn để tản nhiệt này, người dùng không thể xem thông tin ở trên MSI Afterburner, phần mềm hiển thị nhiệt độ là trên con chip GPU chứ không phải là trên các con chip chứa bộ nhớ.

Dưới đây là vài hình ảnh liên quan đến MSI RTX 3080 TRIO X GAMING sau khi bị tháo ra.

[1] Bo mạch
[1] Bo mạch
[2] Lốc tản nhiệt
[2] Lốc tản nhiệt

TRIO sau khi mua về, cắm vào máy đào, chưa có chỉnh qua phần mềm MSI Afterburner có hashrate loanh quanh 87 88 MH/s. Tôi đã dành nhiều giờ để tinh chỉnh MSI Afterburner thì TRIO có thể lên đc đến 93 MH/s. Tuy nhiên chỉ số này không kéo dài đc lâu, sau khi theo dõi sau 24 giờ, giữ nguyên tinh chỉnh trên MSI, hasrate của TRIO xuống 81 MH/s. Điều này có nghĩa là tinh chỉnh, vọc vạch MSI Afterburner không giải quyết dc nhu câu. có cái gì đó ở giữa có vấn đề.

[3] MSI RTX 3080 TRIO X GAMING - Default Hashrate
[3] MSI RTX 3080 TRIO X GAMING - Default Hashrate

Tôi có tham khảo các bài viết trên reddit thì có khá nhiều người cũng gặp tình trạng này. Giải pháp được đưa ra sau cùng đó là:

  • Sử dụng BIOS của MSI RTX 3080 SUPRIM, lý do là gia tăng điện cấp cho TRIO. Gia tăng điện lên 116%
  • Thay pad tản nhiệt cho các chip bộ nhớ. TRIO bị lock hashrate sau cùng là do các chip nhớ không tỏa nhiệt hiệu quả.

Sau nhiều lần thử nghiệm với thermal pad gelid (16W 1mm và 1.5mm)gel tản nhiệt NOCTUA H2. Tôi nhận ra rằng độ cao 1mm là ổn áp nhất. Lưu ý răng bạn chỉ cần thay thermal pad nhiệt ở các con chip nhớ. Dưới đây là hình ảnh khu vực bạn cần thay pad nhiệt.

[4] Khu vực thay pad nhiệt - Xanh lá và xanh lam
[4] Khu vực thay pad nhiệt - Xanh lá và xanh lam

Sau khi đã thay pad nhiệt thành công, bước tiếp theo sẽ là flash lại bios của TRIO. Cái này khá nguy hiểm.

  • Bước 1: Vào https://www.techpowerup.com/download/nvidia-nvflash/, download bản mới nhất. Sau khi download xong, giải nén bạn sẽ có file nvflash.exe, ghi nhớ thư mục chứa cái file này, ví dụ là mình sẽ lưu ở /User/Admin/Desktop/MSI_TRIO
  • Bước 2: Vào https://www.techpowerup.com/vgabios/, tìm phiên bản mới nhất của dòng 3080 Suprim. Sau khi download xong, bạn sẽ được file có tên là MSI.RTX3080.10240.201123.rom (ví dụ) , copy file này ngang hàng với với nvflash.exe.
  • Bước 3: Chạy cmd với quyền administrator, change directory (cd) vào /User/Admin/Desktop/MSI_TRIO. Lưu file room hiện tại của TRIO đang chạy với lệnh nvflash.exe --save original.rom . Trong trường hợp bạn fuck up, hay đơn giản là muốn xài bios gốc, hãy dùng file này orignal.room.
  • Bước 4: Chạy lệnh nvflash --protectoff , gỡ bảo vệ bios.
  • Bước 5: Chạy lệnh nvflash MSI.RTX3080.10240.201123.rom --overridesub=true.

Kể từ đây, TRIO đã có nhiều điện hơn vì xài BIOS của suprim, thêm vào đó nhiệt năng cũng hiệu quả hơn vì có thermal pad mới. Đừng quên là bạn còn chưa tinh trỉnh TRIO với MSI Afterturner Ở bài viết khác, mình sẽ nêu chi tiết thông tin tinh chỉnh của TRIO với Afterburner. Đây là terminal kết quả của mình sau khi tinh chỉnh. Chú ý GPU số 2, số 1 là MSI RTX 3080 VENTUS 10G OC.

[5] Kết quả sau khi tinh chỉnh với MSI Afterburner
[5] Kết quả sau khi tinh chỉnh với MSI Afterburner
[6] Tổng quan dàn máy
[6] Tổng quan dàn máy

Đây là các link tôi đã tham khảo:

HTTPS và các khái niệm liên quan

13/01/2021 SSL

I. Từ vựng

  • Certificate Authority (CA): Cơ quan có thẩm quyền để xác nhận SSL
  • Certificate signing request (CSR): Yêu cầu chứng nhận chứng chỉ SSL
  • Certificate: Chứng chỉ

II. Các file liên quan trong việc cài đặt HTTPS

  • Private key file: Như tên gọi nó chính là private key
  • Certificate signing request(csr): File này được tạo ra sau khi có private key. Khi tạo yêu cầu chứng nhận chứng chỉ, sẽ cần phải cung cấp thêm các thông tin như tên quốc gia, email, và nhiều hơn nữa. Những thông tin được dùng để xác nhận và tạo ra certificate (chứng chỉ), đơn vị tạo ra chứng chỉ được gọi là Certificate Authority. Tuy nhiên cũng có thể tự tạo ra chứng chỉ từ yêu cầu chứng nhận chứng chỉ, vì người chứng nhận không phải là Certificate Authority nên là trên web browser, trình duyệt sẽ hiển thị màu đỏ bên cạnh đường link.
  • Certificate(chứng chỉ)

Theo như các khái niệm trên thì khi cài đặt HTTPS cho server, chỉ cần private keycertificate. Nếu private key đã được mã hóa thì lúc cài đặt cho server phải nhớ thêm mật khẩu để server có thể giải mã.

III. Các bước liên quan

1a. Lệnh để tạo private key đã mã hóa

openssl genrsa -des3 -out domain.key 2048

Lưu ý rằng file domain.key đã được mã hóa. Để sử dụng cho server, cần được giải mã.

-des3: mã hóa private key theo thuật toán `DES` 3 lần.
2048: độ dài của private key

1b. Lệnh tạo private key không được mã hóa

openssl genrsa -out private.key 2048

2. Lệnh để tạo yêu cầu chứng nhận chứng chỉ(csr) từ private key

openssl req -key domain.key -new -out domain.csr

3. Lệnh để tự tạo certificate từ yêu cầu chứng nhận chứng chỉprivate key

openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt

4. Lệnh giải mã private key

openssl rsa -in encrypted.key -out decrypted.key

IV. Lưu ý

Không khuyên khích việc xem manual của openssl rồi tự làm, document của command openssl rất khó hiểu và chỉ mang tính chất tham khảo, đôi khi tự xem rồi không biết thứ tự đâu mà làm. Ví dụ như lệnh tạo certificate từ private keycsr, xem manual mà ko hiểu nên sắp xếp argument như thế nào cho thích hợp. Tốt nhất là làm theo hướng dẫn.

Postgresql - Thiết lập hot-standby

04/11/2020

I. Khái niệm

Trước khi đọc sâu hơn về cách thiết lập replication này, tôi sẽ giải thích về mô hình hot-standby. Ở mô hình này, máy standby sẽ có khả năng bị read (đọc), khi máy primary xảy ra vấn đề, máy standby sẽ được tăng cấp thành primary mới, cho phép nó có khả năng read/write (đọc/ ghi).

Khi áp dụng kỹ thuật này, có thể sử dụng thêm database proxy để giảm áp lực read cho máy primary.

Nói về dữ liệu, 99.999999999% là dữ liệu trên máy standby sẽ giống với máy primary. Lý do mà nó không đạt được đến mức 100% là do khi máy primary chết, máy primary không gửi write-ahead-log cho máy standby được, việc này dẫn đến hệ quả là máy standby không có dữ liệu.

Ở bài viết này, sẽ tập trung nói đến việc làm sao để thiết lập hot-standby replication cũng như cách kích hoạt thủ công hot-standby server để nó trở thành primary server mới. Vấn đề phục hồi primary cũ sẽ được nói ở bài viết tiếp theo.

[1] Mô hình hot-standby replication
[1] Mô hình hot-standby replication

II. Thiết lập

1. Cài đặt Postgresql (2020-11-04 tested)

Ở bài hướng dẫn này, tôi sử dụng server là Fedora. Hướng dẫn trên mạng rất nhiều để tiện theo dõi trên bài viết tôi sẽ viết lại ở đây.

Bạn vào website: https://www.postgresql.org/download/linux/redhat/, trong phần chỉ mục PostgreSQL Yum Repository, hãy điền hết cái form, sau khi điền xong một đoạn script cài đặt sẽ hiện ra, bạn chỉ việc copy-paste vào terminal là chạy. Việc cài đặt này là tiêu chuẩn và áp dụng trên cả máy primarystandby.

Ví dụ như tôi đang sử dụng fedora 32 x64, muốn xài postgresql-11, sau khi điền xong form, tôi sẽ nhận được đoan script sau:

# Install the repository RPM:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/F-32-x86_64/pgdg-fedora-repo-latest.noarch.rpm

# Install PostgreSQL:
sudo dnf install -y postgresql12-server

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl enable postgresql-12
sudo systemctl start postgresql-12

2. Thiết lập máy primary

a. Tạo user

Bạn sẽ cần phải tạo 2 users

user/password role
repuser/repuser replication
admin/admin superuser

Để thiết lập relication, thực sự chỉ cần đến user với role là replication mà thôi. Tôi chủ động tạo thêm một superuser mới có tên là admin.

Vào terminal, và chạy lệnh sau:

# Chuyển qua user postgresql trên hệ điều hành
sudo su postgres;
# Tao user repuser/repuser
createuser --no-login --pwprompt --replication repuser;
# Tạo user admin/admin
createuser --pwprompt --superuser admin;

b. Thay đổi pg_hba.conf để cấp quyền truy cập

host    all             admin           0.0.0.0/0                         md5
host    replication     repuser         {standy_server_ip}/{mask}         md5
[2] pg_hba.conf
[2] pg_hba.conf

Ở trên hình thì IP/MASK của máy standby là 192.168.2.43/24.

c. Thay đổi postgresql.conf

listen_addresses = '*'
wal_level = replica
archive_command = 'test ! -f /var/lib/pgsql/11/data/archivedir/%f && cp %p /var/lib/pgsql/11/data/archivedir/%f'
max_wal_senders = 3
wal_log_hints = on

Lưu ý archive_command, /var/lib/pgsql/11/data/archivedir/ là thư mục cần phải tạo thêm, nếu chưa có hãy tạo nó sử dụng lệnh sau:

mkdir -p /var/lib/pgsql/11/data/archivedir/
Thiết Lập Ý Nghĩa
listen_addresses Liệt kê IP được phép truy cập vào database server bằng postgresql client
wal_level Mức độ chi tiết của wal, để dữ liệu trong file wal đủ chi tiết để phục hồi, giá trị cần là replica
archive_command command sử dụng để lưu trữ write-ahead-log vào thư mục archive. Ở thiết lập phía trên, nó đầu tiên kiểm tra xem trong thư mục archive có tồn tại file chưa, nếu chưa nó sẽ copy file write-ahead-log vào thư mục archive.
max_wal_senders Số lượng tối đa wal_senders chạy đồng thời với nhau. Nói một cách khác nó chỉ thị số lượng tối đa các kết nối từ standby server đến primary
wal_log_hints Config này quan trong trong việc đồng bộ hóa server primary cũ với primary mới.

Kể từ bước này trở đi, máy primary đã có thể khởi động postgresql server.

systemctl start postgresql-11;

3. Thiết lập máy standby

Trước khi chạy các bước tiếp theo, bắt buộc phải tắt postgresql. Đây là bắt buộc

systemctl stop posgresql-11;

a. Kéo thư mục data từ máy primary sang standby

  • Di chuyển thư mục data cũ đến nơi khác.
    mv /var/lib/pgsql/11/data /var/lib/pgsql/11/data_bak;
    
  • Sử dụng pg_basebackup để kéo thư mục data từ máy primary đến máy standby
    pg_basebackup --pgdata /var/lib/pgsql/11/data -h 192.168.2.68 -p 5432 -U repuser \
                  --password --verbose --progress --write-recovery-conf \
                  --wal-method stream
    

Sau khi chạy xong, bạn sẽ thấy màn hình tương tự như sau.

[3] pg_basebackup
[3] pg_basebackup

Thêm vào đó, trong thư mục data sẽ có thêm 2 file

  • postgresql.auto.conf
  • recovery.conf

b. Thiết lập file recovery.conf

File recovery.conf được tạo ra từ lệnh pg_basebackup với flag --write-recovery-conf. Nội dung của nó đề cập đến chế độ hiện tại của standby server và vị trị của primary server.

    # Nội dung file recovery.conf
    standby_mode = 'on'
    primary_conninfo = 'user=repuser password=repuser host=192.168.2.68 port=5432 sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any'

Trong file recovery.conf, có thể thấy rõ ràng thông tin truy cập vào primary server

c. Thiết lập posgresql.conf

hot_standby = on

Kể từ bước này trở đi, khởi chạy postgresql server trên standby server.

systemctl start postgresql-11;

4. Kích hoạt Standby server thành Primary server

Không chạy lệnh sau bây giờ, chỉ chạy nó khi bạn biết rằng primary server đã chết.

Để chuyển chế độ của standby server từ standby thành primary, bạn phải chạy lệnh sau trên standby server.

/usr/pgsql-11/bin/pg_ctl promote --pgdata /var/lib/pgsql/11/data;

III. Kiểm tra

1. Kiểm tra xem có những standby server nào đang kết nối.

Vào primary server và chạy sql sau:

select * from pg_stat_replication;

Đây là kết quả nên nhận được, bạn sẽ thấy rõ ràng IP của standby server

    Name            |Value              |
    ----------------|-------------------|
    pid             |1670               |
    usesysid        |16384              |
    usename         |repuser            |
    application_name|walreceiver        |
    client_addr     |192.168.2.43       |
    client_hostname |                   |
    client_port     |51962              |
    backend_start   |2020-11-04 15:57:03|
    backend_xmin    |                   |
    state           |streaming          |
    sent_lsn        |0/F02F468          |
    write_lsn       |0/F02F468          |
    flush_lsn       |0/F02F468          |
    replay_lsn      |0/F02F468          |
    write_lag       |                   |
    flush_lag       |                   |
    replay_lag      |                   |
    sync_priority   |0                  |
    sync_state      |async              |

2. Tạo/Xóa Bảng

Tôi sẽ sử dụng dbeaver để tạo bảng, thêm record, xóa record trên primary server. Tôi kì vọng là sau khi làm những thao tác trên, dữ liệu trên standby server phải giống với dữ liệu trên primary server.

Tôi chạy sql tạo bảng people trên máy primary.

    CREATE TABLE public.people (
            id serial NOT NULL,
            "name" varchar NULL,
            CONSTRAINT people_pk PRIMARY KEY (id)
    );
[4] primary server, tạo bảng people
[4] primary server, tạo bảng people
[5] standby server, xuất hiện bảng people
[5] standby server, xuất hiện bảng people

3. Thêm/xóa record

Để thêm record cho bảng people, tôi chạy câu sql sau:

    insert into people (name) values ('Linh'), ('Son'), ('Long'), ('TTEK');

Để xóa record cho bảng people, tôi chạy câu sql sau:

    delete from people where name = 'TTEK';

Khi kiểm tra dữ liệu trên máy primary và máy standby dữ liệu là giống hệt nhau.

IV. Câu kết

Vậy là việc thiết lập hot standby server đã hoàn tất. Ở bài viết tiếp theo, tôi sẽ nói về tình huống server primary chết, server standby chiếm quyền và đóng vai trò là server primary mới. Vấn đề xảy ra khi chúng ta muốn khởi động lại server primary cũ, và muốn lấy toàn bộ dữ liệu mới đc thay đổi trên máy primary mới và thiết lập máy primary cũ trở thành máy standby mới.

Quản lý version của ngôn ngữ theo dự án với ASDF

29/10/2020 Linux

Trong quá trình phát triển phần mềm, khả năng rất cao là mỗi dự án chúng ta sẽ cần đến một ngôn ngữ lập trình khác nhau, thêm vào mặc dù là chung ngôn ngữ nhưng phiên bản của ngôn ngữ lập trình thay đổi theo dự án. Việc quản trị ngôn ngữ lập trình và phiên bản của nó là cực kì quan trọng.

Phần mềm mà tôi thích sử dụng đó là asdf https://asdf-vm.com/ . Cách cài đặt thì có thể tìm thấy trực tiếp trên trang chủ của asdf. Bài viết này sẽ nói về những tính năng hay ho mà asdf tôi sử dụng hàng ngày.

Cơ chế hoạt động của asdf là tạo ra một lớp bọc phía bên ngoài cho các executable file , ứng với mỗi phiên bản, asdf sẽ chọn lựa và chạy file tương ứng. Việc quản lý version được làm tự động, lập trình viên chỉ việc config.

1. Cài đặt ngôn ngữ lập trình

ASDF cài đặt nhiều ngôn ngữ lập trình cũng như phiên bản của ngôn ngữ đó giúp bạn, cú pháp đơn giản, không cần config nhiều. Cần lưu ý là bạn phải cài plugin trước, Danh sách plugin có thể tìm ở đây https://asdf-vm.com/#/plugins-all.

Ví dụ như muốn cài elixir, thì bạn sẽ cần elixir-plugin.

  • Để cài đặt plugin, bạn sử dụng lệnh sau, trong đó elixir là tên plugin.
asdf plugin-add elixir
  • Để cài đặt ngôn ngữ, chạy lệnh sau, trong đó 1.9.1 là version.
asdf install elixir 1.9.1
[1] elixir 1.9.1
[1] elixir 1.9.1

2. Sử dụng bộ ngôn ngữ lập trình

Một dự án sẽ sử dụng rất nhiều ngôn ngữ lập trình, ví dụ như elixir cho backend, nodejs cho frontend, thêm vào đó trong trường hợp tôi dùng elixir tôi cần quan tâm đến cả erlang nữa. asdf sẽ giúp lập trình viên nhanh chóng chuyển phiên bản của ngôn ngữ lập trình theo dự án.

Ví dụ dưới đây là project_1project_2, hai dự án này nằm ở hai thư mục khác nhau. cả hai có điểm chung là đều sử dụng elixir tuy nhiên nhu cầu về phiên bản lại khác nhau, một cái là 1.9.1 , cái còn lại là 1.9.2

[2] project_1, elixir 1.9.1
[2] project_1, elixir 1.9.1
[3] project_2, elixir 1.9.2
[3] project_2, elixir 1.9.2

Tính năng này được để cập rất chi tiết tại đây https://asdf-vm.com/#/core-configuration.

Để làm được điều này, nói ngắn gọn bạn sẽ cần tạo file .tool-versions ở mỗi project. Trong file này sẽ liệt kê chi tiết version của language. Như trên hình, khi kiểm tra phiên bản của elixir, phiên bản đã hiển thị khác nhau.

File: project_1/.tool_versions

elixir 1.9.1
erlang 22.1
nodejs 10.16.3

File: project_2/.tool_versions

nodejs 13.0.1
erlang 22.1
elixir 1.9.2

How to create an application shortcut on Fedora?

12/10/2020 Linux

Inside $HOME, there is a directory named ~/.local/share/applications which containts all application shortcuts for the current user. To make a new application shortcut you need to make a new file named *.desktop with the following schema.

[Desktop Entry]
Type=Application
Name=Postman
Comment=Postman
Icon=/home/nguyenvinhlinh/Software/Postman-7.0.9/icon.png
Path=/home/nguyenvinhlinh/Software/Postman-7.0.9
Exec=/home/nguyenvinhlinh/Software/Postman-7.0.9/Postman
Terminal=false
Categories=Development;

If it all works correctly, a new application shortcut will be displayed on Gnome Search.

[1] GNOME Search
[1] GNOME Search