mariadb/mysql高可用读写分离  

mariadb/mysql高可用读写分离
 

  • 第一步mariadb主从配置
  • 第二步ProxySql读写分离
  • 第三步keepalived高可用proxysql
  • 第四步测试mysql读写分离高可用是否成功

第一步mariadb主从配置:

首先配置好mariadb主从同步,这里采用的一主两从,node1和node2为半同步复制,node1和node3为异步复制,也可以全部采用异步复制,根据业务需求配置即可

  1. 保证各服务器节点时间同步,可参考 时间同步设置方案 http://www.longma.tk/p=629
  2. 初始化环境 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
 
测试:
  1. 先启动备用服务器systemctl start keepalived.service
 
1
2
3
4
5
6
7
8
9
10
vip
查看日志
vip
 
.
STATE
STATE
.
172.16.0...e
 
  1. 启用主节点服务器:
 
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查看表是否创建成功