MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Chuẩn bị máy chủ MySQL hoặc MariaDB để sản xuất - Phần thứ nhất

Việc cài đặt và cấu hình máy chủ MySQL sản xuất với các gói và công cụ cần thiết để thực hiện trơn tru các hoạt động về lâu dài là vô cùng quan trọng. Chúng tôi đã thấy nhiều trường hợp việc khắc phục sự cố hoặc điều chỉnh máy chủ sản xuất (đặc biệt là máy chủ không có truy cập internet công cộng) thường gặp khó khăn do thiếu các công cụ cần thiết được cài đặt trên máy chủ để giúp xác định và giải quyết vấn đề.

Trong loạt bài blog gồm hai phần này, chúng tôi sẽ giới thiệu cho bạn 9 mẹo và thủ thuật về cách chuẩn bị một máy chủ MySQL để sử dụng trong sản xuất từ ​​góc độ quản trị viên hệ thống. Tất cả các ví dụ trong bài đăng blog này đều dựa trên thiết lập Bản sao MySQL hai nút, chính-nô lệ của chúng tôi chạy trên CentOS 7.

Cài đặt Gói Cần thiết

Sau khi cài đặt gói máy khách và máy chủ MySQL hoặc MariaDB, chúng ta cần chuẩn bị máy chủ MySQL / MariaDB với tất cả các công cụ cần thiết để đối phó với tất cả các hoạt động quản trị, quản lý và giám sát sắp diễn ra. máy chủ. Nếu bạn đang có kế hoạch khóa máy chủ MySQL trong phiên bản sản xuất, sẽ khó hơn một chút khi cài đặt tất cả chúng theo cách thủ công mà không có kết nối Internet.

Một số gói quan trọng cần được cài đặt trên máy chủ MySQL / MariaDB dành cho Linux:

  • Percona Xtrabackup / MariaDB Backup - Sao lưu vật lý không chặn máy chủ cơ sở dữ liệu.
  • ntp / ntpdate - Đồng bộ hóa thời gian của máy chủ.
  • pv - Theo dõi dữ liệu thông qua một đường dẫn, cũng có thể được sử dụng để điều chỉnh.
  • socat hoặc netcat- Công cụ truyền dữ liệu, tốt để sao lưu trực tuyến.
  • net-tools - Tập hợp các công cụ gỡ lỗi mạng dành cho Linux.
  • bind-utils - Bộ sưu tập các công cụ gỡ lỗi DNS dành cho Linux.
  • sysstat - Một bộ sưu tập các công cụ giám sát hiệu suất dành cho Linux.
  • telnet - Ứng dụng khách Telnet để kiểm tra khả năng tiếp cận dịch vụ.
  • mailx / mailutils - ứng dụng MTA.
  • openssl - Bộ công cụ dành cho các giao thức Bảo mật lớp truyền tải (TLS) và Lớp cổng bảo mật (SSL).
  • giải nén - Công cụ giải nén.
  • htop - Công cụ giám sát máy chủ lưu trữ.
  • innotop - Công cụ giám sát MySQL.
  • vim - Trình soạn thảo văn bản có đánh dấu cú pháp (hoặc bất kỳ trình soạn thảo văn bản ưu tiên nào).
  • python-setuptools - Trình quản lý gói Python.
  • lm_sensors / ipmitool - Để kiểm tra nhiệt độ của thành phần máy chủ. Chỉ máy chủ bằng kim loại trần.

Lưu ý rằng một số gói được đề xuất chỉ có sẵn trong kho lưu trữ gói không phải mặc định như EPEL cho CentOS. Do đó, đối với cài đặt dựa trên YUM:

$ yum install epel-release
$ yum install -y wget ntp pv socat htop innotop vim mailx bind-utils net-tools telnet sysstat openssl python-setuptools lm_sensors ipmitool

Trong khi cài đặt dựa trên APT:

$ apt-get install ntp pv socat htop innotop vim easy_install mailutils bind-utils sysstat net-tools telnet openssl lm_sensors ipmitool

Đối với giao diện dòng lệnh MySQL, chúng ta có thể sử dụng một công cụ khác ngoài ứng dụng dòng lệnh "mysql" tiêu chuẩn như mycli, với tính năng tự động hoàn thành và tô sáng cú pháp. Để cài đặt gói, chúng ta có thể sử dụng pip (trình quản lý gói Python):

$ pip install mycli

Với mycli, người ta có thể giảm vector lỗi do con người gây ra với hình ảnh tốt hơn khi xử lý máy chủ sản xuất, như thể hiện trong ảnh chụp màn hình sau:

