设为首页 收藏本站
查看: 761|回复: 0

[经验分享] Mysql-mmm高可用方案安装及配置

[复制链接]

尚未签到

发表于 2018-9-29 13:06:16 | 显示全部楼层 |阅读模式
  说明:
  app
  |
  ----------------
  |                   |
  master1       master2
  (db1)               (db2)
  |                  |
  ----------------
  |
  ----------------
  |                   |
  slave1          slave2
  (db3)            (db4)
  mysql-mmm官网 http://mysql-mmm.org/start
  mysql-mmm 系统CentOS 6.5 64位 Mysql版本 5.5.37,实验为5台测试机
  monitor监控2主2从
  master1和master2互为备份
  slave1是master1的从
  slave2是master2的从
  ip地址
  monitor 192.168.1.1
  master1 192.168.1.2
  master2 192.168.1.3
  slave1    192.168.1.4
  slave2    192.168.1.5
  修改各主机的名字  /etc/sysconfig/network  比如monitor: HOSTNAME=monitor
  修改各主机 /etc/hosts
  192.168.1.1 monitor
  192.168.1.2 db1
  192.168.1.3 db2
  192.168.1.4 db3
  192.168.1.5 db4
  配置monitor和各agent双机互信修改文件可以很方便
  # ssh-keygen  -t rsa
  # for i in db1 db2 db3 db4; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i;done
  # for i in db1 db2 db3 db4; do ssh $i 'date';done #检测
  如果时间不同步则
  ntpdate 0.asia.pool.ntp.org ;hwclock -w
  yum install ntp ntpdate -y
  service ntpd restart
  在其他节点和此节点时间同步 ntpdate monitor
  如果提示ntpdate[35485]: no server suitable for synchronization found 是因为NTP server没有和其自身或者其他的server同步,则在 /etc/ntp.conf 添加以下,然后重启ntp服务
  server 127.127.1.0 fudge
  127.127.1.0 stratum 8
  安装mysql-mmm:
  下面是两种安装方式:
  安装方式1:
所有服务器执行  
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  
rpm -Uvh epel-release-6-8.noarch.rpm
  
monitor执行:
  
yum install mysql-mmm*
  
mysql agent 执行:
  
yum install mysql-mmm-agent
  安装方式2:
  yum install perl-CPAN #CPAN是perl的包管理器
  perl -MCPAN -e shell#选择地区、国家和源
  install Algorithm::Diff
  install DBI
  force install DBD::mysql
  monitor要装的包
# perl -MCPAN -e shell  
cpan> install Algorithm::Diff
  
cpan> install Class::Singleton
  
cpan> install Log::Dispatch
  
cpan> install Log::Log4perl
  
cpan> install Mail::Send
  
cpan> install Proc::Daemon
  
cpan> install Thread::Queue
  
cpan> install Time::HiRes
  
cpan> install DBI
  
cpan>install DBD::mysql
  agent要装的包
# perl -MCPAN -e shell  
cpan> install Algorithm::Diff
  
cpan> install DBI
  
cpan>install Log::Dispatch
  
cpan> install Log::Log4perl
  
cpan> install Mail::Send
  
cpan> install Net::ARP
  
cpan> install Proc::Daemon
  
cpan> install Time::HiRes
  
cpan>install DBD::mysql
  
cpan>install File::stat
  
cpan>install File:basename
tar zxf mysql-mmm-2.2.1.tar.gz  
cd mysql-mmm-2.2.1
  
make instal
  
mysql-mmm文件位置及作用如下:
  
/usr/lib/perl5/vendor_perl/5.8.8/MMM                 MMM 使用的 perl 模块
  
/usr/lib/mysql-mmm                                   MMM 的脚本揑件
  
/usr/sbin                                            MMM 的命令保存路径
  
/var/log/mysql-mmm                                   MMM 的日志保存路径
  
/etc                                                 MMM 配置文件保存的路径
  
