双vip高可用的MySQL集群

项目介绍

本项目旨在构建一个高度可靠、自动化且高性能的MySQL数据库集群系统,通过集成Keepalived的高可用功能和MySQL的半同步复制技术,以及GTID(全局事务标识符)来保证数据的一致性和服务的连续性。该系统不仅支持读写分离以优化性能,还具备自动故障切换能力,确保在任何单点故障发生时都能迅速恢复服务。

项目架构

在这里插入图片描述

项目环境

8台服务器(2G,2核),centos7.8,mysql5.7.30,mysqlrouter8.0.21,keepalived2.0.10,prometheus,ansible,rsync,sersync,sysbench

项目步骤

环境准备

主机 IP地址 描述
ansible 192.168.163.61 中台服务器,管理和监控mysql集群
master 192.168.163.62 mysql集群主服务器
slave-1 192.168.163.63 mysql集群从服务器
slave-2 192.168.163.64 mysql集群从服务器
slave-3 192.168.163.65 mysql集群延迟备份服务器
mysqlrouter-1 192.168.163.66 实现mysql集群读写分离
mysqlrouter-2 192.168.163.67 mysql集群读写分离的备用服务器
test-client 192.168.163.68 sysbench压力测试mysql集群

首先准备上述八台服务器,关闭防火墙和SELinux,仅需开启对外服务器。

Ansible服务器部署

1、安装Ansible

// 安装ansible软件,需要先安装epel源
[root@ansible ~] yum install epel-release -y
[root@ansible ~] yum install ansible -y

2、配置免密登录

// 生成RSA密钥
[root@ansible ~] ssh-keygen

// 上传公钥到需要管理的服务器上
[root@ansible ~] ssh-copy-id -i .ssh/id_rsa.pub root@192.168.163.62

// 验证免密通道是否建立成功
[root@ansible ~] ssh 'root@192.168.163.62'

将ansible服务器与每台服务器都配置免密登录。

3、修改Ansible的主机清单

在ansible的host文件(/etc/ansible/hosts)中添加需要管理的服务器IP地址,没有配置免密登录的服务器则需要指明用户名和密码。需要注意的是,使用密码登录的服务器在使用ansible控制之前要先使用ssh登录一次。

[root@ansible ~] vim /etc/ansible/hosts
# 密码登录示例
# [web]
# 192.168.163.63 ansible_ssh_user='root' ansible_ssh_pass='123456'
# 密钥登录
[db]
192.168.163.62
192.168.163.63
192.168.163.64
192.168.163.65
[slaves]
192.168.163.63
192.168.163.64
192.168.163.65
[mysqlrouter]
192.168.163.66
192.168.163.67

Prometheus部署

Prometheus 是一个开源的监控软件,监控某台主机的cpu、内存、磁盘、网络流量等信息。

1、下载软件包

Prometheus官网下载地址:https://prometheus.io/download/
下载如下软件包到服务器root用户家目录下:

  • node_exporter:安装到被监控服务器上,用于采集通用性能指标。
  • mysql_exporter:安装到被监控服务器上,用于采集mysql的性能指标。
  • prometheus:服务端软件,用于接收exporter采集到的数据
// 将下载好的软件包使用ansible分发到其他服务器上
[root@ansible ~] ansible db -m copy -a "src=/root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz dest=/root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz"
[root@ansible ~] ansible mysqlrouter -m copy -a "src=/root/mysqld_exporter-0.15.1.linux-amd64.tar.gz dest=/root/mysqld_exporter-0.15.1.linux-amd64.tar.gz"

2、二进制安装Prometheus Server

// 解压prometheus server
[root@ansible ~] mkdir /prome
[root@ansible ~] cp prometheus-2.43.0.linux-amd64.tar.gz /prome/
[root@ansible ~] cd /prome
[root@ansible prome] tar xf prometheus-2.43.0.linux-amd64.tar.gz
[root@ansible prome] mv prometheus-2.43.0.linux-amd64 prometheus
[root@ansible prometheus] cd prometheus

