zoukankan      html  css  js  c++  java
  • mysqlmmm官方安装指南翻译

                         mysql-mmm安装指南

    翻译:飞鸿无痕

    转载请注明出处!http://blog.chinaunix.net/u3/93755/showart.php?id=2379392

    由于本人英语水平不是很好,翻译难免有错误,如果有翻译错误的地方,请指出,谢谢!

     

    注意:本指南只是一个草稿,如果你觉得有些地方需要改善、扩展或者修正的话,你可以随意更改。本指南所描述的是基于Debian Lenny (5.0)平台的mysql-mmm2的安装(不包含mmm tools)。

    一个最基本的安装必须至少包含2个数据库服务器和一个监控服务器,在这个指南中,我用了5台基于Debian Lenny (5.0)平台的服务器

    function

    ip

    hostname

    server id

    monitoring host    

    192.168.0.10

          mon          

    -

    master 1

    192.168.0.11

          db1

    1

    master 2

    192.168.0.12

          db2

    2

    slave 1

    192.168.0.13

          db3

    3

    slave 2

    192.168.0.14

          db4

    4


    我用了以下的虚拟IP,他们将会在被mmm分配

    ip

    role

    description

    192.168.0.100

    writer

    你的应用程序应该连接到这个ip进行写操作

    192.168.0.101

    reader

    你的应用程序应该链接到这些ip中的一个进行读操作

    192.168.0.102

    reader

    192.168.0.103

    reader

    192.168.0.104

    reader

     

     

    Master1的基本配置

    首先我们在所有的主机上安装mysql

    aptitude install mysql-server

    然后我们修改/etc/mysql/my.cnf文件的配置,加入以下行,确保所有的主机使用的不同的server id

    server_id           = 1

    log_bin             = /var/log/mysql/mysql-bin.log

    log_bin_index       = /var/log/mysql/mysql-bin.log.index

    relay_log           = /var/log/mysql/mysql-relay-bin

    relay_log_index     = /var/log/mysql/mysql-relay-bin.index

    expire_logs_days    = 10

    max_binlog_size     = 100M

    log_slave_updates   = 1

    read_only           = 1

     

    删除下面这行:

    bind-address = 127.0.0.1

    当然要配置绑定到你的ip上:

    bind-address = <your_IP_address>

    然后为了让我们更改的配置文件生效需要重启下mysql服务:

    /etc/init.d/mysql restart

     

     

    创建用户

    现在我们来创建需要的用户,我们需要创建3个不同的用户

    功能

    描述

    权限

    monitor user

    mmm监控用于对mysql服务器进程健康检查

    REPLICATION CLIENT

    agent user

    mmm代理用来更改只读模式,复制的主服务器等等   

    SUPER, REPLICATION CLIENT, PROCESS

    relication user

    用于复制

    REPLICATION SLAVE

     

    创建用户语句的代码如下:

    GRANT REPLICATION CLIENT                 ON *.* TO 'mmm_monitor'@'192.168.0.%' IDENTIFIED BY 'monitor_password';

    GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.0.%'   IDENTIFIED BY 'agent_password';

    GRANT REPLICATION SLAVE                  ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY 'replication_password';

    注意:就以上这些允许用户连接的主机而言我们可以设置更多的限制,比如mmm监控主机是从192.168.0.10连接的,mmm代理和复制是从192.168.0.11 - 192.168.0.14连接的,

     

     

    服务器之间的数据同步

    我们假定db1上的数据是正确的。假如你有一个空的数据库,你仍然需要同步我们刚才创建的些帐号。

    首先,当我们创建备份的过程中必须保证没有人更改数据库上的数据:

    (db1) mysql> FLUSH TABLES WITH READ LOCK;

    然后获取二进制日志文件目前的位置,我们一会在设置db2db3db4主从复制的时候要用到:

    (db1) mysql> SHOW MASTER STATUS;

    +------------------+----------+--------------+------------------+

    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +------------------+----------+--------------+------------------+

    | mysql-bin.000002 |      374 |              |                  |

    +------------------+----------+--------------+------------------+

    1 row in set (0.00 sec)

    先不要关闭这个mysql命令行模式。假如你关闭了它,那么刚才设置的数据库锁定就会被解锁,因此你需要再开启一个终端,并输入:

    db1$ mysqldump -u root -p --all-databases > /tmp/database-backup.sql

    现在我们可以对数据库解除锁定了,在上面第一个mysql命令行输入:

    (db1) mysql> UNLOCK TABLES;

    复制刚才的数据库备份到db2, db3 and db4

    db1$ scp /tmp/database-backup.sql <user>@192.168.0.12:/tmp

    db1$ scp /tmp/database-backup.sql <user>@192.168.0.13:/tmp

    db1$ scp /tmp/database-backup.sql <user>@192.168.0.14:/tmp

    然后将备份导入到db2, db3 and db4

    db2$ mysql -u root -p < /tmp/database-backup.sql

    db3$ mysql -u root -p < /tmp/database-backup.sql

    db4$ mysql -u root -p < /tmp/database-backup.sql

    然后刷新db2, db3 and db4的权限,我们更改了user表,所以mysql要重新读取这个表

    (db2) mysql> FLUSH PRIVILEGES;

    (db3) mysql> FLUSH PRIVILEGES;

    (db4) mysql> FLUSH PRIVILEGES;

    debianubuntu中,从db1复制/etc/mysql/debian.cnf文件中的密码到db2db3db4,这个密码是用来启动和停止数据库的

    现在所有的数据库的数据都是一致的了,我们可以开始设置主从复制来保持数据一致的状况了!

     

     

    设置同步

    通过下面的命令设置在db2, db3db4上的复制

    (db2) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',

                  master_password='replication_password', master_log_file='<file>', master_log_pos=<position>;

    (db3) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',

                  master_password='replication_password', master_log_file='<file>', master_log_pos=<position>;

    (db4) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',

                  master_password='replication_password', master_log_file='<file>', master_log_pos=<position>;

    请在<file> <position>上插入我们前面在db1上用“show master status”看到的二进制日志文件名和二进制日志的位置。

    然后用以下命令启动3个主机上的slave进程

    (db2) mysql> START SLAVE;

    (db3) mysql> START SLAVE;

    (db4) mysql> START SLAVE;

    现在用一下命令检查所有主机上的复制是否正常

    (db2) mysql> SHOW SLAVE STATUS\G

    *************************** 1. row ***************************

                    Slave_IO_State: Waiting for master to send event

                    Master_Host: 192.168.0.11

                    Master_User: replication

                    Master_Port: 3306

                    Connect_Retry: 60

    (db3) mysql> SHOW SLAVE STATUS\G

    *************************** 1. row ***************************

                    Slave_IO_State: Waiting for master to send event

                    Master_Host: 192.168.0.11

                    Master_User: replication

                    Master_Port: 3306

                    Connect_Retry: 60

    (db4) mysql> SHOW SLAVE STATUS\G

    *************************** 1. row ***************************

                    Slave_IO_State: Waiting for master to send event

                    Master_Host: 192.168.0.11

                    Master_User: replication

                    Master_Port: 3306

                    Connect_Retry: 60

     

    现在我们要设置db1db2上复制,首先我们要确定master_log_file master_log_pos的值:

    (db2) mysql> SHOW MASTER STATUS;

    +------------------+----------+--------------+------------------+

    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +------------------+----------+--------------+------------------+

    | mysql-bin.000001 |       98 |              |                  |

    +------------------+----------+--------------+------------------+

    1 row in set (0.00 sec)

    我们用下面的命令配置db1上的复制:

    (db1) mysql> CHANGE MASTER TO master_host = '192.168.0.12', master_port=3306, master_user='replication',master_password='replication_password',master_log_file='<file>',

    master_log_pos=<position>;

    请在<file> <position>上插入我们前面在db2上用“show master status”看到的二进制日志文件名和二进制日志的位置。

    启动从进程

    (db1) mysql> START SLAVE;

    检查db1上的复制是否正常

    (db1) mysql> SHOW SLAVE STATUS\G
    *************************** 1. row *************************** 
                    Slave_IO_State: Waiting for master to send event 
                    Master_Host: 192.168.0.12
                    Master_User: <replication>
                    Master_Port: 3306 
                    Connect_Retry: 60 
    所有的复制应该已经ok了,试着在db1db2上插入数据,然后看看会不会同步更新到所有的节点上去。
     
     

    MMM安装

    创建用户
    可选的:创建MMM脚本和配置文件的所有者,这将能为安全地管理监控脚本提供更简单的方法。

    useradd --comment "MMM Script owner" --shell /sbin/nologin mmmd

     

    监控主机

    首先安装依存包:

    aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl libclass-singleton-perl libproc-daemon-perl libalgorithm-diff-perl libdbi-perl libdbd-mysql-perl

    接下来取得最新版本的mysql-mmm-common*.deb mysql-mmm-monitor*.deb文件,并安装它们:

    dpkg -i mysql-mmm-common_*.deb mysql-mmm-monitor*.deb

     

    数据库主机

    首先安装依存包:

    aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl iproute libnet-arp-perl libproc-daemon-perl libalgorithm-diff-perl libdbi-perl libdbd-mysql-perl

    接下来取得最新版本的mysql-mmm-common*.deb mysql-mmm-agent*.deb文件,并安装它们:

    dpkg -i mysql-mmm-common_*.deb mysql-mmm-agent_*.deb

     

    配置MMM

    所有的配置选项都集合在了一个叫/etc/mysql-mmm/mmm_common.conf的单独文件中,系统中所有主机的该文件内容都是一样的:

    active_master_role          writer

     

     

    <host default>

        cluster_interface       eth0

     

        pid_path                /var/run/mmmd_agent.pid

        bin_path                /usr/lib/mysql-mmm/

     

        replication_user        replication

        replication_password    replication_password

     

        agent_user              mmm_agent

        agent_password          agent_password

    </host>

     

    <host db1>

        ip                      192.168.0.11

        mode                    master

        peer                    db2

    </host>

     

    <host db2>

        ip                      192.168.0.12

        mode                    master

        peer                    db1

    </host>

     

    <host db3>

        ip                      192.168.0.13

        mode                    slave

    </host>

     

    <host db4>

        ip                      192.168.0.14

        mode                    slave

    </host>

     

     

    <role writer>

        hosts                   db1, db2

        ips                     192.168.0.100

        mode                    exclusive

    </role>

     

    <role reader>

        hosts                   db1, db2, db3, db4

        ips                     192.168.0.101, 192.168.0.102, 192.168.0.103, 192.168.0.104

        mode                    balanced

    </role>

     

    不要忘记了拷贝这个文件到所有的主机(包括监控主机)!

     

    在数据库主机上我们需要编辑/etc/mysql-mmm/mmm_agent.conf文件,根据其他主机的不同更改db1的值(db2就将db1更改成db2):

    include mmm_common.conf

    this db1

     

    在监控主机上我们需要编辑/etc/mysql-mmm/mmm_mon.conf文件:

    include mmm_common.conf

     

    <monitor>

        ip                      127.0.0.1

        pid_path                /var/run/mmmd_mon.pid

        bin_path                /usr/lib/mysql-mmm/

        status_path             /var/lib/misc/mmmd_mon.status

        ping_ips                192.168.0.1, 192.168.0.11, 192.168.0.12, 192.168.0.13, 192.168.0.14

    </monitor>

     

    <host default>

        monitor_user            mmm_monitor

        monitor_password        monitor_password

    </host>

     

    debug 0

     

    ping_ips选项是通过ping这些ip来确认监控机的网络连接是正常的,我配置的是我的交换机(192.168.0.1)和其他四台数据库服务器。

     

     

    启动MMM

    启动代理

    (在数据库服务器上)编辑/etc/default/mysql-mmm-agent来开启代理

    ENABLED=1

    然后启动它:

    /etc/init.d/mysql-mmm-agent start

     

    启动监控

    (在监控服务器上)编辑/etc/default/mysql-mmm-monitor文件来开启监控

    ENABLED=1

    然后启动它:

    /etc/init.d/mysql-mmm-monitor start

    等待几秒钟mmmd_mon启动,在几秒钟后你可以用mmm_control来检查群集的状态

    mon$ mmm_control show

      db1(192.168.0.11) master/AWAITING_RECOVERY. Roles:

      db2(192.168.0.12) master/AWAITING_RECOVERY. Roles:

      db3(192.168.0.13) slave/AWAITING_RECOVERY. Roles:

      db4(192.168.0.14) slave/AWAITING_RECOVERY. Roles:

    因为这是第一次启动,所以我们的监控还不知道我们的主机,因此会设置所有主机的状态为AWAITING_RECOVERY并且会记录一条警告信息!

    mon$ tail /var/log/mysql-mmm/mmmd_mon.warn

    2009/10/28 23:15:28  WARN Detected new host 'db1': Setting its initial state to 'AWAITING_RECOVERY'. Use 'mmm_control set_online db1' to switch it online.

    2009/10/28 23:15:28  WARN Detected new host 'db2': Setting its initial state to 'AWAITING_RECOVERY'. Use 'mmm_control set_online db2' to switch it online.

    2009/10/28 23:15:28  WARN Detected new host 'db3': Setting its initial state to 'AWAITING_RECOVERY'. Use 'mmm_control set_online db3' to switch it online.

    2009/10/28 23:15:28  WARN Detected new host 'db4': Setting its initial state to 'AWAITING_RECOVERY'. Use 'mmm_control set_online db4' to switch it online.

     

    现在我们设置我们的主机为在线状态(db1最先,因为其他的主机是从db1复制更新的!):

    mon$ mmm_control set_online db1

    OK: State of 'db1' changed to ONLINE. Now you can wait some time and check its new roles!

    mon$ mmm_control set_online db2

    OK: State of 'db2' changed to ONLINE. Now you can wait some time and check its new roles!

    mon$ mmm_control set_online db3

    OK: State of 'db3' changed to ONLINE. Now you can wait some time and check its new roles!

    mon$ mmm_control set_online db4

    OK: State of 'db4' changed to ONLINE. Now you can wait some time and check its new roles!

     

    官方文档链接:http://mysql-mmm.org/mmm2:guide

     

    由于放到博客是格式有的有点乱,欢迎下载doc文档阅读!

    http://blogimg.chinaunix.net/blog/upfile2/101103085239.rar

     

  • 相关阅读:
    A naive AI for TicTacToe
    table font size LaTex
    Python:关于爬虫(2)
    Python:关于爬虫(1)
    RStudio的安装
    Python中安装numpy matplotlib scipy
    python函数编程
    JavaScript的基础语法
    数据结构——线性表的顺序表示(5)
    数据结构——线性表的顺序表示(4)
  • 原文地址:https://www.cnblogs.com/feihongwuhen/p/7170371.html
Copyright © 2011-2022 走看看