/etc/mysql-mmm                                       MMM 配置文件保存的路径,优先级最高
  
/etc/init.d/                                         agentd 和 monitor 的启劢关闭脚本
  mysql安装略过
  依次配置各个my.cnf 的server-id为1,2,3,4   比如db1:
  server-id  = 1
  read_only = 1
  配置mysql主主
  master1:
mysql> grant replication slave on *.* to "zhuzhu"@"192.168.1.%" identified by "zhuzhu";  
mysql> grant process, super, replication client on *.* to 'mmm_agent'@'192.168.1.%' identified by 'mmm_agent';
  
mysql> grant replication client on *.* to "mmm_monitor"@"192.168.1.%" identified by "mmm_monitor";
  
mysql> flush privileges;
  
mysql> show master status\G
  #查看master1 mysql-bin的日志文件名称和MASTER_LOG_POS的值,在master2上执行CHANGE MASTER TO MASTER_HOST 时使用,这里master1的MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=107
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.3',MASTER_USER='zhuzhu',MASTER_PASSWORD='zhuzhu',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=1180,MASTER_CONNECT_RETRY=10;  
mysql> start slave;
  
mysql> show slave status\G
  master2:
mysql> grant replication slave on *.* to "zhuzhu"@"192.168.1.%" identified by "zhuzhu";  
mysql> grant process, super, replication client on *.* to 'mmm_agent'@'192.168.1.%' identified by 'mmm_agent';
  
mysql> grant replication client on *.* to "mmm_monitor"@"192.168.1.%" identified by "mmm_monitor";
  
mysql> flush privileges;
  
mysql> show master status\G
  #查看master2 mysql-bin的日志文件名称和MASTER_LOG_POS的值,在master1上执行CHANGE MASTER TO MASTER_HOST 时使用,这里master2的MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=1180
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.2',MASTER_USER='zhuzhu',MASTER_PASSWORD='zhuzhu',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=107,MASTER_CONNECT_RETRY=10;  
mysql> start slave;
  
mysql> show slave status\G
  配置mysql主从
  slave1:
mysql> stop slave;  
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.2',MASTER_USER='zhuzhu',MASTER_PASSWORD='zhuzhu',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=107,MASTER_CONNECT_RETRY=10;
  
mysql> start slave;
  
mysql> show slave status\G
  slave2:
mysql> stop slave;  
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.3',MASTER_USER='zhuzhu',MASTER_PASSWORD='zhuzhu',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=1180,MASTER_CONNECT_RETRY=10;
  
mysql> start slave;
  
mysql> show slave status\G
  在两个slave上面创建monitor的账号
grant replication client on *.* to "mmm_monitor"@"192.168.1.%" identified by "mmm_monitor";  
grant process, super, replication client on *.* to 'mmm_agent'@'192.168.1.%' identified by 'mmm_agent';
  
flush privileges;
  
show slave status\G
  在db1 新建用户,稍后用于测试

  mysql> grant all on *.* to user@"192.168.1.%">  mysql> flush privileges;
  在db1创建一个表,在db4测试是否同步成功
mysql> create database testdb;  
Query OK, 1 row affected (0.02 sec)
  
mysql> use testdb;
  
Database changed
  
mysql> create table user (id int(4),name varchar(10));
  
Query OK, 0 rows affected (0.07 sec)
  
mysql> insert into user values(1,"tom");
  
Query OK, 1 row affected (0.01 sec)
  配置mysql-mmm:
  配置mmm_agent.conf
  monitor:  /etc/mysql-mmm目录下 mmm_agent.conf 注释#this db1
  agent:  db1(192.168.1.2)--db4(192.168.1.5) 上mmm_agent.conf 依次为this db1,,this db4
  配置mmm_common.conf
  monitor:
[root@monitor mysql-mmm]# vim mmm_common.conf  
active_master_role      writer
  

  
    cluster_interface       eth0
  
    pid_path                /var/run/mysql-mmm/mmm_agentd.pid
  
    bin_path                /usr/libexec/mysql-mmm/
  
    replication_user         zhuzhu
  
    replication_password    zhuzhu
  
    agent_user                  mmm_agent
  
    agent_password          mmm_agent
  

  

  
    ip      192.168.1.2
  
    mode    master
  
    peer    db2
  

  

  
    ip      192.168.1.3
  
    mode    master
  
    peer    db1
  

  

  
    ip      192.168.1.4
  
    mode    slave
  

  

  
    ip      192.168.1.5
  
    mode    slave
  

  

  

  
    hosts   db1, db2
  
    ips     192.168.1.100
  
    mode    exclusive
  

  

  
    hosts   db1,db2,db3,db4
  
    ips     192.168.1.101, 192.168.1.102,192.168.1.103,192.168.1.104
  
    mode    balanced
  

  配置agent:  把此配置文件mmm_common.conf复制到各agent /etc/mysql-mmm
  配置mmm_mon.conf
  monitor:
[root@monitor mysql-mmm]# vim mmm_mon.conf  
include mmm_common.conf
  

  
    ip                  192.168.1.1
  
    pid_path            /var/run/mysql-mmm/mmm_mond.pid
  
    bin_path            /usr/libexec/mysql-mmm
  
    status_path         /var/lib/mysql-mmm/mmm_mond.status
  
    ping_ips            192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5
  
    auto_set_online     60
  
    # The kill_host_bin does not exist by default, though the monitor will
  
    # throw a warning about it missing.  See the section 5.10 "Kill Host
  
    # Functionality" in the PDF documentation.
  
    #
  
    # kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host
  
    #
  

  

  
    monitor_user        mmm_monitor
  
    monitor_password    mmm_monitor
  

  
debug 0
  启动服务mysql-mmm:
  先启agent,再启monitor,顺序不要错了
  在各个agent节点启动服务# service mysql-mmm-agent restart
  在monitor节点启动监控服务 # service mysql-mmm-monitor start
  monitor节点查看
  [root@monitor mysql-mmm]# mmm_control show
  db1(192.168.1.2) master/ONLINE. Roles: reader(192.168.1.102), writer(192.168.1.100)
  db2(192.168.1.3) master/ONLINE. Roles: reader(192.168.1.101)
  db3(192.168.1.4) slave/ONLINE. Roles: reader(192.168.1.104)
  db4(192.168.1.5) slave/ONLINE. Roles: reader(192.168.1.103)
DSC0000.jpg

  [root@monitor mysql-mmm]# mmm_control checks all
  db4  ping         [last change: 2014/12/31 15:15:22]  OK
  db4  mysql        [last change: 2014/12/31 15:15:22]  OK
  db4  rep_threads  [last change: 2014/12/31 15:15:22]  OK
  db4  rep_backlog  [last change: 2014/12/31 15:15:22]  OK: Backlog is null
  db2  ping         [last change: 2014/12/31 15:15:22]  OK
  db2  mysql        [last change: 2014/12/31 15:15:22]  OK
  db2  rep_threads  [last change: 2014/12/31 15:15:22]  OK
  db2  rep_backlog  [last change: 2014/12/31 15:15:22]  OK: Backlog is null
  db3  ping         [last change: 2014/12/31 15:15:22]  OK
  db3  mysql        [last change: 2014/12/31 15:15:22]  OK
  db3  rep_threads  [last change: 2014/12/31 15:15:22]  OK
  db3  rep_backlog  [last change: 2014/12/31 15:15:22]  OK: Backlog is null
  db1  ping         [last change: 2014/12/31 15:15:22]  OK
  db1  mysql        [last change: 2014/12/31 15:15:22]  OK
  db1  rep_threads  [last change: 2014/12/31 15:15:22]  OK
  db1  rep_backlog  [last change: 2014/12/31 15:15:22]  OK: Backlog is null
  查看db1的ip地址
  [root@db1 mysql-mmm]# ip a
  1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  inet6 ::1/128 scope host
  valid_lft forever preferred_lft forever
  2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 00:0c:29:0a:5e:93 brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
  inet 192.168.1.104/32 scope global eth0
  inet 192.168.1.100/32 scope global eth0
  inet6 fe80::20c:29ff:fe0a:5e93/64 scope link
  valid_lft forever preferred_lft forever
  检查及测试mysql-mmm:
  在monitor节点登录可以写入的VIP
  # mysql -uuser -p123456 -h 192.168.1.100
  mysql> insert into user values(2,"jerry");
  在db4查看是否有此数据