Lời nhắc về Shell có ý nghĩa

Phần này thoạt đầu có vẻ không cần thiết, nhưng có lẽ nó sẽ giúp bạn tránh mắc phải những sai lầm ngớ ngẩn trong quá trình sản xuất. Là con người, chúng ta dễ mắc lỗi, đặc biệt là khi chạy các lệnh phá hoại trong thời điểm căng thẳng, chẳng hạn như khi máy chủ sản xuất bị lỗi.

Hãy xem ảnh chụp màn hình sau. Theo mặc định, lời nhắc bash PS1 (dấu nhắc chính) trông khá buồn tẻ:

Lời nhắc PS1 tốt phải cung cấp thông tin rõ ràng để giúp SysAdmins biết rõ hơn về môi trường, máy chủ và đường dẫn hiện tại mà họ đang xử lý. Do đó, một người sẽ cẩn thận hơn và luôn biết liệu nó có ở đúng đường dẫn / máy chủ / người dùng để thực thi lệnh hay không.

Để đạt được điều này, hãy tìm dòng mô tả cấu hình PS1 (dấu nhắc chính), thường có trong / etc / bashrc dòng 41:

  [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[email protected]\h \W]\\$ "

Và thay thế nó bằng dòng này:

  [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[36m\]\u\[\e[m\]@\[\e[32m\]\h\[\e[m\]\[\e[31;47m\]Production\[\e[m\]: \[\e[33m\]\w\[\e[m\]]$ "

Đăng xuất khỏi thiết bị đầu cuối và đăng nhập lại lần nữa. Bạn sẽ thấy một cái gì đó giống như thế này trong thiết bị đầu cuối bây giờ:

Như trong ảnh chụp màn hình ở trên, người dùng hiện tại (màu xanh lam), máy chủ của tên máy chủ (màu xanh lá cây), bậc Sản xuất (màu đỏ đậm với nền trắng), cùng với đường dẫn đầy đủ của thư mục hiện tại (màu vàng) cung cấp bản tóm tắt tốt hơn về phiên hiện tại, nơi thông tin quan trọng có thể dễ dàng phân biệt bằng các màu khác nhau.

Bạn có thể sử dụng công cụ trực tuyến miễn phí này để tùy chỉnh lời nhắc bash của mình, phù hợp với sở thích của bạn.

MOTD

Nếu bạn đang quản lý một cụm cơ sở dữ liệu với nhiều vai trò như sao chép MySQL hoặc MariaDB, bạn sẽ luôn có cảm giác lo lắng khi quản lý trực tiếp một trong các máy chủ vì chúng tôi cần thực hiện thêm các kiểm tra để xác minh rằng nút mà chúng tôi đang sử dụng là nút mà chúng tôi thực sự muốn quản lý. Cấu trúc liên kết sao chép có xu hướng trở nên phức tạp hơn khi cụm cơ sở dữ liệu của bạn mở rộng và có thể có nhiều vai trò trong một cụm như chính trung gian, máy chủ binlog, chủ sao lưu với sao chép bán đồng bộ, nô lệ chỉ đọc và cả máy chủ xác minh dự phòng.

Sẽ tốt hơn nếu chúng ta có thể nhận được một bản tóm tắt về trạng thái cơ sở dữ liệu bất cứ khi nào chúng ta ở trong máy chủ cụ thể đó, chỉ để cung cấp cho chúng ta những gì chúng ta sẽ giải quyết. Chúng tôi có thể sử dụng Thông điệp trong ngày (MOTD) của Linux để tự động hóa hành vi này bất cứ khi nào chúng tôi đăng nhập vào máy chủ. Sử dụng mặc định / etc / motd chỉ tốt cho nội dung tĩnh, đây không phải là điều chúng tôi thực sự muốn nếu chúng tôi muốn báo cáo trạng thái hiện tại của máy chủ MySQL.

Để đạt được kết quả tương tự, chúng tôi có thể sử dụng một tập lệnh Bash đơn giản để tạo ra một đầu ra MOTD có ý nghĩa để tóm tắt máy chủ MySQL / MariaDB của chúng tôi, ví dụ:

$ vim ~/.motd.sh
#!/bin/bash
# Auto-generate MOTD for MySQL/MariaDB Replication
# .motd.sh, to be executed under ~/.bash_profile

#####
# Preferred role of the node, pick one
#PREFER_ROLE='Slave'
PREFER_ROLE='Master'
#####

HOSTNAME=$(hostname)
UPTIME=$(uptime -p)
MYSQL_COMMAND='mysql --connect-timeout=2 -A -Bse'
MYSQL_READONLY=$(${MYSQL_COMMAND} 'SHOW GLOBAL VARIABLES LIKE "read_only"' | awk {'print $2'})
TIER='Production'
MAIN_IP=$(hostname -I | awk {'print $1'})
CHECK_MYSQL_REPLICATION=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Slave_.*_Running: Yes$')
MYSQL_MASTER=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | grep Master_Host | awk {'print $2'})
# The following requires show_compatibility_56=1 for MySQL 5.7 and later
MYSQL_UPTIME=$(${MYSQL_COMMAND} 'SELECT TIME_FORMAT(SEC_TO_TIME(VARIABLE_VALUE ),"%Hh %im")  AS Uptime FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME="Uptime"')

# coloring
bold=$(tput bold)
red=$(tput setaf 1)
green=$(tput setaf 2)
normal=$(tput sgr0)

MYSQL_SHOW=1
if [ $MYSQL_READONLY == 'ON' ]; then
        CURRENT_MYSQL_ROLE='Slave'
        if ${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Slave_.*_Running: Yes$' &>/dev/null ; then
                lag=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Seconds_Behind_Master:' | awk {'print $2'})
                if [ $lag -eq 0 ]; then
                        REPLICATION_STATUS="${green}Healthy  "
                else
                        if [ $lag == 'NULL' ]; then
                                REPLICATION_STATUS=${red}Unhealthy
                        else
                                REPLICATION_STATUS="${red}Lagging ${lag}s"
                        fi
                fi
        else
                REPLICATION_STATUS=${red}Unhealthy
        fi

elif [ $MYSQL_READONLY == 'OFF' ]; then
        CURRENT_MYSQL_ROLE='Master'
        SLAVE_HOSTS=$(${MYSQL_COMMAND} 'SHOW SLAVE HOSTS' | awk {'print $1'})
else
        MYSQL_SHOW=0
fi

if [ $TIER == 'Production' ]; then
        TIER=${green}Production
fi

if [ $PREFER_ROLE == $CURRENT_MYSQL_ROLE ]; then
        MYSQL_ROLE=${green}$CURRENT_MYSQL_ROLE
else
        MYSQL_ROLE=${red}$CURRENT_MYSQL_ROLE
fi

echo
echo "HOST INFO"
echo "========="
echo -e "  Hostname       : ${bold}$HOSTNAME${normal} \t Server Uptime  : ${bold}$UPTIME${normal}"
echo -e "  IP Address       : ${bold}$MAIN_IP${normal} \t Tier           : ${bold}$TIER${normal}"
echo
if [ $MYSQL_SHOW -eq 1 ]; then
        echo "MYSQL STATE"
        echo "==========="
        echo -e "  Current role      : ${bold}$MYSQL_ROLE${normal} \t\t Read-only      : ${bold}$MYSQL_READONLY${normal}"
        echo -e "  Preferred role    : ${bold}$PREFER_ROLE${normal} \t\t DB Uptime      : ${bold}$MYSQL_UPTIME${normal}"
        if [ $CURRENT_MYSQL_ROLE == 'Slave' ]; then
                echo -e "  Replication state : ${bold}$REPLICATION_STATUS${normal} \t Current Master : ${bold}$MYSQL_MASTER${normal}"
        else
                echo -e "  Slave Hosts(s) ID : "
                for i in $SLAVE_HOSTS; do
                        echo -e "      - ${bold}$i${normal} \t"; done
        fi
        echo
fi

Chọn một trong các vai trò MySQL, chính hoặc phụ trên dòng 8 hoặc 9 và lưu tập lệnh. Tập lệnh này yêu cầu tệp tùy chọn MySQL để lưu trữ thông tin đăng nhập của người dùng cơ sở dữ liệu, vì vậy chúng tôi phải tạo nó trước:

$ vim ~/.my.cnf

Và thêm các dòng sau:

[client]
user=root
password='YourRootP4ssw0rd'

Thay thế phần mật khẩu bằng mật khẩu gốc MySQL thực. Sau đó, áp dụng quyền thực thi cho tập lệnh:

$ chmod 755 ~/.motd.sh

Kiểm tra tập lệnh thực thi xem nó có tạo ra kết quả chính xác hay không:

$ ~/.motd.sh

Nếu đầu ra có vẻ tốt (không có lỗi hoặc cảnh báo), hãy thêm tập lệnh vào ~ / .bash_profile để tập lệnh sẽ tự động được tải khi người dùng đăng nhập:

$ whoami
root
$ echo '~/.motd.sh' >> ~/.bash_profile

Đăng nhập lại thiết bị đầu cuối và bạn sẽ thấy thông báo như thế này trên trang chủ:

Khi ở trên nô lệ, bạn sẽ thấy một cái gì đó như sau:

Lưu ý rằng tập lệnh này được viết riêng cho một MySQL / MariaDB đơn giản- sao chép bậc chủ-nô lệ. Bạn có thể phải sửa đổi tập lệnh nếu bạn có thiết lập phức tạp hơn hoặc bạn muốn sử dụng công nghệ phân cụm MySQL khác như Galera Cluster, Group Replication hoặc NDB Cluster. Ý tưởng là truy xuất trạng thái nút cơ sở dữ liệu và thông tin ngay khi chúng tôi đăng nhập để chúng tôi biết trạng thái hiện tại của máy chủ cơ sở dữ liệu mà chúng tôi đang làm việc.

Cảm biến và Nhiệt độ

Phần này thường bị nhiều SysAdmins bỏ qua. Theo dõi nhiệt độ là rất quan trọng vì chúng tôi không muốn có bất ngờ lớn nếu máy chủ hoạt động bất ngờ khi quá nhiệt. Một máy chủ vật lý thường bao gồm hàng trăm bộ phận điện tử được dán với nhau trong một hộp và rất nhạy cảm với sự thay đổi nhiệt độ. Một quạt làm mát bị lỗi có thể làm tăng nhiệt độ CPU lên đến giới hạn cứng của nó, điều này cuối cùng khiến xung nhịp CPU bị giảm xuống và ảnh hưởng đến toàn bộ hiệu suất xử lý dữ liệu.

Chúng ta có thể sử dụng gói cảm biến lm cho mục đích này. Để cài đặt nó, chỉ cần thực hiện:

$ yum install lm-sensors # apt-get install lm-sensors for APT

Sau đó, chạy chương trình phát hiện cảm biến để tự động xác định mô-đun nhân nào bạn cần tải để sử dụng lm_sensors hiệu quả nhất:

$ sensors-detect

Trả lời tất cả các câu hỏi (thường chỉ chấp nhận tất cả các câu trả lời gợi ý). Một số máy chủ như máy ảo hoặc vùng chứa không hỗ trợ mô-đun này. Cảm biến thực sự cần phải ở cấp độ máy chủ (trần kim loại). Kiểm tra danh sách này để biết thêm thông tin.

Sau đó, chạy lệnh cảm biến:

$ sensors
i350bb-pci-0203
Adapter: PCI adapter
loc1:         +53.0°C (high = +120.0°C, crit = +110.0°C)

power_meter-acpi-0
Adapter: ACPI interface
power1:        4.29 MW (interval =   1.00 s)

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +55.0°C (high = +85.0°C, crit = +95.0°C)
Core 0:        +45.0°C (high = +85.0°C, crit = +95.0°C)
Core 1:        +51.0°C (high = +85.0°C, crit = +95.0°C)
Core 2:        +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 3:        +51.0°C (high = +85.0°C, crit = +95.0°C)
Core 4:        +49.0°C (high = +85.0°C, crit = +95.0°C)
Core 5:        +48.0°C (high = +85.0°C, crit = +95.0°C)
Core 8:        +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 9:        +49.0°C (high = +85.0°C, crit = +95.0°C)
Core 10:       +48.0°C (high = +85.0°C, crit = +95.0°C)
Core 11:       +48.0°C (high = +85.0°C, crit = +95.0°C)
Core 12:       +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 13:       +49.0°C (high = +85.0°C, crit = +95.0°C)

coretemp-isa-0001
Adapter: ISA adapter
Package id 1:  +53.0°C (high = +85.0°C, crit = +95.0°C)
Core 0:        +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 1:        +48.0°C (high = +85.0°C, crit = +95.0°C)
Core 2:        +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 3:        +45.0°C (high = +85.0°C, crit = +95.0°C)
Core 4:        +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 5:        +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 8:        +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 9:        +45.0°C (high = +85.0°C, crit = +95.0°C)
Core 10:       +45.0°C (high = +85.0°C, crit = +95.0°C)
Core 11:       +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 12:       +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 13:       +46.0°C (high = +85.0°C, crit = +95.0°C)

Kết quả trên cho thấy nhiệt độ tổng thể của CPU, cùng với mọi lõi CPU của nó. Một công cụ khác mà chúng ta có thể sử dụng để xem trạng thái tổng thể của các thành phần máy chủ là ipmitool. Để cài đặt, chỉ cần thực hiện:

$ yum -y install ipmitool

Bằng cách chạy lệnh sau, chúng ta có thể cho biết trạng thái tổng thể của các thành phần vật lý trong máy chủ:

$ ipmitool sdr list full
Inlet_Temp       | 20 degrees C   | ok
PCIe_Inlet_Temp  | 37 degrees C   | ok
Outlet_Temp      | 20 degrees C   | ok
CPU0_VR_Temp     | 39 degrees C   | ok
CPU1_VR_Temp     | 41 degrees C   | ok
CPU0_Temp        | 55 degrees C   | ok
CPU1_Temp        | 52 degrees C   | ok
PCH_Temp         | 58 degrees C   | ok
DIMMG0_Temp      | 35 degrees C   | ok
DIMMG1_Temp      | 32 degrees C   | ok
PSU0_Temp        | 0 degrees C    | ok
PSU1_Temp        | 0 degrees C    | ok
SYS_3.3V         | 3.30 Volts     | ok
SYS_5V           | 5 Volts        | ok
SYS_12V          | 12.10 Volts    | ok
CPU0_VCORE       | 1.79 Volts     | ok
CPU1_VCORE       | 1.79 Volts     | ok
CPU0_DDR_VDD     | 1.23 Volts     | ok
CPU1_DDR_VDD     | 1.23 Volts     | ok
SYS_FAN1_Speed   | 4018 RPM   | ok
SYS_FAN2_Speed   | 4116 RPM   | ok
SYS_FAN3_Speed   | 4116 RPM   | ok
SYS_FAN4_Speed   | 4116 RPM   | ok
SYS_FAN5_Speed   | 4018 RPM   | ok
SYS_FAN6_Speed   | 4116 RPM   | ok
SYS_FAN7_Speed   | 4018 RPM   | ok
SYS_FAN8_Speed   | 4116 RPM   | ok
SYS_FAN9_Speed   | 4018 RPM   | ok
SYS_FAN10_Speed  | 4116 RPM   | ok
SYS_FAN11_Speed  | 4116 RPM   | ok
SYS_FAN12_Speed  | 4116 RPM   | ok
SYS_FAN13_Speed  | 4116 RPM   | ok
SYS_FAN14_Speed  | 4214 RPM   | ok
Airflow_rate     | 16 CFM     | ok
PSU1_PIN         | 0 Watts    | ok
PSU2_PIN         | 0 Watts    | ok
PSU1_POUT        | 0 Watts    | ok
PSU2_POUT        | 0 Watts    | ok
PSU1_IIN         | 0 Amps     | ok
PSU2_IIN         | 0 Amps     | ok
PSU1_VIN         | 0 Volts    | ok
PSU2_VIN         | 0 Volts    | ok
CPU_Power        | 63 Watts   | ok
MEM_Power        | 8 Watts    | ok
Total_Power      | 0 Watts    | ok
BP_Power         | 8 Watts    | ok
FAN_Power        | 6 Watts    | ok
MB_Power         | 0 Watts    | ok

Danh sách dài nhưng dễ hiểu và bạn có thể giám sát trạng thái tổng thể của các thành phần máy chủ. Có thể có trường hợp một số quạt không chạy ở tốc độ tối đa, sau đó làm tăng nhiệt độ CPU. Có thể cần thay thế phần cứng để khắc phục sự cố.

Lưu ý rằng mô-đun nhân Giao diện Quản lý Nền tảng Thông minh (IPMI) yêu cầu phải bật Bộ điều khiển Quản lý Nền tảng (BMC) trên bo mạch chủ. Sử dụng dmesg để xác minh xem nó có sẵn không:

$ dmesg | grep -i bmc
[    8.063470] ipmi_si IPI0001:00: Found new BMC (man_id: 0x000000, prod_id: 0x02f3, dev_id: 0x20)

Nếu không, hãy kiểm tra cài đặt BIOS của máy chủ nếu bộ điều khiển này bị tắt.

Đó là nó cho bây giờ. Phần hai của loạt bài blog này sẽ bao gồm 5 chủ đề còn lại như cấu hình công cụ sao lưu, kiểm tra căng thẳng và khóa máy chủ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chạy MariaDB trong thiết lập đám mây kết hợp

  2. Cách SPACE () hoạt động trong MariaDB

  3. Cách TIME_TO_SEC () hoạt động trong MariaDB

  4. Cách FIND_IN_SET () hoạt động trong MariaDB

  5. Cách HEX () hoạt động trong MariaDB