Bài đăng nổi bật

Redo log, undo log và binary log

Đây là ba loại log mà bạn đã từng nghe khi tiếp cận mysql. Trong các cơ sở dữ liệu quan hệ (RDBMS) khác, cũng sẽ có các thành phần có vai tr...

Thứ Bảy, 27 tháng 2, 2016

Quick setup haproxy and keepalived

Haproxy đóng vai trò như một reverse proxy thực hiện load balancer. Bản thân một haproxy thì không ấn định  high availabilty (HA) cho chính nó. Tính chất HA là ấn định cho cac backend server đằng sau nó. Nếu chỉ có một haproxy thì mô hình sẽ có một SPOF (Single Point Of Failure). Nó down thì cả hệ thống down theo. Để giải quyết, chúng ta  có thể thêm một haproxy để dự phòng (redundancy). Nhưng phương án đó lại phát sinh thêm vấn đề . Khi failover xảy ra client làm sao kết nối đến haproxy dự phòng. Tôi không thể gán cùng một IP lên hai haproxy được. IP conflict sẽ khiến mạng không ổn định. Tôi cũng không thể gán IP khác nhau cho mỗi haproxy được. Khi failover, tôi sẽ phải thông báo cho tất cả client về IP mới. Việc đó thật quá sức. Xem chừng lúc này chúng ta cần đến keepalived. Sử dụng keepalived sẽ cho phép tôi tạo ra một VIP - Virtual IP. Client sẽ kết nối đến haproxy qua VIP này. VIP này sẽ được keepalived luân chuyển sang haproxy dự phòng khi failover. Tất cả đều trong suốt với client. Client không biết được nó đang kết nối đến VIP, nó nghĩ nó đang kết nối trực tiếp đến một single backend thay vì một cluster backend nằm sau VIP. Client sẽ không biết đến real IP của proxy và IP của backend cũng như sự luân chuyển VIP này khi failover.

Q&A MySQL and Galera cluster

Các câu hỏi thường gặp trong mysql, galera cluster và các câu trả lời ngắn gọn.

xbstream: Can't create/write to file './ibdata1' galera

Đây là lỗi tôi gặp phải khi khởi động mariadb galera cluster cụm 3 node. Diễn biến là như này. Ban đầu tôi quên không cấu hình iptables giữa các server, tất nhiên khi đó các node joiner sẽ không thể đồng bộ data với donor để tham gia vào cluster. Tôi bèn stop iptables, nhưng sau đó tôi liên tục gặp thông báo "xbstream: Can't create/write to file './ibdata1' galera". Quái lạ, hay là trên joiner node có một file ibdata1 đó chưa được xóa, tôi tự nhủ. Di chuyển đến khu vực datadir của joiner tôi không thấy file nào tên là ibdata1 chỉ có sst_in_progress và grastate.dat Tại datadir của joiner, tôi bèn rm -rf * hi vọng sẽ xóa sạch các file cũ để làm mới khu vực này sau khi sst từ donor. Tiếp tục khởi động mysql trên joiner, tôi tiếp tục nhận được thông báo lỗi cũ...

Thứ Năm, 25 tháng 2, 2016

Kỹ thuật benchmark

Bạn khó có thể biết chính xác khả năng hoạt động server cho đến khi benchmark. Kết quả benchmark không chỉ tiết lộ ngưỡng hoạt động ở mức trần của server, của dịch vụ trên server mà còn giúp bạn loại trừ những sự cố tiềm ẩn. Ví dụ: Bạn có thể biết được disk có vấn đề khi kết quả benchmark cho tốc độ đo có chừng 53MB/s. Sẽ thật tai hại nếu sử dụng ổ cứng đó cho dịch vụ. Phát hiện và thay thế sớm sẽ bớt đau đớn hơn rất nhiều khi dịch vụ đã online.

Thứ Tư, 24 tháng 2, 2016

Raid on chip và Raid Card

Khi khai thác thông tin một server, tôi nhận thấy có sự khác biệt sau trong kết quả.

Cài đặt MegaCLI

MegaCLI là một công cụ kiểm tra tình trạng raid của LSI, nay đã là Avagotech. Và để công cụ này hoạt động server của bạn phải dùng MegaRAID, sản phẩm của LSI.

Thứ Ba, 23 tháng 2, 2016

Tìm hiểu về RAID

RAID - Viết tắt của Redundancy Array of Inexpensive Disks, theo cách gọi phổ biến thì là Redundancy Array of Independent Disks. Đó là một công nghệ storage cho phép gom nhiều physical disk thành một logical unit. Bằng cách này, RAID nâng cao throughput do data được đẩy vào nhiều disk. Về dung lượng data cũng được nâng cao, khả năng fault-tolerance của disk cũng được cải thiện khi mà các data bị mất trên một disk có thể khôi phục qua quá trình rebuilding từ các disk còn lại trong array. Tùy vào RAID level được sử dụng mà các ưu điểm trên có thể xuất hiện một phần hoặc tất cả. Chúng ta sẽ điểm qua các RAID level thông dụng nhất: RAID-0, RAID-1, RAID-5, RAID-6, RAID-10 và RAID-01.

Kỹ thuật kiểm tra sức khỏe của disk trên hệ thống

Bài viết sẽ liệt kê một số công cụ kiểm tra sức khỏe cho ổ đĩa và các thông số mà người quản trị viên cần chú ý.

