关键词:
一 前期规划
1.1 主机规划
功能
|
IP
|
主机名
|
server id
|
应用属性
|
VIP
|
MySQL版本
|
Monitor
|
172.24.8.20
|
Monitor
|
——
|
监控
|
——
|
——
|
Master01
|
172.24.8.10
|
Master01
|
1
|
写-writer
|
172.24.8.100
|
MySQL 5.6.37
|
Master02
|
172.24.8.11
|
Master02
|
2
|
读-reader
写-writer
|
172.24.8.101
172.24.8.102
172.24.8.103
172.24.8.104
|
|
Slave01
|
172.24.8.12
|
Slave01
|
3
|
读-reader
|
||
Slave02
|
172.24.8.13
|
Slave02
|
4
|
读-reader
|
1.2 虚拟IP规划
VIP
|
备注
|
172.24.8.100
|
Master01主库写操作
Master01正常时候,Master02的vip对外提供只读服务;
Master01出现故障时候,Master02接替Master01对外提供读写服务。
|
172.24.8.101
|
只读,读查询VIP,每个数据节点一个读VIP,
可搭配LVS,HAProxy等负载均衡软件对读VIP进行负载均衡。
|
172.24.8.102
|
|
172.24.8.103
|
|
172.24.8.104
|
1.3 用户列表
角色
|
权限
|
描述
|
monitor
|
replication client
|
mmm监控MySQL服务健康
|
agent user
|
SUPER, REPLICATION CLIENT, PROCESS
|
mmm代理用来更改只读模式、复制的主服务器等
|
replication user
|
replication slave
|
用于复制
|
1.4 整体架构
1.4 hosts修改
1 [[email protected] ~]# vi /etc/sysconfig/network 2 NETWORKING=yes 3 HOSTNAME=Master01 4 [[email protected] ~]# vi /etc/hosts 5 Master01 172.24.8.10 6 Master02 172.24.8.11 7 Slave01 172.24.8.12 8 Slave02 172.24.8.13 9 Monitor 172.24.8.20
1.5 NTP配置
二 部署MySQL
2.1 安装MySQL
三 双主复制部署
3.1 master01 my.cf配置
1 [[email protected] ~]# vi /etc/my.cnf 2 [mysqld] 3 …… 4 server-id=1 #设置主服务器master的id 5 log-bin=mysql-bin #配置二进制变更日志命名格式 6 replicate-wild-ignore-table=mysql.% 7 replicate-wild-ignore-table=test.% 8 replicate-wild-ignore-table=information_schema.% 9 sync-binlog=1 #每条自动更新,安全性高,默认是0 10 auto_increment_increment=2 #字段一次递增多少 11 auto_increment_offset=1 #自增字段的起始值 12 log_slave_updates #当一个主故障,另一个立即接管 13 read_only=1
1 # 不同步哪些数据库 2 binlog-ignore-db = mysql 3 binlog-ignore-db = test 4 binlog-ignore-db = information_schema 5 # 只同步哪些数据库,除此之外,其他不同步 6 binlog-do-db = mysqltest
1 replicate-wild-ignore-table=mysql.% #从库配置不同步表 2 replicate-wild-do-table=test.% #从库配置需要同步的表
提示:不要在主库使用binlog-ignore-db和binlog-do-db,也不要在从库使用replicate-wild-ignore和replicate-wild-do-table。
3.2 Master02 my.cf配置
1 [[email protected] ~]# service mysqld start 2 [[email protected] ~]# mysql -uroot -px120952576 3 mysql> grant replication slave on *.* to ‘repl_user‘@‘172.24.8.%‘ identified by ‘x12345678‘;
#创建用于复制的账号 4 mysql> grant replication client on *.* to ‘mmm_monitor‘@‘172.24.8.%‘ identified by ‘x12345678‘;
#创建用于监控MySQL服务健康的账号 5 mysql> grant super,replication client,process on *.* to ‘mmm_agent‘@‘172.24.8.%‘ identified by ‘x12345678‘;
#创建用于切换只读模式、同步Master信息的账号 6 mysql> grant select,insert,update,delete,create,drop on *.* to ‘mmm_test‘@‘172.24.8.%‘ identified by ‘x120952576‘ with grant option; #创建之后用于读写分离测试的账号 7 mysql> flush privileges; 8 [[email protected] ~]# service mysqld restart 9 [[email protected] ~]# mysql -uroot -px120952576 10 mysql> show master status;
3.4 Master02创建账号
1 [[email protected] ~]# service mysqld restart 2 [[email protected] ~]# mysql -uroot -px120952576 3 mysql> show master status;
3.5 启动双主复制
1 [[email protected] ~]# mysql -uroot -px120952576 2 Enter password: 3 mysql> change master to master_host=‘172.24.8.11‘, 4 -> master_user=‘repl_user‘, 5 -> master_password=‘x12345678‘, 6 -> master_log_file=‘mysql-bin.000001‘, 7 -> master_port=3306, 8 -> master_log_pos=120; 9 mysql> start slave; 10 mysql> show slave statusG #查看slave状态
3.3 启动Master02的slave功能
1 [[email protected] ~]# mysql -uroot -px120952576 2 mysql> change master to master_host=‘172.24.8.10‘, 3 -> master_user=‘repl_user‘, 4 -> master_password=‘x12345678‘, 5 -> master_log_file=‘mysql-bin.000001‘, 6 -> master_log_pos=120; 7 mysql> start slave; 8 mysql> show slave statusG #查看slave状态
四 其他节点配置
4.1 所有Slave节点配置配置
1 [[email protected] ~]# scp /etc/my.cnf [email protected]:/etc/ 2 [[email protected] ~]# scp /etc/my.cnf [email protected]:/etc/ 3 [[email protected] ~]# vi /etc/my.cnf 4 [mysqld] 5 …… 6 server-id=3 #设置主服务器Slave01的id 7 [[email protected] ~]# vi /etc/my.cnf 8 [mysqld] 9 …… 10 server-id=4 #设置主服务器Slave02的id
4.2 所有Slave节点创建账号
1 [[email protected] ~]# service mysqld start 2 [[email protected] ~]# mysql -uroot -px120952576 3 mysql> grant replication slave on *.* to ‘repl_user‘@‘172.24.8.%‘ identified by ‘x12345678‘; #创建用于复制的账号 4 mysql> grant replication client on *.* to ‘mmm_monitor‘@‘172.24.8.%‘ identified by ‘x12345678‘; #创建用于监控MySQL服务健康的账号 5 mysql> grant super,replication client,process on *.* to ‘mmm_agent‘@‘172.24.8.%‘ identified by ‘x12345678‘;
#创建用于切换只读模式、同步Master信息的账号 6 mysql> grant select,insert,update,delete,create,drop on *.* to ‘mmm_test‘@‘172.24.8.%‘ identified by ‘x120952576‘ with grant option; #创建之后用于读写分离测试的账号 7 mysql> flush privileges;
4.2 Slave节点配置Master01为主
1 [[email protected] ~]# service mysqld restart 2 [[email protected] ~]# mysql -uroot -px120952576 3 mysql> change master to master_host=‘172.24.8.10‘, 4 -> master_user=‘repl_user‘, 5 -> master_password=‘x12345678‘, 6 -> master_log_file=‘mysql-bin.000001‘, 7 -> master_log_pos=120; 8 mysql> start slave; 9 mysql> show slave statusG #查看slave状态
五 安装MMM组件
5.1 监控Monitor节点安装MMM
1 [[email protected] tmp]# wget http://mirrors.ustc.edu.cn/epel/epel-release-latest-6.noarch.rpm 2 [[email protected] tmp]# rpm -ivh epel-release-latest-6.noarch.rpm 3 [[email protected] ~]# yum -y install mysql-mmm*
5.2 其他节点安装MMM
1 [[email protected] ~]# wget http://mirrors.ustc.edu.cn/epel/epel-release-latest-6.noarch.rpm 2 [[email protected] ~]# rpm -ivh epel-release-latest-6.noarch.rpm 3 [[email protected] ~]# yum -y install mysql-mmm-agent
- MMM组件在常规YUM中不包含,需要安装epel源;
- 除monitor节点外其他节点只需要安装mysql-mmm-agent即可。
提示:若yum安装出现以下报错,建议在所有节点改用编译安装,操作见附1-附2:
附1 添加安装Perl脚本
1 [[email protected] ~]# cat install.sh 2 #!/bin/bash 3 wget http://xrl.us/cpanm --no-check-certificate 4 mv cpanm /usr/bin 5 chmod 755 /usr/bin/cpanm 6 cat > /root/list << EOF 7 install Algorithm::Diff 8 install Class::Singleton 9 install DBI 10 install DBD::mysql 11 install File::Basename 12 install File::stat 13 install File::Temp 14 install Log::Dispatch 15 install Log::Log4perl 16 install Mail::Send 17 install Net::ARP 18 install Net::Ping 19 install Proc::Daemon 20 install Thread::Queue 21 install Time::HiRes 22 EOF 23 for package in `cat /root/list` 24 do 25 cpanm $package 26 done
附2 编译安装
1 [[email protected] tmp]# wget http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz 2 [[email protected] tmp]# mv :mmm2:mysql-mmm-2.2.1.tar.gz mysql-mmm-2.2.1.tar.gz 3 [[email protected] tmp]# tar -zxvf mysql-mmm-2.2.1.tar.gz 4 [[email protected] tmp]# cd mysql-mmm-2.2.1/ 5 [[email protected] mysql-mmm-2.2.1]# make install
5.3 目录构成
目录
|
介绍
|
/usr/lib/perl5/vendor_perl/5.8.8/MMM
|
MMM使用的主要perl模块
|
/usr/lib/mysql-mmm
|
MMM使用的主要脚本
|
/usr/sbin
|
MM使用的主要命令的路径
|
/etc/init.d/
|
MMM的agent和monitor启动服务的目录
|
/etc/mysql-mmm
|
MMM配置文件的路径,默认所以的配置文件
|
/var/log/mysql-mmm
|
默认的MMM保存日志的位置
|
六 配置MMM
6.1 Master01的mmm_agent配置
1 [[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf 2 include mmm_common.conf 3 this db1
6.2 Master01的mmm_common配置
1 [[email protected] ~]# vi /etc/mysql-mmm/mmm_common.conf 2 active_master_role writer 3 #当设置为writer的时候,需要在所有MySQL节点设置“read_only=1”,则MMM会本剧每个节点的角色进行动态判断,当MMM的角色设置<role writer>时候,则会自动添加“set global read_only=0”操作,即打开写权限。 4 <host default> 5 cluster_interface eth0 #设置网络接口,不能为子接口。 6 pid_path /var/run/mysql-mmm/mmm_agentd.pid #设定PID文件路径 7 bin_path /usr/libexec/mysql-mmm/ #设置MMM可执行文件路径 8 replication_user repl_user #设置复制的用户名 9 replication_password x12345678 #设置复制的用户名的密码 10 agent_user mmm_agent #设置更改只读操作的用户 11 agent_password x12345678 #设置更改只读操作用户的密码 12 </host> 13 14 <host db1> #设置db1的配置信息,此db1名字可自定义,但必须和mmm_agent.conf中一致。 16 ip 172.24.8.10 #设置db1的物理IP 17 mode master #设置db1角色为Master 18 peer db2 #设置db1对等的主机名,即db2和db1均为Master 19 </host> 20 21 <host db2> #类似db1的设置 22 ip 172.24.8.11 23 mode master 24 peer db1 25 </host> 26 27 <host db3> #类似db1的设置 28 ip 172.24.8.12 29 mode slave #设置db3的角色为Slave 30 </host> 31 32 <host db4> #类似db1的设置 33 ip 172.24.8.13 34 mode slave #设置db4的角色为Slave 35 </host> 36 37 <role writer> #设置可写角色 38 hosts db1, db2 #设置可执行写操作的主机 39 ips 172.24.8.100 #设置可写的虚拟IP 40 mode exclusive #设置角色的模式为互斥,互斥角色只有一个IP,并且同一时间只能分配一个主机。 41 </role> 42 43 <role reader> #设置只读角色 44 hosts db1, db2, db3, db4 #设置只读角色的主机 45 ips 172.24.8.101, 172.24.8.102, 172.24.8.103, 172.24.8.104 46 #设置可读的虚拟IP,可以有多个。 47 mode balanced
#设置角色的模式为负载均衡,在负载均衡角色中,可以有多个IP,这些IP被均衡地、动态地分配给多个MySQL主机。 49 </role>
6.3 Master01的mysql-mmm-agent配置
1 [[email protected] ~]# vi /etc/default/mysql-mmm-agent 2 ENABLED=1
6.4 其他节点配置
1 [[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/ 2 [[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/ 3 [[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/ 4 [[email protected] ~]# scp /etc/default/mysql-mmm-agent [email protected]://etc/default/ 5 [[email protected] ~]# scp /etc/default/mysql-mmm-agent [email protected]://etc/default/ 6 [[email protected] ~]# scp /etc/default/mysql-mmm-agent [email protected]://etc/default/
1 [[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf 2 include mmm_common.conf 3 this db2 4 [[email protected] ~]## vi /etc/mysql-mmm/mmm_agent.conf 5 include mmm_common.conf 6 this db3 7 [[email protected] ~]## vi /etc/mysql-mmm/mmm_agent.conf 8 include mmm_common.conf 9 this db4
6.5 管理Monitor节点配置
2 include mmm_common.conf 3 <monitor> 4 ip 127.0.0.1 #为了安全,只设置本机监听,mmm_mond默认监听的端口为9988 6 pid_path /var/run/mysql-mmm/mmm_mond.pid #设置mmm_mond进程pid文件位置 8 bin_path /usr/libexec/mysql-mmm #mmm可执行文件路径 10 status_path /var/lib/mysql-mmm/mmm_mond.status #mmm集群的状态文件 12 ping_ips 172.24.8.10, 172.24.8.11, 172.24.8.12, 172.24.8.13 13 #用于测试的IP,只要其中有一个地址能ping通,代表网络正常,不要写入本机(即Monitor)IP。 14 auto_set_online 60 #设置是否自动上线,若大于0,抖动的主机在抖动时间范围过后,自动上线。 16 …… 17 </monitor> 18 19 <host default> 20 monitor_user mmm_monitor #设置mmm_monitor账号。 22 monitor_password x12345678 #设置mmm_monitor密码。 24 </host> 25 debug 0 #mmm管理器的运行模式,1为debug模式,0为正常模式。
七 MMM集群的启动
7.1 管理监控Monitor节点启动
1 [[email protected] ~]# /etc/init.d/mysql-mmm-monitor start 2 [[email protected] ~]# chkconfig mysql-mmm-monitor on
7.2 所有agent节点启动
1 [[email protected] ~]# /etc/init.d/mysql-mmm-agent start 2 [[email protected] ~]# chkconfig mysql-mmm-agent on 3 [[email protected] ~]# /etc/init.d/mysql-mmm-agent start 4 [[email protected] ~]# chkconfig mysql-mmm-agent on 5 [[email protected] ~]# /etc/init.d/mysql-mmm-agent start 6 [[email protected] ~]# chkconfig mysql-mmm-agent on 7 [[email protected] ~]# /etc/init.d/mysql-mmm-agent start 8 [[email protected] ~]# chkconfig mysql-mmm-agent on
八 MMM基本维护
8.1 MMM常见命令
2 Valid commands are: 3 help - show this message #显示帮助信息 4 ping - ping monitor #测试网络运行状态 5 show - show status #显示MMM集群节点状态 6 checks [<host>|all [<check>|all]] - show checks status #显示MMM集群中指定(所有)节点的详细状态 8 set_online <host> - set host <host> online #将MMM集群中的节点设置为online状态 10 set_offline <host> - set host <host> offline #将MMM集群中的节点设置为offline状态 12 mode - print current mode. #显示MMM集群当前的运行模式,有active(默认)、manual和passive三种模式。 14 set_active - switch into active mode. 15 set_manual - switch into manual mode. 16 set_passive - switch into passive mode. #切换MMM集群到以上三种模式。 18 move_role [--force] <role> <host> - move exclusive role <role> to host <host> 19 #在互斥模式下切换角色 20 (Only use --force if you know what you are doing!) 21 set_ip <ip> <host> - set role with ip <ip> to host <host> 22 #用来在被动模式下操纵角色
8.2 查看集群状态
1 [[email protected] ~]# mmm_control show
8.3 查看集群运行模式
1 [[email protected] ~]# mmm_control mode
8.4 检查节点情况
1 [[email protected] ~]# mmm_control checks all
8.5 日志文件
九 测试MMM
9.1 测试集群复制功能
1 [[email protected] ~]# mysql -uroot -px120952576 -h172.24.8.100 2 mysql> show variables like "%hostname%"; 3 mysql> show variables like "%server_id%";
1 mysql> create database mysqltest; 2 mysql> use mysqltest; 3 mysql> create table user(id int(5),name char(10)); 4 mysql> insert into user values (00001,‘zhangsan‘);
1 [[email protected] ~]# mysql -uroot -px120952576 2 mysql> show databases; 3 mysql> select * from mysqltest.user;
9.2 读写分离测试
1 [[email protected] ~]# mysql -ummm_test -px120952576 -h172.24.8.101 2 mysql> use mysqltest; 3 mysql> create table test_mmm(id int,email varchar(100));
9.3 故障转移测试
1 [[email protected] ~]# mmm_control show #查看现有集群情况
1 [[email protected] ~]# service mysqld stop #停止Master01节点 2 [[email protected] ~]# mmm_control show #再次查看集群节点情况
1 [[email protected] ~]# service mysqld start #再次启动Master01节点 2 [[email protected] ~]# mmm_control show
1 [[email protected] ~]# mmm_control move_role writer db1 2 [[email protected] ~]# mmm_control show
1 [[email protected] ~]# service mysqld stop 2 [[email protected] ~]# mmm_control show
1 [[email protected] ~]# service mysqld start 2 [[email protected] ~]# mmm_control show
十 MMM总结
- Master02节点宕机不影响集群的状态,只是移除了Master02节点的读状态;
- Master01主节点宕机,由Master02主节点接管写角色,Slave01、Slave02指向新Master02主库进行复制,Slave01、Slave02会自动change master到Master02;
- MMM架构需要多个节点、多个IP,对服务器数量有要求;
- 在读写非常繁忙的业务系统下表现不是很稳定,可能会出现复制延时、切换失效等问题;
- MMM方案并不太适应于对数据安全性要求很高,并且读、写繁忙的环境中
003.mmm双主-双从读写分离部署(代码片段)
...署》。提示:除去monitor节点外所有节点均需要部署。三双主复制部署3.1master01my.cf配置1[[email protected]~]#vi/etc/my.cnf2[mysqld]3……4server-id=1 #设置主服务器master的id5log-bin=mysql- 查看详情
4读写分离---双主双从(mycat)(代码片段)
双主双从一个主机m1用于处理所有写请求,它的从机s1和另一台主机m2还有它的从机s2负责所有读请求。当m1主机宕机后,m2主机负责写请求,m1、m2互为备机。 角色 地址master1 &nbs... 查看详情
mycat学习第二天之性能监控,读写分离,集群搭建(代码片段)
...制原理2.2MySQL一主一从搭建2.3MyCat一主一从读写分离2.4MySQL双主双从搭建2.5MyCat双主双从读写分离3.Mycat集群搭建 查看详情
部署:单主部署一主一从部署双主双从部署代码测试(代码片段)
一.RocketMQ单机部署Hosts添加信息我们首先进入/etc/hosts来添加信息vim/etc/hosts添加信息如下: 上传解压安装包 通过XFTP工具将apache-rocketmq.tar.gz传到/usr/local/software,然后添加/usr/local/apache-rocketmq目录,再将apache-rocketmq.ta 查看详情
rocketmq双主双从同步写安装部署
1,机器ip软件版本jdk-8u131-linux-x64.tar.gzrocketmq-all-4.2.0-bin-release.ziprocketmq-console-ng-1.0.0.jar10.15.10.238HNVM015238nameserver1rocketmq-masterarocketmq-slaveb10.15.10.239HNVM015239nameserver2rock 查看详情
17rocketmq集群双主双从同步搭建(代码片段)
...面一主一从同步搭建我们企业级开发,一般采用的是双主双从同步,以及异步刷盘;同步消息保证消息不丢失,异步刷盘提高吞吐量;我们VM里再克隆两台机器;192.168.0.110机器作为m1主节点192.168.0.103机器作... 查看详情
17rocketmq集群双主双从同步搭建(代码片段)
...面一主一从同步搭建我们企业级开发,一般采用的是双主双从同步,以及异步刷盘;同步消息保证消息不丢失,异步刷盘提高吞吐量;我们VM里再克隆两台机器;192.168.0.110机器作为m1主节点192.168.0.103机器作... 查看详情
rocketmq4.5.1双主双从异步复制环境搭建(代码片段)
基础环境操作系统:CentOS7实例:192.168.63.129,192.168.63.130,192.168.63.131,192.168.63.132Java:jdk-8u191-linux-x64.tar.gz安装JDK先把系统里面自带的卸载掉 [[email protected]soft]#rpm-qa|grepjavapython-javapackages-3.4. 查看详情
rocketmq-双主双从集群+dashborad搭建(云服务器)(代码片段)
文章目录一、理论垫基础1.NameServer集群2.Producer集群3.Consumer集群4.Broker集群4.1节点间数据同步以及消息的持久化4.2Broker的集群模式4.2.1、单Master模式4.2.2、多Master模式4.2.3、多Master多Slave模式-异步复制4.2.4、多Master多Slave模式-同步双... 查看详情
mycat实现读写分离+分库分表+全局表(代码片段)
...mysql02为主从复制关系,可以参考博文MySQL高可用方案——双主(注:只需要参考博文做出主从效果即可,并不需要双主,也不需要keepalived来做高可用)来搭建。mycat服务请参考博文MyCat部署安装来搭建,这里新增的主机mysql03为一... 查看详情
mysql搭建主从复制(一主一从,双主双从)(代码片段)
主从复制原理Mysql中有一个binlog二进制日志,这个日志会记录下所有修改了的SQL语句,从服务器把主服务器上的binlog二进制日志在指定的位置开始复制主服务器所进行修改的语句到从服务器上执行一遍。流程图2|0搭建一主... 查看详情
keepalived双主双从配置(代码片段)
双主双从配置:(机器ip地址为自己本身机器的ip请勿使用博主的IP)配置过程时间有点长,代码比较多,配置的时候请看清加油,打工人配置环境:keepalived1:192.66.66.101keepalived2:192.66.66.102web1... 查看详情
安装部署rocketmq集群(双主双从)
...器的Nameserver然后分别启动4个Broker进程:就这样,RocketMQ双主双从的集群就已经搭建 查看详情
mysql高可用集群-解决mmm单点故障(代码片段)
...一.理论概述MMM(Master-MasterreplicationManagerforMySQL)是一套支持双主日常管理的脚本程序,使用Perl语言开发,主要用来监控和管理MySQL双主库复制,同一时刻只允许一个主库进行写入方便的是,mmm不但可以为写库配置V 查看详情
mysql主从复制搭建之一主一从双主双从搭建(代码片段)
1.MySQL主从复制原理1.1为什么要做主从复制?在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写... 查看详情
mycat配置项详解(代码片段)
...adHost与standbywriteHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情 查看详情
详解mysql高可用群集,mmm搭建高可用(代码片段)
...主复制的管理器。之前的一篇文章讲述了MySQL的主从复制+读写分离,其中原理都相同,有兴趣的朋友可以访问:MySQL主从复制+读写分离2)还有就是,虽然是主主复制,但是在业务上的话,同一时间值额能对一个主进行写入,另... 查看详情
企业级应用,持久层架构方案三(一主多从,读写分离上篇)(代码片段)
...的第三篇。在上一篇:企业级应用,持久层架构方案二(双主同步高可用二)中。已经实现了双主同步高可用,解决了高可用的问题。还没有解决高性能问题,目前读写都是在主服务器上,会导致主服务器压力大,性能低。那么... 查看详情