maxscale|mariadb故障转移

注意:mysql不可以使用基于gtid进行复制的高可用功能,因为mysql和mariadb的gtid格式不同

环境

【实验系统为ubuntu 22.04】

主机IP角色系统
192.168.1.101主服务器【初始状态】ubuntu22.04
192.168.1.102从服务器【初始状态】ubuntu22.04
192.168.1.103从服务器【初始状态】ubuntu22.04
192.168.1.104maxscale服务器ubuntu22.04

主服务器配置

vim /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
log_bin=mysql-bin
server-id=1
bind-address=0.0.0.0
binlog_format=mixed
sync_binlog=1
gtid_strict_mode=1
relay_log=mysql-relay-bin
replicate-do-db=employees

重启服务器

systemctl restart mysql

创建监控用户

mysql -u root -p
CREATE USER 'maxscale_mon'@'192.168.1.%' IDENTIFIED BY 'wakamizu';
GRANT REPLICATION SLAVE, REPLICATION CLIENT, SLAVE MONITOR, REPLICATION SLAVE ADMIN, RELOAD , READ_ONLY ADMIN , BINLOG ADMIN ON *.* TO 'maxscale_mon'@'192.168.1.%';

创建路由用户

主服务器执行

CREATE USER 'maxscale'@'%' IDENTIFIED BY 'wakamizu';
#赋予maxscale查看数据库相关信息,如表权限等
GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%';
GRANT SELECT ON mysql.* TO 'maxscale'@'%';
#授予测试数据库所有权限,按需授予
GRANT ALL PRIVILEGES ON employees.* TO 'maxscale'@'%';

从服务器配置

vim /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
server-id=2
#第三配置为server-id=3
bind-address=0.0.0.0
log_bin=mysql-bin
relay_log=mysql-relay-bin
replicate-do-db=employees
gtid_strict_mode=1
log_slave_updates=1

重启服务器

systemctl restart mysql

创建集群监控用户

mysql -u root -p
CREATE USER 'maxscale_mon'@'192.168.1.%' IDENTIFIED BY 'wakamizu';
GRANT REPLICATION SLAVE, REPLICATION CLIENT, SLAVE MONITOR, REPLICATION SLAVE ADMIN, RELOAD , READ_ONLY ADMIN , BINLOG ADMIN ON *.* TO 'maxscale_mon'@'192.168.1.%';

创建maxscale用户

CREATE USER 'maxscale'@'%' IDENTIFIED BY 'wakamizu';
#赋予maxscale查看数据库相关信息,如表权限等
GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%';
GRANT SELECT ON mysql.* TO 'maxscale'@'%';
#授予测试数据库所有权限,按需授予
GRANT ALL PRIVILEGES ON employees.* TO 'maxscale'@'%';

重新配置基于gtid的主从复制

change master to master_host='192.168.1.101', master_user='maxscale_mon', master_password='wakamizu', master_use_gtid = slave_pos;

maxscale服务器配置

下载安装maxscale

下载链接

apt install maxscale-23.08.5-1.ubuntu.jammy.x86_64.deb -y

生成加密密码

#生成加密文件,默认路径在/var/lib/maxscale/.secrets
maxkeys
#生成加密密码
maxpasswd wakamizu

配置maxscale

vim /etc/maxscale.cnf
[server1]
type=server
address=192.168.1.101
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=192.168.1.102
port=3306
protocol=MariaDBBackend

[server3]
type=server
address=192.168.1.103
port=3306
protocol=MariaDBBackend

[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2,server3
user=maxscale_mon
password=E38A4DC32AF8692DB663BD5DABC88A254F4823875FE2F5E7D48784292F9965AC
monitor_interval=2s
#自动故障转移
auto_failover=true
#重新加入集群
auto_rejoin=true

#配置读写分离池
[Read-Write-Service]
type = service
router = readwritesplit
servers = server1,server2,server3
user = maxscale
password = E38A4DC32AF8692DB663BD5DABC88A254F4823875FE2F5E7D48784292F9965AC
enable_root_user = true

[Read-Write-Listener]
type = listener
service = Read-Write-Service
protocol = MariaDBClient
port = 4006

重启服务

systemctl restart maxscale

注意!

如果主从配置后没有执行任何事务,使用SHOW VARIABLES LIKE '%gtid%' 查看gtid_binlog_pos,从服务器gtid_binlog_pos默认值为空,那么当它提升为主服务器时,其他服务器并不会指向该服务器,需要提交一个事务才能生成gtid_binlog_pos值

读写分离测试

查看数据库状态

maxctrl list servers
┌─────────┬───────────────┬──────┬─────────────┬─────────────────┬─────────┬─────────────────┐
│ Server  │ Address       │ Port │ Connections │ State           │ GTID    │ Monitor         │
├─────────┼───────────────┼──────┼─────────────┼─────────────────┼─────────┼─────────────────┤
│ server1 │ 192.168.1.101 │ 3306 │ 0           │ Slave, Running  │ 0-3-186 │ MariaDB-Monitor │
├─────────┼───────────────┼──────┼─────────────┼─────────────────┼─────────┼─────────────────┤
│ server2 │ 192.168.1.102 │ 3306 │ 0           │ Master, Running │ 0-3-186 │ MariaDB-Monitor │
├─────────┼───────────────┼──────┼─────────────┼─────────────────┼─────────┼─────────────────┤
│ server3 │ 192.168.1.103 │ 3306 │ 0           │ Slave, Running  │ 0-3-186 │ MariaDB-Monitor │
└─────────┴───────────────┴──────┴─────────────┴─────────────────┴─────────┴─────────────────┘

查看读写池状态

maxctrl list services
┌────────────────────┬────────────────┬─────────────┬───────────────────┬───────────────────────────┐
│ Service            │ Router         │ Connections │ Total Connections │ Targets                   │
├────────────────────┼────────────────┼─────────────┼───────────────────┼───────────────────────────┤
│ Read-Write-Service │ readwritesplit │ 0           │ 2                 │ server1, server2, server3 │
└────────────────────┴────────────────┴─────────────┴───────────────────┴───────────────────────────┘
#4006端口会自动路由sql语句到对应的服务器
mysql -u maxscale -p -h 127.0.0.1 -P 4006
#可以在从节点新建一个表,然后分别在4006端口和主节点对这个表进行查询和删除操作

故障转移测试

停止主节点服务,观察日志和查询服务状态

拓展

如果测试时候不想先加入自动转移参数,可以先手动转移

maxctrl call command mariadbmon failover MariaDB-Monitor
#MariaDB-Monitor为配置名

还有就是转换主节点

maxctrl call command mariadbmon switchover  MariaDB-Monitor server1 server2
#MariaDB-Monitor为配置名,serve1为新的主节点,server2为旧的主节点
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!