// 永久修改PATH变量
[root@ansible prometheus] vim /root/.bashrc
末尾追加:PATH=/prome/prometheus:$PATH

// 后台启动prometheus server
[root@ansible prometheus] nohup prometheus --config.file=/prome/prometheus/prometheus.yml &

3、通过服务管理Prometheus

因为systemctl方式默认不会去管理我们源码二进制安装的程序,因此这里将Prometheus做成一个服务来进行管理,方便之后的操作。

[root@ansible prometheus] vim /usr/lib/systemd/system/prometheus.service
# 添加下面内容
[Unit]
Description=prometheus
[Service]
ExecStart=/prome/prometheus/prometheus --config.file=/prome/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

// 重新加载systemd相关的服务
[root@ansible prometheus] systemctl daemon-reload

// 设置开机启动
[root@ansible prometheus] systemctl enable prometheus

浏览器访问192.168.163.61:9090出现界面,即安装运行成功。

4、安装node_exporter

由于被监控服务器均需要安装node_exporter,通过编写脚本install_node_exporter.sh来实现node_exporter的安装

#!/bin/bash
# 解压,永久修改环境变量
tar xf /root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz  -C /
cd  /
mv node_exporter-1.4.0-rc.0.linux-amd64/ node_exporter
cd /node_exporter/
echo 'PATH=/node_exporter/:$PATH' >>/etc/profile
#生成nodeexporter.service文件
cat >/usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_exporter
[Service]
ExecStart=/node_exporter/node_exporter --web.listen-address 0.0.0.0:9090 
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
#让systemd进程识别node_exporter服务
systemctl daemon-reload
#设置开机启动
systemctl enable node_exporter
#启动node_exporter
systemctl start node_exporter

通过Ansible将安装脚本分发给被监控服务器。

// 传输脚本
[root@ansible prometheus] ansible db -m copy -a "src=install_node_exporter.sh dest=/root"
[root@ansible prometheus] ansible mysqlrouter -m copy -a "src=install_node_exporter.sh dest=/root"

// 执行脚本
[root@ansible prometheus] ansible db -m shell -a "bash /root/install_node_exporter.sh"
[root@ansible prometheus] ansible mysqlrouter -m shell -a "bash /root/install_node_exporter.sh"

5、安装mysqld_exporter

首先在master服务器上mysql程序中创建新的mysql用户

// 在mysql服务器上进行操作
root@(none) mysql> create user 'exporter'@'%' identified by '123456' with MAX_USER_CONNECTIONS 3;
root@(none) mysql> grant process,replication client,select on *.* to 'exporter'@'%';

通过编写脚本install_mysqld_exporter.sh来实现mysqld_exporter的安装:

#!/bin/bash
#解压
tar xf mysqld_exporter-0.15.1.linux-amd64.tar.gz -C /usr/local
cd /usr/local/
mv mysqld_exporter-0.15.1.linux-amd64 mysqld_exporter
cd mysqld_exporter/
#配置mysqld_exporter
cat >.my.cnf <<EOF
[client]
user=exporter
password=123456
EOF
#生成nodeexporter.service文件
cat >/usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=mysqld_exporter
[Service]
Environment=DATA_SOURCE_NAME=exporter:123456@(localhost:3306)/
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf --web.listen-address=:9104
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
#让systemd进程识别node_exporter服务
systemctl daemon-reload
#设置开机启动
systemctl enable mysqld_exporter
#启动node_exporter
systemctl start mysqld_exporter

通过Ansible将安装脚本分发给被监控服务器。

// 传输脚本
[root@ansible prometheus] ansible db -m copy -a "src=install_mysqld_exporter.sh dest=/root"

// 执行脚本
[root@ansible prometheus] ansible db -m shell -a "bash /root/install_mysqld_exporter.sh"

6、添加被监控的服务器

[root@ansible prometheus] vim prometheus.yml
# 找到最后一段,修改成下面这样,注意yml格式缩进
scrape_configs:
  - job_name: "prome
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi,你好啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值