Skip to content

TDSQL 环境初始化

系统环境准备

操作系统选择

TDSQL支持多种Linux操作系统,建议选择以下稳定版本:

操作系统版本要求
CentOS7.6-7.9
Red Hat Enterprise Linux7.6-7.9
Ubuntu Server18.04 LTS, 20.04 LTS
Debian10, 11

系统更新

在安装TDSQL之前,建议先将系统更新到最新版本,以获取最新的安全补丁和系统优化:

bash
# CentOS/RHEL系统更新命令
sudo yum update -y

# Ubuntu/Debian系统更新命令
sudo apt update -y
sudo apt upgrade -y

系统时区配置

确保所有节点使用统一的时区,建议使用东八区(Asia/Shanghai),并启用NTP时间同步,保证节点间时间一致性:

bash
# 查看当前系统时区
date +"%Z %z"

# 设置时区为东八区
sudo timedatectl set-timezone Asia/Shanghai

# 启用NTP时间同步
sudo timedatectl set-ntp yes

# 验证时间同步状态
timedatectl status

关闭不必要的服务

关闭不必要的系统服务,可提高系统资源利用率和安全性:

bash
# 关闭防火墙(生产环境建议配置规则,而非直接关闭)
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 关闭SELinux
# 临时禁用SELinux
sudo setenforce 0
# 永久禁用SELinux,修改配置文件
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 关闭IPv6(如不需要IPv6支持)
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf
sudo echo "net.ipv6.conf.default.disable_ipv6=1" >> /etc/sysctl.conf

硬件资源配置

CPU配置

根据TDSQL节点角色,配置足够的CPU资源:

节点角色最低配置推荐配置
主节点8核16线程16核32线程
从节点8核16线程16核32线程
监控节点4核8线程8核16线程
管理节点4核8线程8核16线程

内存配置

为不同角色的节点配置足够的内存资源:

节点角色最低配置推荐配置
主节点32GB64GB
从节点32GB64GB
监控节点16GB32GB
管理节点16GB32GB

存储配置

磁盘分区

建议使用独立的磁盘或分区存储TDSQL数据和日志,以提高性能和数据安全性:

bash
# 查看系统磁盘列表
sudo fdisk -l

# 分区操作(以/dev/sdb为例)
sudo fdisk /dev/sdb
# 输入n创建新分区,p创建主分区,1创建第一个分区,回车使用默认大小,w保存并退出

# 格式化分区为XFS文件系统
sudo mkfs.xfs /dev/sdb1

# 创建挂载点
sudo mkdir -p /home/tdsql/data

# 添加到/etc/fstab实现开机自动挂载
sudo echo "/dev/sdb1 /home/tdsql/data xfs defaults 0 0" >> /etc/fstab

# 挂载分区
sudo mount -a

存储性能优化

优化存储性能,提高TDSQL运行效率:

bash
# 调整磁盘调度算法(SSD使用deadline,HDD使用cfq)
sudo echo "deadline" > /sys/block/sdb/queue/scheduler

# 永久设置调度算法
sudo echo "ACTION==\"add|change\", KERNEL==\"sd*\", ATTR{queue/scheduler}="deadline"" > /etc/udev/rules.d/60-scheduler.rules

# 关闭磁盘访问时间记录
sudo mount -o remount,noatime /home/tdsql/data

# 永久关闭访问时间记录,修改/etc/fstab
sudo sed -i 's/defaults/defaults,noatime/g' /etc/fstab

内核参数优化

网络参数优化

优化网络参数,提高TDSQL网络性能:

bash
# 创建网络参数配置文件
cat > /etc/sysctl.d/tdsql-network.conf << EOF
# 提高TCP连接队列长度
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# 减少TCP连接关闭延迟
net.ipv4.tcp_fin_timeout = 30

# 启用TCP连接复用和回收
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0

# 优化TCP keepalive参数
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15

# 提高TCP缓冲区大小
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

# 启用TCP快速打开
net.ipv4.tcp_fastopen = 3

# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# 禁用发送ICMP重定向
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
EOF

# 应用网络参数
sudo sysctl -p /etc/sysctl.d/tdsql-network.conf

文件系统参数优化

优化文件系统参数,提高IO性能:

bash
# 创建文件系统参数配置文件
cat > /etc/sysctl.d/tdsql-fs.conf << EOF
# 提高文件句柄限制
fs.file-max = 655350

# 提高inode缓存
fs.inode-max = 1000000

# 优化脏页回写参数
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000

# 减少swap使用
vm.swappiness = 1

# 提高内存映射限制
vm.max_map_count = 262144
EOF

# 应用文件系统参数
sudo sysctl -p /etc/sysctl.d/tdsql-fs.conf

用户和权限配置

创建TDSQL用户

创建专门的用户用于运行TDSQL,提高系统安全性:

bash
# 创建tdsql用户
sudo useradd -m -d /home/tdsql -s /bin/bash tdsql

# 设置用户密码
sudo passwd tdsql

# 添加到sudo组(可选,便于管理)
sudo usermod -aG wheel tdsql

目录权限配置

配置TDSQL相关目录的权限:

bash
# 创建必要的目录
sudo mkdir -p /home/tdsql/data /home/tdsql/logs /home/tdsql/conf /home/tdsql/backup

# 设置目录所有者和权限
sudo chown -R tdsql:tdsql /home/tdsql
sudo chmod -R 750 /home/tdsql

文件描述符限制

提高TDSQL用户的文件描述符限制:

bash
# 创建文件描述符限制配置文件
cat > /etc/security/limits.d/tdsql.conf << EOF
# TDSQL用户文件描述符限制
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

# TDSQL进程限制
tdsql soft memlock unlimited
tdsql hard memlock unlimited
tdsql soft stack 8192
tdsql hard stack 16384
EOF

依赖安装

基础依赖

安装TDSQL运行所需的基础依赖:

bash
# CentOS/RHEL系统安装命令
sudo yum install -y gcc gcc-c++ make cmake autoconf automake libtool libmysqlclient-devel libpq-devel openssl-devel zlib-devel python3 python3-pip python3-devel

# Ubuntu/Debian系统安装命令
sudo apt install -y build-essential cmake autoconf automake libtool libmysqlclient-dev libpq-dev libssl-dev zlib1g-dev python3 python3-pip python3-dev

Python依赖

安装TDSQL管理工具所需的Python依赖:

bash
# 升级pip工具
sudo pip3 install --upgrade pip

# 安装所需依赖包
sudo pip3 install pymysql psycopg2-binary redis requests prometheus-client

监控依赖

安装TDSQL监控所需的依赖:

bash
# 下载并安装Node Exporter(用于监控系统资源)
download_url=https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz
sudo wget $download_url -O /tmp/node_exporter.tar.gz
sudo tar -zxvf /tmp/node_exporter.tar.gz -C /opt
sudo mv /opt/node_exporter-1.2.2.linux-amd64 /opt/node_exporter

# 创建systemd服务文件
cat > /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node Exporter
After=network.target

[Service]
Type=simple
User=tdsql
ExecStart=/opt/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 启动并启用Node Exporter服务
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

网络配置

主机名配置

配置节点主机名,便于管理和识别:

bash
# 设置主机名(以tdsql-master为例)
sudo hostnamectl set-hostname tdsql-master

# 更新/etc/hosts文件,添加所有节点的主机名和IP映射
sudo cat >> /etc/hosts << EOF
10.0.0.10 tdsql-master
10.0.0.11 tdsql-slave1
10.0.0.12 tdsql-slave2
10.0.0.13 tdsql-monitor
EOF

SSH免密登录

配置节点间SSH免密登录,便于管理和自动化操作:

bash
# 在所有节点上执行以下命令,生成SSH密钥对
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

# 将公钥复制到所有节点,实现免密登录
for host in tdsql-master tdsql-slave1 tdsql-slave2 tdsql-monitor;
do
  ssh-copy-id -i ~/.ssh/id_rsa.pub $host;
done

端口配置

确保TDSQL所需的端口已开放:

端口用途
3306数据库服务端口
33060监控和管理端口
9100Node Exporter端口
9104MySQL Exporter端口
22SSH管理端口
bash
# 如果防火墙开启,需要开放相关端口
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --permanent --add-port=33060/tcp
sudo firewall-cmd --permanent --add-port=9100/tcp
sudo firewall-cmd --permanent --add-port=9104/tcp
sudo firewall-cmd --reload

环境验证

系统资源验证

验证系统资源是否满足TDSQL运行要求:

bash
# 查看CPU信息
lscpu | grep -E 'Model name|CPU\(s\)'

# 查看内存信息
free -h

# 查看磁盘信息
df -h

# 查看磁盘IO性能
iostat -dx 1 3

# 查看网络性能
ethtool eth0 | grep -E 'Speed|Duplex'

依赖验证

验证所需依赖是否已正确安装:

bash
# 验证Python版本
python3 --version

# 验证GCC版本
gcc --version

# 验证CMake版本
cmake --version

# 验证OpenSSL版本
openssl version

网络连通性验证

验证节点间网络连通性:

bash
# 测试节点间ping连通性
ping -c 3 tdsql-slave1

# 测试端口连通性
telnet tdsql-master 3306

# 或使用nc命令测试端口连通性
nc -zv tdsql-master 3306

初始化脚本

创建初始化脚本,便于快速部署多个节点:

bash
cat > tdsql_env_init.sh << EOF
#!/bin/bash

# 系统更新
yum update -y