Thứ Hai, 22 tháng 2, 2016

Quick setup Github using https with two-factor authentication

Github là một kho lưu trữ và chia sẻ code tuyệt vời. Khác với Gitlab, một phiên bản tương tự của Github, bạn không cần setup cả một hệ thống hoàn chỉnh từ đầu. Github đã lo cho bạn hết rồi. Bạn chỉ cần đăng ký tài khoản và cấu hình chút ít để sử dụng. Vì mọi lưu trữ mặc định được public hết (nếu muốn private, bạn phải trả phí), hơn nữa mọi lưu trữ nằm trong Github server nên các công ty không sử dụng Github để host code mà thường dựng nguyên một hệ thống tương tự dùng Gitlab. Nhưng github vẫn là nơi không thể chê được cho các dự án cộng đồng và cá nhân.

Thứ Năm, 18 tháng 2, 2016

Thứ Tư, 17 tháng 2, 2016

Não người có hỗ trợ multithreading hay multitasking ?

Trước hết, hai khái niệm này được mượn từ trong lĩnh vực khoa học máy tính áp dụng lên hành vi não người. Bài viết này là kết quả của sự tìm hiểu liệu rằng theo một cách tự nhiên, não người có thích hợp với làm nhiều việc cùng lúc.

Thứ Bảy, 13 tháng 2, 2016

Thám sát closure trong javascript

Trong bài viết này, tôi chỉ đề cập đến khái niệm closure trong javascript. Với các ngôn ngữ khác thì khái niệm này có thể khác nhau.

Thứ Sáu, 5 tháng 2, 2016

Nghịch tmux

Tmux - Một phần mềm nho nhỏ nhưng cực kỳ hữu ích. Lợi ích lớn nhất mà tmux đem lại là cho phép bạn tái truy cập lại một session sau khi kết nối bị mất. Giả sử tình huống như sau: Bạn đang thực hiện một long running action như import file sql có dung lượng lớn, rsync, scp data... Và đột nhiên kết nối ssh bị mất do network nhà bạn gặp trục trặc. Tiến trình import, rsync, scp vẫn hoạt động nhưng bạn không thể thấy nó đang diễn ra như thế nào. Làm cách nào để tái truy cập session đã mất. Tmux chính là thiên thần cứu rỗi bạn trong tình huống đó. Xin bạn chú ý, thiên thần này chỉ giúp bạn nếu bạn nhờ cậy trước khi thực hiện long running action. Nhưng thế cũng là tốt lắm rồi :D

Buffer và cache

Đây là hai khái niệm không mới nhưng lại rất dễ gây nhầm lẫn.

Thu thập thông tin cơ bản về một server

Nếu là một system admin, hẳn bạn đã không ít lần tiếp nhận server. Đó giống như lần đầu đặt chân vào một căn nhà mà bạn chưa từng đặt chân. Một cách tự nhiên và cũng là cần thiết khi bạn tìm hiểu về căn nhà đó. Một căn nhà để ở ngay thì bạn không cần tìm hiểu mà cứ nhảy vô vào dùng thì cũng chẳng sao nhưng với một server thì hành động đó lại có thể xem là liều lĩnh. Một server rốt cục cũng là một phương tiện để chạy application trên đó. Application hoạt động tốt hay không cũng nhờ công lớn sự đáp ứng của hardware bên dưới. Không hiểu các thông số hardware của server sẽ là một thiếu sót lớn. Và mọi hiểu biết đều khởi sự từ các bước chân đầu tiên. Biết cách lấy thông tin về server là bước cơ bản mà mọi người đều đi qua.

Thứ Năm, 4 tháng 2, 2016

Redo log, undo log và binary log

Đây là ba loại log mà bạn đã từng nghe khi tiếp cận mysql. Trong các cơ sở dữ liệu quan hệ (RDBMS) khác, cũng sẽ có các thành phần có vai trò tương tự ba loại log trên. Mỗi loại log lại có những vai trò khác nhau nên được mysql sử dụng trong các tình huống khác nhau.

Vị trí galera config trong mysql galera cluster và mariadb galera cluster

Gần đây khi config một số bản galera cluster khác nhau tôi phát hiện thấy phần config galera có vị trí khác biệt so với các phiên bản hiện tại. Như các bạn biết, với các bản galera cluster, chúng ta thường cấu hình các thông số wsrep trong section [galera]. Nhưng với bản mysql galera cluster 5.6 hay mariadb galera cluster 10.0.12 tôi đã thử qua thì vị trí các config này lại nằm ở một nơi khác

Thứ Tư, 3 tháng 2, 2016

Apply các giá trị max_execution_time, max_input_time và memory_limit trong php.ini

Một số code php thực hiện quá lâu, vượt quá giá trị timeout mặc định hoặc tiêu tốn quá lượng memory mặc định mà php gán cho một script nên tự kết thúc. Thường thì các giá trị timeout, memory này của php phù hợp với đa số với ứng dụng. Nhưng đôi khi một số logic đặc thù cần phải thực hiện trong một khoảng thời gian nhất định vượt quá các giá trị mặc định này. Đó chính là lúc bạn cần thay đổi các giá trị này.

Fix lỗi: I/O error reading the header from the binary log, errno=175, io cache code=0

Tôi gặp lỗi này khi thử add một node vào mariadb galera cluster bản 10.0.12. Lỗi này liên quan đến binlog. Output đầy đủ của lỗi như sau: