拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Ansible‑playbook 部署 TiDB + Zabbix 监控

初始配置五台rocky9.6虚拟机主机IP 地址核心角色部署服务server1192.168.164.181管控节点Ansible、TiUP 运维工具server2192.168.164.182综合业务节点Zabbix Server MariaDB Nginx、TiDB PD、TiDB Server、TiKV、Prometheus、Grafana、Alertmanagerserver3192.168.164.183存储节点TiKV 分布式存储server4192.168.164.184存储节点TiKV 分布式存储server5192.168.164.185存储节点TiKV 分布式存储注意server2 承载服务较多建议虚拟机内存不低于 4GB否则容易出现 TiDB 启动超时创建项目目录与主机清单server1mkdir -p /root/ansible-deploycd /root/ansible-deployvim inventory.ini[all]server1server2server3server4server5[zabbix_server]server2[pd_servers]server2[tidb_servers]server2[tikv_servers]server2server3server4server5[all:vars]ansible_userroot ansible_ssh_private_key_file/root/.ssh/id_ed25519配置免密ssh-keygen -t ed25519 -N -f ~/.ssh/id_ed25519for i in {1..5}; do ssh-copy-id rootserver$i; donePlaybook 1全节点基础环境初始化base-init.ymlvim base-init.yml---- name: 全节点基础环境初始化hosts: allgather_facts: yestasks:- name: 临时关闭SELinux即时生效command: setenforce 0register: selinux_setchanged_when: selinux_set.rc 0failed_when: false- name: 永久禁用SELinux配置文件lineinfile:path: /etc/selinux/configregexp: ^SELINUXline: SELINUXdisabledbackup: yes- name: 停止并禁用firewalldsystemd:name: firewalldstate: stoppedenabled: no- name: 安装基础依赖与TiDB运行必需包dnf:name:- vim- wget- curl- chrony- python3-PyMySQL- net-tools- tar- gzip- libaio- numactl- sysstatstate: present- name: 启动chrony时间同步服务systemd:name: chronydstate: startedenabled: yesansible-playbook -i inventory.ini base-init.ymlPlaybook 2Zabbix Server 6.0 自动化部署zabbix-server.yml全自动在 server2 上部署 MariaDB Zabbix Server Nginx 前端cat zabbix-server.yml---- name: 部署Zabbix Server 6.0 LTShosts: zabbix_servergather_facts: yesvars:mysql_root_password: Zabbix123zabbix_db_password: Zabbix123zabbix_version: 6.0tasks:- name: 安装MariaDB数据库dnf:name: mariadb-serverstate: present- name: 启动并启用MariaDBsystemd:name: mariadbstate: startedenabled: yes- name: 检测MariaDB root是否已设置密码shell: mysql -u root -e select 1; /dev/null echo 0 || echo 1register: root_no_passwordchanged_when: false- name: 设置MariaDB root密码未设置时执行shell: mysqladmin -u root password {{ mysql_root_password }}when: root_no_password.stdout 0- name: 删除匿名用户shell: |mysql -u root -p{{ mysql_root_password }} -e DELETE FROM mysql.user WHERE User;FLUSH PRIVILEGES;changed_when: false- name: 创建Zabbix数据库shell: |mysql -u root -p{{ mysql_root_password }} -e CREATE DATABASE IF NOT EXISTS zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;changed_when: false- name: 创建Zabbix数据库用户并授权shell: |mysql -u root -p{{ mysql_root_password }} -e CREATE USER IF NOT EXISTS zabbixlocalhost IDENTIFIED BY {{ zabbix_db_password }};GRANT ALL PRIVILEGES ON zabbix.* TO zabbixlocalhost;FLUSH PRIVILEGES;changed_when: false- name: 导入Zabbix官方YUM源yum:name: https://repo.zabbix.com/zabbix/{{ zabbix_version }}/rhel/9/x86_64/zabbix-release-{{ zabbix_version }}-4.el9.noarch.rpmstate: presentdisable_gpg_check: yes- name: 清理YUM缓存command: dnf clean allchanged_when: false- name: 安装Zabbix全套组件dnf:name:- zabbix-server-mysql- zabbix-web-mysql- zabbix-nginx-conf- zabbix-sql-scripts- zabbix-selinux-policy- zabbix-agentstate: present- name: 检查Zabbix数据表是否已导入shell: mysql -uzabbix -p{{ zabbix_db_password }} zabbix -e show tables; | wc -lregister: zabbix_table_countchanged_when: false- name: 导入Zabbix初始数据库结构shell: zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-setutf8mb4 -uzabbix -p{{ zabbix_db_password }} zabbixwhen: zabbix_table_count.stdout|int 10notify: restart zabbix-server- name: 配置Zabbix Server数据库密码lineinfile:path: /etc/zabbix/zabbix_server.confregexp: ^# DBPasswordline: DBPassword{{ zabbix_db_password }}- name: 移除Nginx默认站点避免80端口冲突file:path: /etc/nginx/conf.d/default.confstate: absent- name: 覆盖生成正确的Zabbix Nginx配置copy:dest: /etc/nginx/conf.d/zabbix.confcontent: |server {listen 80;server_name server2;root /usr/share/zabbix;index index.php;location /favicon.ico {log_not_found off;}location / {try_files $uri $uri/ 404;}location /assets {access_log off;expires 30d;}location ~ /\.ht {deny all;}location ~ /(api\/|conf[^\.]|include|locale) {deny all;return 404;}location ~ [^/]\.php(/|$) {fastcgi_pass unix:/run/php-fpm/zabbix.sock;fastcgi_split_path_info ^(.\.php)(/.)$;fastcgi_index index.php;include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}}backup: yes- name: 启动前校验Nginx配置语法command: nginx -tregister: nginx_config_checkchanged_when: falsefailed_when: nginx_config_check.rc ! 0- name: 启动并启用所有Zabbix相关服务systemd:name: {{ item }}state: startedenabled: yesloop:- zabbix-server- zabbix-agent- nginx- php-fpmhandlers:- name: restart zabbix-serversystemd:name: zabbix-serverstate: restartedansible-playbook -i inventory.ini zabbix-server.yml浏览器访问http://192.168.164.182默认账号Admin密码zabbixPlaybook 3TiDB 集群自动化部署tidb-cluster.yml在 server1 上安装 TiUP 运维工具并通过 TiUP 自动分发部署 TiDB 集群PD TiDB 4 节点 TiKVvim tidb-cluster.yml[rootserver1 ansible-deploy]# cat tidb-cluster.yml---- name: 安装TiUP并部署TiDB集群hosts: server1gather_facts: novars:tidb_version: v7.5.0cluster_name: tidb-clusterdeploy_user: rootssh_key_path: /root/.ssh/id_ed25519tasks:- name: 安装TiUP运行所需基础依赖dnf:name:- tar- gzip- curl- net-toolsstate: present- name: 检查TiUP是否已安装stat:path: /root/.tiup/bin/tiupregister: tiup_bin- name: 安装TiUP工具shell: curl --proto https --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | shwhen: not tiup_bin.stat.exists- name: 生成TiDB集群拓扑文件copy:dest: /root/ansible-deploy/tidb-topology.yamlcontent: |global:user: tidbssh_port: 22deploy_dir: /tidb-deploydata_dir: /tidb-dataos: linuxpd_servers:- host: server2tidb_servers:- host: server2tikv_servers:- host: server2- host: server3- host: server4- host: server5monitoring_servers:- host: server2grafana_servers:- host: server2alertmanager_servers:- host: server2- name: 集群环境预检并自动修复shell: |export PATH/root/.tiup/bin:$PATHtiup cluster check ./tidb-topology.yaml --user {{ deploy_user }} -i {{ ssh_key_path }} --applyargs:chdir: /root/ansible-deployregister: tiup_checkchanged_when: Fixed in tiup_check.stdout- name: 检查集群是否已部署shell: |export PATH/root/.tiup/bin:$PATHtiup cluster list | grep {{ cluster_name }} | wc -lregister: cluster_existchanged_when: false- name: 部署TiDB集群shell: |export PATH/root/.tiup/bin:$PATHecho y | tiup cluster deploy {{ cluster_name }} {{ tidb_version }} ./tidb-topology.yaml --user {{ deploy_user }} -i {{ ssh_key_path }}args:chdir: /root/ansible-deploywhen: cluster_exist.stdout|int 0register: deploy_resultasync: 1800poll: 30- name: 启动TiDB集群shell: |export PATH/root/.tiup/bin:$PATHtiup cluster start {{ cluster_name }}register: start_resultchanged_when: Started successfully in start_result.stdout- name: 获取集群运行状态shell: |export PATH/root/.tiup/bin:$PATHtiup cluster display {{ cluster_name }}register: cluster_statuschanged_when: false- name: 打印集群状态debug:msg: {{ cluster_status.stdout_lines }}ansible-playbook -i inventory.ini tidb-cluster.ymlTiUP 会自动在所有节点完成软件分发、用户创建与服务初始化部署验证命令行验证验证 Zabbix 服务状态ansible server2 -i inventory.ini -m shell -a systemctl is-active zabbix-server nginx php-fpm mariadb全部返回active即为正常验证 TiDB 集群状态export PATH/root/.tiup/bin:$PATHtiup cluster display tidb-cluster所有组件状态均为Up即为集群正常验证 TiDB 数据库连通性安装客户端首次验证前执行 dnf install -y mariadb连接测试 mysql -h server2 -P 4000 -u root -e SELECT version();Web 管理 / 监控入口验证Zabbix 监控平台访问地址http://192.168.164.162默认账号Admin默认密码zabbixTiDB Dashboard 集群管理面板访问地址http://192.168.164.182:2376/dashboard登录账号登录密码空Grafana 集群性能监控面板访问地址http://192.168.164.182:3000默认账号admin默认密码admin左侧导航栏的 Dashboards选中Manager找到并进入 TiDB 文件夹打开 TiDB-Overview 面板查看集群总览仪表盘
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门