mariadb/mysql高可用读写分离
- 第一步mariadb主从配置
- 第二步ProxySql读写分离
- 第三步keepalived高可用proxysql
- 第四步测试mysql读写分离高可用是否成功
第一步mariadb主从配置:
首先配置好mariadb主从同步,这里采用的一主两从,node1和node2为半同步复制,node1和node3为异步复制,也可以全部采用异步复制,根据业务需求配置即可
- 保证各服务器节点时间同步,可参考 时间同步设置方案 http://www.longma.tk/p=629
- 初始化环境 node1和 node2 ,为保证不受其它实验干扰,建议恢复至初始状态,新装的mariadb即可,不要有其它实验项目干扰
主服务器node1配置:
1
2
3
4
5
6
7
8
9
10
11
|
.cnf
]
ON
ON
1
bin
.service
;
;
|
从服务器node2配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
.cnf
]
ON
ON
2
log
.service
'replpass'
#;
#MASTER_LOG_POS=#; #去主节点show master status查看
#启动IO和SQL两个线程
|
主服务器从服务器配置完成以后验证一下主从复制:
1
2
3
|
;
#确定数据库是否可以复制,此时主从复制完成
|
半同步配置:
主节点Node1配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
;
#确定安装完成
;
+
|
+
|
#单位毫秒,等待从节点超时时长
#定义日志级别
# 没有从节点要不要等待
#发下同步客户端还是0,需要重启从节点的IO_THREAD,默认是异步
+
|
+
|
|
|
|
|
从节点Node2配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
;
#确定安装完成
+
|
+
|
|
;
;
|
测试半同步复制是否成功
1
2
3
4
5
|
;
#主节点创建表
'%semi%'
#然后去从节点查看 表是否生成
|
添加第二台从服务器
1
2
3
4
5
6
7
8
|
:
.cnf
]
ON
ON
3
log
|
备份主节点数据并恢复到node3
1
2
3
4
|
# mysqldump --all-databases --master-data=2 --routine --trigger --event --lock-all-tables >/root/all.sql
#记录了二进制日志该在哪里开始复制
#在node3导入all.sql数据库
|
在node3从服务器执行在哪个postion开始复制
1
2
3
4
5
6
7
8
|
;
#注意默认从服务器是异步的,如果向做成半同步的,可以安装上面一个插件,具体操作可以看半自动复制,这里我们采用异步
;
#查看IO及sql线程 是否启动了
测试:
;
MYSQL读写分离
|
第二步ProxySql读写分离
1.下载及安装proxysql,直接去 Proxysql官网 下载即可
2. yum install ./proxysql-1.3.6-1-centos7.x86_64.rpm 安装我们下载的proxysql
proxysql.cnf 配置
vim /etc/proxysql.cnf #将原先配置文件重命名,直接新建此文件添加以下配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
=
{
}
=
{
4
2048
0
36000000
true
2000
1048576
3000
600000
60000
10000
1500
500
120000
500
true
true
10
}
=
(
{
# no default, required . If port is 0 , address is interpred as a Unix Socket Domain
# no default, required . If port is 0 , address is interpred as a Unix Socket Domain
# no default, required
# default: ONLINE
# default: 1
# default: 0
,
{
3306
1
# default: ONLINE
# default: 1
# default: 0
,
3306
1
# default: ONLINE
# default: 1
# default: 0
}
)
:
(
{
0
1000
1
}
)
:
(
{
1
1
0
1
}
)
=
(
)
=
(
{
0
1
}
)
|
主节点node1授权复制账号
1
2
3
4
5
6
7
8
|
#proxysql需要授权一个账号连接后端的mysql,因为我们在节点授权,从节点账号也就自己能给同步过去了
# service proxysql start #启动proxysql
#默认是4线程的
#登录proxysql本地管理接口
;
#会看到我们的mysql复制集群
;
|
测试:
1
2
3
4
5
6
7
8
9
10
11
12
|
:
pmageedu
;
;
;
#然后我们去后端三个mysql去查看一下,有则读写分离成功
#
;
#去三个节点看一下
|
配置第二台Proxysql
1
2
3
|
proxysql
#直接将第一台proxysql配置文件传给第二台 proxysql
|
测试第二台proxysql n2
1
2
3
4
5
6
|
pmageedu
;
;
;
#然后我们去后端三个mysql去查看一下,有则读写分离成功
|
第三步keepalived高可用proxysql
n1和n2两个节点安装keepalived
1
2
|
y
|
keepalived.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
keepalived
{
{
localhost
}
localhost
127.0.0.1
30
node1
}
{
MASTER
eno16777736
67
100
1
{
PASS
250250
}
{
eno16777736
}
}
|
1
2
3
4
5
6
|
node2
keepalived
#修改状态为备用
#修改优先级小于master
|
测试:
- 先启动备用服务器systemctl start keepalived.service
1
2
3
4
5
6
7
8
9
10
|
vip
查看日志
vip
.
STATE
STATE
.
172.16.0...e
|
- 启用主节点服务器:
1
2
3
4
5
6
7
|
.service
master
vip
.service
#查看ip是否漂移成功
|
第四步测试mysql读写分离高可用是否成功
1
2
3
4
5
6
7
|
#访问VIP地址,确定可以正常连接
#去三个mariadb节点手动查看hellodb数据库是否创建成功
#停止n1的proxysql测试proxysql是否还可以正常访问
pmageedu
;
#去我们的三个mariadb查看表是否创建成功
|