mysql> select * from testdb.user;  
+------+-------+
  
| id   | name  |
  
+------+-------+
  
|    1 | tom   |
  
|    2 | jerry |
  
+------+-------+
  
2 rows in set (0.00 sec)
  模拟主mysql服务关闭,测试VIP是否会移动到master2
  在db1 service mysqld stop
  monitor查看结果
  [root@monitor mysql-mmm]# mmm_control show
  db1(192.168.1.2) master/HARD_OFFLINE. Roles:
  db2(192.168.1.3) master/ONLINE. Roles: reader(192.168.1.101), writer(192.168.1.100)
  db3(192.168.1.4) slave/ONLINE. Roles: reader(192.168.1.102), reader(192.168.1.104)
  db4(192.168.1.5) slave/ONLINE. Roles: reader(192.168.1.103)
  然后把db1的mysql服务再次启动,在monitor查看
  [root@monitor mysql-mmm]# mmm_control show
  db1(192.168.1.2) master/ONLINE. Roles: reader(192.168.1.104)
  db2(192.168.1.3) master/ONLINE. Roles: reader(192.168.1.101), writer(192.168.1.100)
  db3(192.168.1.4) slave/ONLINE. Roles: reader(192.168.1.102)
  db4(192.168.1.5) slave/ONLINE. Roles: reader(192.168.1.103)
DSC0001.jpg

  手动把VIP迁移回db1
  [root@monitor mysql-mmm]# mmm_control move_role writer db1
  OK: Role 'writer' has been moved from 'db2' to 'db1'. Now you can wait some time and check new roles info!
  [root@monitor mysql-mmm]# mmm_control show
  db1(192.168.1.2) master/ONLINE. Roles: reader(192.168.1.104), writer(192.168.1.100)
  db2(192.168.1.3) master/ONLINE. Roles: reader(192.168.1.101)
  db3(192.168.1.4) slave/ONLINE. Roles: reader(192.168.1.102)
  db4(192.168.1.5) slave/ONLINE. Roles: reader(192.168.1.103)
  模拟slave节点当机:如果把db4直接关机,那么就出现下面的状态
DSC0002.jpg

  monitor其他常用命令
  mmm_control ping
  mmm_control show
  mmm_control checks all
  mmm_control set_online db1
  mmm_control move_role writer db1
  mysql-mmm 数据一致性方面不是很好
  mysql-mmm模拟master2(读)执行的时候加锁lock,往master1(写)插入数据后,把master1关闭(模拟当机),查看数据完整性
  1,在master2(读)上面use testdb; lock tables user read;
  2,这时候把master1(写)插入一条数据 use testdb; insert into user values (4,"marry");再service mysqld stop
  3,master2上show processlist; unlock tables; select * from testdb.user;
  4,master1现在为OFFLINE,master2为写入
  5,再把master1  service mysqld start,master1 select * from testdb.user; 数据正常
  不过slave插入了2条相同数据(master1 sql服务关闭前插入一条,VIP转移master2后又插入一条)
  mysql-mmm problem
  http://code.openark.org/blog/mysql/problems-with-mmm-for-mysql
  http://www.xaprb.com/blog/2011/05/04/whats-wrong-with-mmm/



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603840-1-1.html 上篇帖子: 细聊MySQL的Innodb存储引擎(完) 下篇帖子: mysql-5.6.24源码包编译安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表