# 安装基础依赖
yum install -y gcc gcc-c++ make cmake autoconf automake libtool libmysqlclient-devel libpq-devel openssl-devel zlib-devel python3 python3-pip python3-devel

# 创建tdsql用户
useradd -m -d /home/tdsql -s /bin/bash tdsql
echo "tdsql:tdsql@123" | chpasswd
usermod -aG wheel tdsql

# 创建目录
mkdir -p /home/tdsql/data /home/tdsql/logs /home/tdsql/conf /home/tdsql/backup
chown -R tdsql:tdsql /home/tdsql
chmod -R 750 /home/tdsql

# 配置文件描述符限制
cat > /etc/security/limits.d/tdsql.conf << LIMITS
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
tdsql soft memlock unlimited
tdsql hard memlock unlimited
LIMITS

# 配置内核参数
cat > /etc/sysctl.d/tdsql.conf << SYSCTL
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
fs.file-max = 655350
vm.swappiness = 1
vm.max_map_count = 262144
SYSCTL

sysctl -p /etc/sysctl.d/tdsql.conf

echo "TDSQL环境初始化完成!"
EOF

# 添加执行权限
chmod +x tdsql_env_init.sh

常见问题(FAQ)

Q1: 如何查看系统内核版本?

A1: 使用以下命令查看系统内核版本:

bash
uname -r

Q2: 如何检查磁盘IO性能?

A2: 可以使用iostat、fio或dd命令测试磁盘IO性能:

bash
# 使用iostat查看实时IO状态
iostat -dx 1

# 使用fio进行IO性能测试
fio --name=randwrite --ioengine=libaio --direct=1 --rw=randwrite --bs=4k --size=1G --numjobs=4 --runtime=60 --group_reporting

# 使用dd命令进行简单测试
dd if=/dev/zero of=/home/tdsql/test bs=4k count=100000 oflag=direct

Q3: 如何检查网络带宽?

A3: 可以使用iperf3工具测试网络带宽:

bash
# 在一台节点上启动服务器
iperf3 -s

# 在另一台节点上测试
iperf3 -c tdsql-master

Q4: 如何解决"Permission denied"错误?

A4: 检查文件或目录的所有者和权限,确保TDSQL用户有足够的权限访问:

bash
# 查看文件权限
ls -l /home/tdsql/data

# 修改所有者和权限
chown -R tdsql:tdsql /home/tdsql
chmod -R 750 /home/tdsql

Q5: 如何优化系统启动时间?

A5: 关闭不必要的系统服务,提高系统启动速度:

bash
# 查看开机启动的服务
systemctl list-unit-files --type=service --state=enabled

# 禁用不必要的服务
systemctl disable postfix NetworkManager-wait-online.service

Q6: 如何设置系统定时任务?

A6: 使用crontab设置定时任务,用于备份、监控等:

bash
# 编辑tdsql用户的crontab
crontab -u tdsql -e

# 添加定时任务(每天凌晨2点执行备份)
0 2 * * * /home/tdsql/scripts/backup.sh

Q7: 如何检查系统负载?

A7: 使用top、htop或uptime命令查看系统负载:

bash
# 查看系统负载
top

# 或使用uptime
uptime

Q8: 如何查看系统日志?

A8: 使用journalctl或查看/var/log目录下的日志文件:

bash
# 查看系统日志
journalctl -n 100

# 查看安全日志
cat /var/log/secure

# 查看messages日志
cat /var/log/messages

Q9: 如何关闭透明大页?

A9: 关闭透明大页,提高TDSQL性能:

bash
# 临时关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 永久关闭透明大页,添加到/etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

Q10: 如何验证时钟同步?

A10: 使用ntpq或chronyc命令验证时钟同步:

bash
# 使用ntpq查看时钟同步状态
ntpq -p

# 使用chronyc查看时钟同步源
chronyc sources

最佳实践

  1. 使用标准化配置:所有节点使用相同的系统版本、内核参数和配置,便于管理和维护
  2. 定期更新系统:定期更新系统和依赖包,修复安全漏洞
  3. 监控系统资源:部署监控系统,实时监控CPU、内存、IO和网络性能
  4. 使用自动化工具:使用Ansible、Terraform等自动化工具管理节点,提高部署效率
  5. 文档化配置:记录所有配置变更,便于追踪和回滚
  6. 测试环境验证:在测试环境验证配置变更,确保不影响生产环境
  7. 遵循最小权限原则:只授予TDSQL用户必要的权限,提高系统安全性
  8. 备份重要配置:定期备份/etc/fstab、/etc/sysctl.conf等重要配置文件
  9. 使用日志管理工具:使用ELK、Graylog等工具集中管理系统日志,便于分析和故障排查
  10. 定期性能评估:定期评估系统性能,及时调整配置,优化TDSQL运行效率