图片是模拟两个从节点down是否正常提供服务
访问http://ip:8989端口,登录名admin,密码mariadb
环境说明:
IP地址 | 数据库服务 | 读写分离代理服务 | 负载均衡服务 | 虚拟IP |
192.168.100.213 | MySQL7.x主 | maxscale-2.5.9主 | Keepalived主 | 192.168.100.216 |
192.168.100.214 | MySQL7.x从 | maxscale-2.5.9从 | Keepalived从 | |
192.168.100.215 | MySQL7.x从 |
1、MySQL读写分离集群
本文不在具体描述安装MySQL集群一主两从搭建,主要通过maxscale中间件服务实现MySQL集群读写分离,主从故障自动切换高可用数据库集群。
Maxscale代理MySQL实现读写分离主(写)从(读)故障切换高可用,keepalived负载均衡服务解决maxscale单点故障问题实现高可用。
以下主要说明搭建maxscale-2.5.9高可用读写分离中间件的详细部署为主。
2、Keepalived负载均衡
安装负载均衡服务
yum install keepalived -y
2.1主备配置文件修改
cat /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP #主master备backup
interface ens192
virtual_router_id 61
priority 200
advert_int 1
unicast_src_ip 192.168.100.213
nopreempt
unicast_peer {
192.168.100.214
}
authentication {
auth_type PASS
auth_pass 7893103
}
track_script {
checknginx
}
virtual_ipaddress {
192.168.100.216
}
}
安装比较简单这里不在详细描述
3、Maxscale主备
3.1服务安装:
tar -zxvf maxscale-2.5.9.rhel.7.tar.gz
mv maxscale-2.5.9.rhel.7 maxscale-2.5.9
3.2创建Maxscale监控账号
CREATE USER 'monitor_user'@'%' IDENTIFIED BY 'my_password';
GRANT REPLICATION CLIENT on *.* to 'monitor_user'@'%';
GRANT SUPER, RELOAD on *.* to 'monitor_user'@'%';
3.3通过MySQL主库配置权限
GRANT SELECT ON mysql.user TO 'maxscale'@'%';
GRANT SELECT ON mysql.db TO 'maxscale'@'%';
GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'%';
GRANT SELECT ON mysql.columns_priv TO 'maxscale'@'%';
GRANT SELECT ON mysql.proxies_priv TO 'maxscale'@'%';
GRANT SELECT ON mysql.roles_mapping TO 'maxscale'@'%';
GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%';
flush privileges;
3.4配置文件修改
cat /opt/maxscale-2.5.9/etc/maxscale.cnf
# 全局模块
[maxscale]
# 开启线程个数,默认为1.设置为auto会同cpu核数相同
threads=auto
# timestamp精度
ms_timestamp=1
# 记录info
log_info=0
log_debug=0
log_warning=1
log_notice=1
logdir=/opt/maxscale-2.5.9/var/logs/
piddir=/opt/maxscale-2.5.9/var/logs/
datadir=/opt/maxscale-2.5.9/
cachedir=/opt/maxscale-2.5.9/cache/
# 日志递增
log_augmentation=1
# 打开GUI图形管理页面
admin_host=0.0.0.0
# 不设置HTTPS服务
admin_secure_gui=false
# 主机模块
# 指定服务器的unix socket路径
# 如果 MaxScale 和 MariaDB 在同一台主机上,可以使用这种方法连接
# 注意,socket 与 address/port 冲突,只能选其一。
# 同时需要注意 MariaDB 的权限配置。
#socket=/var/lib/mysql/mysql.sock
[server1]
type=server
address=192.168.100.213
port=3307
protocol=MariaDBBackend
[server2]
type=server
address=192.168.100.214
port=3307
protocol=MariaDBBackend
[server3]
type=server
address=192.168.100.215
port=3307
protocol=MariaDBBackend
# 故障转移监控模块
[MariaDB-Monitor]
type=monitor
# 核心监控模块
module=mariadbmon
servers=server1,server2,server3
user=monitor
password=monitor@123
# 每隔2秒探测一次
monitor_interval=2000
# 打开自动故障转移
auto_failover=true
# 打开自动重新加入
auto_rejoin=true
# slave 全部失效时 master 支撑全部请求
detect_stale_master=true
# 服务模块
# 读写分离,基于statement SQL解析的方式
[Read-Write-Service]
type=service
router=readwritesplit
router_options=master,slave
servers=server1,server2,server3
# 默认禁止root用户访问,设置为1开启
enable_root_user=1
# 路由账号用于读写分离
user=maxscale
password=Maxscalepassword
max_slave_connections=100%
# 当主服务器挂了时,客户端的写入操作将会返回错误,服务器以只读模式运行。
# 如果没有设置此值,那么当客户端执行写入操作时,MaxScale将会直接断开连接。
master_failure_mode=error_on_write
# 配合上一个选项取消只读模式,客户端的写入请求将会被重新处理。
master_reconnection=true
# 默认读是不被路由到master,设置为true允许master用于读取
#master_accept_reads=true
# 设置路由器会话随时使用的最大从站数量
#max_slave_connections=2
#auth_all_servers=true
# 身份验证失败和警告的日志记录,记录那些试图连接到MaxScale和来自哪里
#log_auth_warnings=true
# 强制select走master
#filters=Hint
#允许slave落后master多少秒
#max_slave_replication_lag=3600
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MySQLClient
# 一定要指定!! 默认绑定IPv6
address=192.168.100.216
port=3306
3.5创建相关目录:
mkdir -p /opt/maxscale-2.5.9/var/logs/
mkdir -p /opt/maxscale-2.5.9/cache/
3.6创建用户:
groupadd maxscale
useradd -g maxscale maxscale
3.7修改目录权限
chown -R maxscale.maxscale maxscale-2.5.9/
3.8服务启动:
/opt/maxscale-2.5.9/bin/maxscale --user=maxscale --basedir=/opt/maxscale-2.5.9/ --config=/opt/maxscale-2.5.9/etc/maxscale.cnf