- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL数据库实现MMM高可用集群架构由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
概念 。
MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的).
MMM高可用架构说明 。
MMM的优缺点 。
优点: 高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。 缺点: Monitor节点是单点,可以结合Keepalived实现高可用,对主机的数量有要求,需要实现读写分离,对程序来说是个挑战.
实验环境部署 。
第一步:在四台服务器上都需要安装MySQL数据库 。
1.配置ALI云源,然后安装epel-release源 。
1
|
2
3
4
5
|
[root@localhost ~]
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]
# yum -y install epel-release
[root@localhost ~]
# yum clean all && yum makecache
|
2.搭建本地yum源 。
1
|
2
3
4
5
6
7
8
9
|
#安装数据库
[root@localhost ~]
# yum -y install mariadb-server mariadb
#关闭防火墙和安全功能
[root@localhost ~]
# systemctl stop firewalld.service
[root@localhost ~]
# setenforce 0
#开启数据库
[root@localhost ~]
# systemctl start mariadb.service
|
3.修改ml主配置文件 。
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@localhost ~]
# vim /etc/my.cnf
#删除前9行,添加以下内容
[mysqld]
log_error=
/var/lib/mysql/mysql
.err
#错误日志的文件位置
log=
/var/lib/mysql/mysql_log
.log
#访问日志的文件位置
log_slow_queries=
/var/lib/mysql_slow_queris
.log
#man日志的文件位置
binlog-ignore-db=mysql,information_schema
#mysql,information_schema不生成二进制日志文件
character_set_server=utf8
#字符集
log_bin=mysql_bin
#二进制日志文件功能开启
server_id=1
#不同主机id不同
log_slave_updates=
true
#授权同步
sync_binlog=1
#二进制日志文件功能开启
auto_increment_increment=2
#自增量
auto_increment_offset=1
#起始值
[root@localhost ~]
# systemctl restart mariadb.service
[root@localhost ~]
# netstat -natp | grep 3306
|
4.复制配置文件到其他三台数据库服务器,注意修改server_id 。
1
|
|
[root@localhost ~]
# scp /etc/my.cnf root@192.168.142.134:etc/
|
5.进入数据库,并查看日志文件信息 。
1
|
2
3
4
5
6
7
8
9
10
|
[root@localhost ~]# mysql
#查看记录日志文件名称和位置值
MariaDB [(none)]> show master status;
+
------------------+----------+--------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+
------------------+----------+--------------+--------------------------+
| mysql_bin.000001 | 245| | mysql,information_schema |
+
------------------+----------+--------------+--------------------------+
1 row
in
set
(0.00 sec)
|
6.在m1和m2上互相授予访问的权限,并授权同步日志 。
1
|
2
3
4
5
6
7
8
|
#在m1和m2上互相授予访问的权限
MariaDB [(none)]>
grant
replication slave
on
*.*
to
'replication'
@
'192.168.142.%'
identified
by
'123456'
;
#在m1上指定m2的日志文件名和位置参数
MariaDB [(none)]> change master
to
master_host=
'192.168.142.134'
,master_user=
'replication'
,master_password=
'123456'
,master_log_file=
'mysql_bin.000001'
,master_log_pos=245;
#在m2上指定m1的日志文件名和位置参数
MariaDB [(none)]> change master
to
master_host=
'192.168.142.131'
,master_user=
'replication'
,master_password=
'123456'
,master_log_file=
'mysql_bin.000001'
,master_log_pos=245;
|
7.在m1上开启同步功能 。
1
|
|
MariaDB [(none)]> start slave;
|
8.查看同步状态,两台主服务器都要看到Yes 。
1
|
2
3
4
|
MariaDB [(none)]> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
|
9.在m1上创建数据库 。
1
|
|
MariaDB [(none)]>
create
database
school;
|
10.在m2上查看同步数据库 。
1
|
2
3
4
5
6
7
8
9
10
11
|
MariaDB [(none)]> show databases;
+
--------------------+
|
Database
|
+
--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| test |
+
--------------------+
5
rows
in
set
(0.00 sec)
|
11.在两台从上做-注意日志文件和位置参数的改变(都指向m1) 。
1
|
|
MariaDB [(none)]> change master
to
master_host=
'192.168.142.131'
,master_user=
'replication'
,master_password=
'123456'
,master_log_file=
'mysql_bin.000001'
,master_log_pos=245;
|
12.开启同步功能 。
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
|
MariaDB [(none)]> start slave;
#在从服务器上查看同步数据信息
MariaDB [(none)]> show databases;
+
--------------------+
|
Database
|
+
--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| test |
+
--------------------+
5
rows
in
set
(0.00 sec)
|
13.在四台服务器上安装MMM相关软件 。
1
|
|
[root@localhost ~]# yum -y install mysql-mmm*
|
14.配置mmm_common.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
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
|
[root@localhost ~]
# vim /etc/mysql-mmm/mmm_common.conf
<host default>
#修改网卡为ens33
cluster_interface ens33
pid_path
/run/mysql-mmm-agent
.pid
bin_path
/usr/libexec/mysql-mmm/
replication_user replicantion
#修改授权密码
replication_password 123456
agent_user mmm_agent
#修改代理授权密码
agent_password 123456
<
/host
>
#指定四台服务器的角色与IP地址
<host db1>
ip 192.168.142.131
mode master
peer db2
<
/host
>
<host db2>
ip 192.168.142.134
mode master
peer db1
<
/host
>
<host db3>
ip 192.168.142.130
mode slave
<
/host
>
<host db4>
ip 192.168.142.135
mode slave
<
/host
>
#设定主服务器虚拟IP
<role writer>
hosts db1, db2
ips 192.168.142.250
mode exclusive
<
/role
>
#设定从服务器虚拟IP
<role reader>
hosts db3, db4
ips 192.168.142.251, 192.168.142.252
mode balanced
<
/role
>
|
15.从m1上面复制配置文件到其他三台服务器 。
1
|
2
3
|
[root@localhost ~]
# scp mmm_common.conf/mmm_common.conf root@192.168.142.134:/etc/mysql-mmm/mmm_common.conf
[root@localhost ~]
# scp mmm_common.conf/mmm_common.conf root@192.168.142.130:/etc/mysql-mmm/mmm_common.conf
[root@localhost ~]
# scp mmm_common.conf/mmm_common.conf root@192.168.142.135:/etc/mysql-mmm/mmm_common.conf
|
第二步:配置monitor监控服务器 。
1.安装epel-release源以及MMM相关软件 。
1
|
2
3
4
5
6
|
[root@localhost ~]
# systemctl stop firewalld.service
[root@localhost ~]
# setenforce 0
[root@localhost ~]
# wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]
# yum -y install epel-release
[root@localhost ~]
# yum clean all && yum makecache
[root@localhost ~]
# yum -y install mysql-mmm*
|
2.从m1上面复制配置文件到监控服务器 。
1
|
|
[root@localhost ~]
# scp mmm_common.conf root@192.168.142.134:/etc/mysql-mmm/
|
3.配置mmm_common.conf配置文件 。
1
|
2
3
4
5
6
7
8
9
10
11
|
[root@localhost ~]
# vim /etc/mysql-mmm/mmm_mon.conf
<monitor>
ip 127.0.0.1
pid_path
/run/mysql-mmm-monitor
.pid
bin_path
/usr/libexec/mysql-mmm
status_path
/var/lib/mysql-mmm/mmm_mond
.status
#指向四台服务器的IP地址
ping_ips 192.168.142.131,192.168.142.134,192.168.142.130,192.168.142.135
auto_set_online 10
|
4.在所有数据库服务器上为mmm_agent授权 。
1
|
2
|
MariaDB [(none)]>
grant
super, replication client, process
on
*.*
to
'mmm_agent'
@
'192.168.142.%'
identified
by
'123456'
;
Query OK, 0
rows
affected (0.02 sec)
|
5.在所有数据库服务器上为mmm_moniter授权 。
1
|
2
|
MariaDB [(none)]>
grant
replication client
on
*.*
to
'mmm_monitor'
@
'192.168.18.%'
identified
by
'123456'
;
Query OK, 0
rows
affected (0.02 sec)
|
6.刷新数据库、在所有数据库服务器上设定代理名称 。
1
|
2
3
4
5
6
7
8
9
10
11
12
|
[root@localhost ~]
# vim /etc/mysql-mmm/mmm_agent.conf #修改代理配置文件
#m1中默认名称
this db1
#m2中名称
this db2
#s1中名称
this db3
#s2中名称
this db4
|
7.所有数据库服务器上启动代理功能并设定开机自启动 。
1
|
2
3
4
5
|
#启动代理功能
[root@localhost ~]
# systemctl start mysql-mmm-agent.service
#设置开机自启动
[root@localhost ~]
# systemctl enable mysql-mmm-agent.service
|
8.在monitor服务器开启监控服务、查看各节点的情况 。
1
|
2
3
4
5
6
|
[root@localhost mysql-mmm]
# systemctl start mysql-mmm-monitor.service
[root@localhost ~]
# mmm_control show
db1(192.168.142.131) master
/ONLINE
. Roles: writer(192.168.142.250)
db2(192.168.142.134) master
/ONLINE
. Roles:
db3(192.168.142.130) slave
/ONLINE
. Roles: reader(192.168.142.252)
db4(192.168.142.135) slave
/ONLINE
. Roles: reader(192.168.142.251)
|
9、检测所有服务器状态 。
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@localhost ~]
# mmm_control checks all
db4
ping
[last change: 2019
/11/25
18:23:03] OK
db4 mysql [last change: 2019
/11/25
18:23:03] OK
db4 rep_threads [last change: 2019
/11/25
18:23:03] OK
db4 rep_backlog [last change: 2019
/11/25
18:23:03] OK: Backlog is null
db2
ping
[last change: 2019
/11/25
18:23:03] OK
db2 mysql [last change: 2019
/11/25
18:59:01] OK
db2 rep_threads [last change: 2019
/11/25
18:59:01] OK
db2 rep_backlog [last change: 2019
/11/25
18:59:01] OK: Backlog is null
db3
ping
[last change: 2019
/11/25
18:23:03] OK
db3 mysql [last change: 2019
/11/25
18:59:01] OK
db3 rep_threads [last change: 2019
/11/25
18:59:01] OK
db3 rep_backlog [last change: 2019
/11/25
18:59:01] OK: Backlog is null
db1
ping
[last change: 2019
/11/25
18:23:03] OK
db1 mysql [last change: 2019
/11/25
18:59:01] OK
db1 rep_threads [last change: 2019
/11/25
18:59:01] OK
db1 rep_backlog [last change: 2019
/11/25
18:59:01] OK: Backlog is null
|
第3、故障测试 。
1、模拟m1服务器宕机,停止服务 。
1
|
|
[root@localhost ~]
# systemctl stop mariadb.service
|
2.当m1服务器宕机后,m2接收虚拟IP继续提供服务 。
1
|
2
3
4
5
|
[root@localhost ~]
# mmm_control show
db1(192.168.142.131) master
/ONLINE
. Roles:
db2(192.168.142.134) master
/ONLINE
. Roles: writer(192.168.142.250)
db3(192.168.142.130) slave
/ONLINE
. Roles: reader(192.168.142.252)
db4(192.168.142.135) slave
/ONLINE
. Roles: reader(192.168.142.251)
|
3.当s1服务器宕机后,s2接收虚拟IP继续提供服务 。
1
|
2
3
4
|
[root@localhost ~]
# mmm_control show db1(192.168.142.131) master/ONLINE. Roles: writer(192.168.142.250)
db2(192.168.142.134) master
/ONLINE
. Roles:
db3(192.168.142.130) slave
/HARD_OFFLINE
. Roles:
db4(192.168.142.135) slave
/ONLINE
. Roles: reader(192.168.142.251), reader(192.168.142.252
|
4.在m1服务器上为监控服务器地址授权登录 。
1
|
2
|
MariaDB [(none)]>
grant
all
on
*.*
to
'root'
@
'192.168.142.136'
identified
by
'123456'
;
Query OK, 0
rows
affected (0.00 sec)
|
5.在监控服务器上安装数据库客户端 。
1
|
|
[root@localhost ~]
# yum -y install mariadb
|
6.在监控服务器上使用指定用户登录数据库,并创建数据信息 。
1
|
2
3
4
5
6
7
|
[root@localhost ~]# mysql -u root -p -h 192.168.142.250
Enter
password
:
#输入密码即可
#创建一个数据库
MariaDB [(none)]>
create
database
BDQN;
Query OK, 1 row affected (0.01 sec)
|
7.在所有数据库上都能查看及时同步到的数据信息 。
1
|
2
3
4
5
6
7
8
9
10
11
12
|
MariaDB [(none)]> show databases; #查看数据库
+
--------------------+
|
Database
|
+
--------------------+
| information_schema |
| BDQN | #同步到的BDQN数据库
| mysql |
| performance_schema |
| school |
| test |
+
--------------------+
6
rows
in
set
(0.00 sec)
|
到此MMM群集架构已完成,谢谢阅读!!.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://blog.51cto.com/14475593/2455859 。
最后此篇关于MySQL数据库实现MMM高可用集群架构的文章就讲到这里了,如果你想了解更多关于MySQL数据库实现MMM高可用集群架构的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在寻找一种方法来创建根据价格选择我的产品的过滤器(选择下拉菜单)。 我知道这样的查询是完全可能的: SELECT * FROM products ORDER BY price ASC SELECT
函数参数中或显示尺寸时(高度,宽度)的顺序是否有约定? 最佳答案 我不知道大量的语言,但我使用过的语言(宽度,高度)。它更适合沿着 (x, y) 坐标线。 关于language-agnostic -
在我的表单中,我让用户输入房间的长度高度和宽度以获得 m2、m3 和瓦特的计算值。但是用户也应该能够直接输入 height 和 m2 来获取值。我尝试了很多语法,但 if else 不能正常工作。我知
我在 Elasticsearch 中创建了一个索引,看起来像 {"amazingdocs":{"aliases":{},"mappings":{"properties":{"Adj Close":{"
我有以下功能,我需要清除数据库中的所有图片列并移动到文件系统。当我一次性完成这一切时,内存太多并且会崩溃。我切换到递归函数并执行 20 次写入和批量操作。 我需要为大约 6 个表执行此操作。我的 Re
我正在编写一个函数来计算 PI 的值,并将其作为 double 值返回。到目前为止,一切都很好。但是一旦函数到达小数点后14位,它就不能再保存了。我假设这是因为 double 有限。我应该怎么做才能继
2020年是中国CDN行业从98年诞生到今天快速发展的第二十四年,相关数据显示,全国感知网速持续上扬,达到了3.29兆/秒,标志着在宽带中国的政策指导下,中国的网速水平正在大步赶上世界发达国家的水平
在 aerospike 集合中,我们有四个 bin userId、adId、timestamp、eventype,主键是 userId:timestamp。在 userId 上创建二级索引以获取特定用
$('#container').highcharts('Map', { title : { text : 'Highmaps basic demo'
有没有办法显示自定义宽度/高度的YouTube视频? 最佳答案 在YouTube网站上的this link中: You can resize the player by editing the obj
我使用 Highcharts ,我想在 Highcharts 状态下悬停时制作动态不同的颜色。 正如你可以看到不同的颜色,这就是我做的 var usMapChart , data = [] ; va
在所有节点上运行 tpstats 后。我看到很多节点都有大量的 ALL TIME BLOCKED NTR。我们有一个 4 节点集群,NTR ALL TIME BLOCKED 的值为: 节点 1:239
我发现 APC 上存在大量碎片 (>80%),但实际上性能似乎相当不错。我有 read another post这建议在 wordpress/w3tc 中禁用对象缓存,但我想知道减少碎片是否比首先缓存
对于我的脚本类(class),我们必须制作更高/更低的游戏。到目前为止,这是我的代码: import random seedVal = int(input("What seed should be u
我发现 APC 上存在大量碎片 (>80%),但实际上性能似乎相当不错。我有 read another post这建议在 wordpress/w3tc 中禁用对象缓存,但我想知道减少碎片是否比首先缓存
对于我的脚本类(class),我们必须制作更高/更低的游戏。到目前为止,这是我的代码: import random seedVal = int(input("What seed should be u
我已经 seen >2 字节的 unicode 代码点,如 U+10000 可以成对编写,如 \uD800\uDC00。它们似乎以半字节 d 开头,但我只注意到了这一点。 这个 split Actio
有人可以帮我理解为什么我的饼图百分比计算不正确吗?看截图: 根据我的计算,如 RHS 上所示,支出百分比应为 24.73%。传递给 Highcharts 的值如下:- 花费:204827099.36-
我阅读了有关该问题的所有答案,但我还没有找到任何解决方案。 我有一个应用程序,由我的 api 服务器提供。 Wildfly 8.1 和 Mysql 5.6。当查看时间到来时(Wildfly 服务器连接
我正在用选定的项目创建圆形导航。当用户单击任何项目时,它将移动到定义的特定点。一切都很好,除了当你继续点击项目时,当动画表现不同并且项目在 360 度圆中移动并且它被重置直到你重复场景时,我希望它
我是一名优秀的程序员,十分优秀!