TiDB 单机部署
TiDB 是 PingCAP(平凯星辰)公司设计的开源分布式数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB高度兼容MySQL协议,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP 和 OLAP 场景提供一站式的解决方案。TiDB 适合大数据量接近单机处理的极限、不希望做Sharding、访问模式上没有明显的热点等场景。
准备工作
#.创建专用用户
cat /etc/group | grep tidb || groupadd tidb
cat /etc/passwd | grep tidb || useradd -g tidb -s /bin/bash -m -d /home/tidb tidb
cat /etc/sudoers | grep "^tidb" || echo "tidb ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
echo "Admin_147" | passwd tidb --stdin > /dev/null
#.创建数据目录
global_tidb_port=4000
mkdir -p /data/tidb_${global_tidb_port}/{deploy,data}
chown -R tidb:tidb /data/tidb_${global_tidb_port}
#.配置时区
timedatectl set-timezone Asia/Shanghai
#.配置时间同步
# yum install -y -q ntp ntpdate && /usr/sbin/ntpdate -u ntp.aliyun.com
timedatectl set-ntp true
#.安装基础依赖,其中执行 tiup cluster check 会检查 numactl 是否安装
yum install -y wget net-tools numactl
#.临时关闭iptables
iptables -F
#.关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#.优化ulimit
ulimit -n 1000000
sed -i '/^tidb/d' /etc/security/limits.conf
echo "tidb soft nofile 1000000" >> /etc/security/limits.conf
echo "tidb hard nofile 1000000" >> /etc/security/limits.conf
echo "tidb soft stack 655350" >> /etc/security/limits.conf
echo "tidb hard stack 655350" >> /etc/security/limits.conf
echo "tidb soft core unlimited" >> /etc/security/limits.conf
echo "tidb hard core unlimited" >> /etc/security/limits.conf
cat /etc/security/limits.conf | grep "^tidb"
#.关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
#.临时关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
sed -i '/transparent_hugepage/d' /etc/rc.d/rc.local
echo '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
#.永久关闭透明大页
cp /etc/default/grub /etc/default/grub.$(date +%Y%m%d%H%M%S)
cat /etc/default/grub | grep transparent_hugepage || sed -i 's/rhgb quiet/rhgb quiet transparent_hugepage=never/g' /etc/default/grub
grub2-mkconfig -o /etc/grub2.cfg
#.关闭系统swap
sed -i '/^vm.swappiness/d' /etc/sysctl.conf
echo "vm.swappiness = 0" >> /etc/sysctl.conf
/sbin/sysctl -p /etc/sysctl.conf > /dev/null 2>&1
swapoff -a
#.优化内核参数
sed -i '/^fs.file-max/d' /etc/sysctl.conf
sed -i '/^net.core.somaxconn/d' /etc/sysctl.conf
sed -i '/^net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
sed -i '/^vm.overcommit_memory/d' /etc/sysctl.conf
sed -i '/^vm.min_free_kbytes/d' /etc/sysctl.conf
echo "fs.file-max = 6815744" >> /etc/sysctl.conf
echo "net.core.somaxconn = 32768" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 0" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "vm.min_free_kbytes = 1048576" >> /etc/sysctl.conf
/sbin/sysctl -p /etc/sysctl.conf > /dev/null 2>&1
安装社区版 5.0.1
#.下载文件
cd /opt/
wget -c http://download.pingcap.org/tidb-v5.0.1-linux-amd64.tar.gz
tar zxf tidb-v5.0.1-linux-amd64.tar.gz --directory=/opt/
mv /opt/tidb-v5.0.1-linux-amd64 /opt/tidb
chmod -R 755 /opt/tidb
#.依次启动 pd tikv tidb-server
mkdir -p /data/tidb_4000/{pd,tikv}
/opt/tidb/bin/pd-server --data-dir=/data/tidb_4000/pd --log-file=/data/tidb_4000/pd.log &
/opt/tidb/bin/tikv-server --pd="127.0.0.1:2379" --data-dir=/data/tidb_4000/tikv --log-file=/data/tidb_4000/tikv.log &
/opt/tidb/bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=/data/tidb_4000/tidb.log &
#.安装mysql客户端
sudo yum install -y -q mysql
#.登录测试,默认root密码为空
mysql -h 127.0.0.1 -P 4000 -u root -p
mysql> show databases;
mysql> select tidb_version();
mysql> select user,host from mysql.user;
mysql> alter user 'root'@'%' identified by 'Admin_147';
mysql> flush privileges;
mysql> exit;
#.使用root密码登录
mysql -h 127.0.0.1 -P 4000 -u root -pAdmin_147 -e "select version();"
#.停止服务
ps -ef | grep -v grep | grep tidb | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1
#.启动服务
/opt/tidb/bin/pd-server --data-dir=/data/tidb_4000/pd --log-file=/data/tidb_4000/pd.log &
/opt/tidb/bin/tikv-server --pd="127.0.0.1:2379" --data-dir=/data/tidb_4000/tikv --log-file=/data/tidb_4000/tikv.log &
/opt/tidb/bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=/data/tidb_4000/tidb.log &
利用 tiup cluster 部署单机集群 8.5.2
- 利用 TiUP 工具快速部署 TiDB 单机集群 8.5.2
#.切换到tidb用户
su - tidb
#.在线安装TiUP工具
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
echo 'export PATH=$HOME/.tiup/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
tiup list
#.创建配置文件, 示例本机ip为 192.168.31.101
curl http://iso.sqlfans.cn/tidb/config/topology_single.yaml > /home/tidb/topology.yaml
sed -i "s/node_ip_1/192.168.31.101/" /home/tidb/topology.yaml
sed -i "s/global_tidb_port/4000/" /home/tidb/topology.yaml
sed -i "s/my_ssh_port/22/" /home/tidb/topology.yaml
cat /home/tidb/topology.yaml | grep "host"
#.检查主机参数是否合标准, 密码输入 Admin_147
tiup cluster check /home/tidb/topology.yaml --user tidb -p
#.对异常参数提供修复方式, 权限不足的项请手动修复, 确保所有项 pass
tiup cluster check /home/tidb/topology.yaml --apply --user tidb -p
#.部署集群, 是否继续输入 y
tiup cluster deploy tidb_test v8.5.2 /home/tidb/topology.yaml --user tidb -p
#.启动集群, 保存一下 tidb 服务 root 初始密码
tiup cluster start tidb_test --init
#.检查集群状态
tiup cluster list
tiup cluster display tidb_test
#.设置组件服务随主机自启动
tiup cluster enable tidb_test
#.安装mysql客户端
sudo yum install -y -q mysql
#.登录测试,密码请参考初始化过程的输出内容
mysql -h 127.0.0.1 -P 4000 -u root -p
mysql> select tidb_version();
mysql> select user,host from mysql.user;
mysql> alter user 'root'@'%' identified by 'Admin_147';
mysql> flush privileges;
mysql> exit;
#.使用root密码登录
mysql -h 127.0.0.1 -P 4000 -u root -pAdmin_147 -e "select version();"
利用 tiup playground 部署社区版 8.5.2
- 利用 TiUP 工具快速部署 TiDB 社区版 8.5.2
#.切换到tidb用户
su - tidb
#.在线安装TiUP工具
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
echo 'export PATH=$HOME/.tiup/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
tiup list
#.升级tiup版本,可能需要升级glibc版本
# tiup update --all
tiup update playground
#.启动tidb集群(若不添加 tag 则命令行退出后会清空所有的集群数据)
#.TiDB集群是由多个组件构成的分布式系统,通常至少3个PD节点、3个TiKV节点、2个TiDB节点
#.TiFlash是PingCAP开发的一种分布式列存储引擎,它对聚合计算(带group by的语句)的加速特别明显,能轻松比TiKV+索引的方式快2-10倍
tiup playground v8.5.2 --db 1 --pd 1 --kv 1 --tiflash 1 --host 0.0.0.0 --db.port 4000 --pd.port 2379 --kv.port 20160 --tag mytidb &
#.自动寻找并连接playground在本地启动的TiDB集群
tiup client
#.安装mysql客户端
sudo yum install -y -q mysql
#.登录测试,默认root密码为空
mysql -h 127.0.0.1 -P 4000 -u root -p
mysql> show databases;
mysql> select tidb_version();
mysql> select user,host from mysql.user;
mysql> alter user 'root'@'%' identified by 'Admin_147';
mysql> flush privileges;
mysql> exit;
#.使用root密码登录
mysql -h 127.0.0.1 -P 4000 -u root -pAdmin_147 -e "select version();"
#.杀掉tiup进程
ps -ef | grep -v grep | grep tiup | grep tag | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1
#.启动集群
tiup playground v8.5.2 --db 1 --pd 1 --kv 1 --tiflash 1 --host 0.0.0.0 --db.port 4000 --pd.port 2379 --kv.port 20160 --tag mytidb &
#.扩容集群,示例新增2个TiDB节点(扩容2个到n+2个TiDB节点)
tiup playground scale-out --db 2
#.查看集群状态,获取所有节点的进程ID
tiup playground display
#.缩容节点,删除 display 返回中特定 PID 的节点
tiup playground scale-in --pid <PID>
提升安全配置
修改控制台默认密码
- 登录如下控制台,修改初始密码, 示例本机ip为 192.168.31.101
保护内部端口
- TiDB 的默认安装中存在许多用于组件间通信的特权接口,建议只公开数据库的 4000 和 Grafana 的 9000 端口。
| 组件 |
默认监听端口 |
协议 |
|
组件 |
默认监听端口 |
协议 |
| TiDB |
4000 |
MySQL |
|
TiDB Binlog |
8249 |
HTTP |
| TiDB |
10080 |
HTTP |
|
TMS |
8082 |
HTTP |
| TiKV |
20160 |
Protocol |
|
TEM |
8080 |
HTTP |
| TiKV |
20180 |
HTTP |
|
TEM |
8000 |
HTTP |
| PD |
2379 |
HTTP/Protocol |
|
TEM |
4110 |
HTTP |
| PD |
2380 |
Protocol |
|
TEM |
4111 |
HTTP |
| TiFlash |
3930 |
Protocol |
|
TEM |
4112 |
HTTP |
| TiFlash |
20170 |
Protocol |
|
TEM |
4113 |
HTTP |
| TiFlash |
20292 |
HTTP |
|
TEM |
4124 |
HTTP |
| TiFlash |
8234 |
HTTP |
|
Prometheus |
9090 |
HTTP |
| TiFlow |
8261/8291 |
HTTP |
|
Grafana |
3000 |
HTTP |
| TiFlow |
8262 |
HTTP |
|
AlertManager |
9093 |
HTTP |
| TiFlow |
8300 |
HTTP |
|
AlertManager |
9094 |
Protocol |
| TiDB Lightning |
8289 |
HTTP |
|
Node Exporter |
9100 |
HTTP |
| TiDB Operator |
6060 |
HTTP |
|
Blackbox Exporter |
9115 |
HTTP |
| TiDB Dashboard |
2379 |
HTTP |
|
NG Monitoring |
12020 |
HTTP |
| TiDB Binlog |
8250 |
HTTP |
|
- |
- |
- |
附录