注解

    创建复制并不等同于备份策略,你需要另外开发一个有别于复制的MySQL数据的备份机制。

    1. 确保这是一个全新安装且没有数据的master数据库节点。

    2. 编辑master数据库的my.cnf,在[mysqld]的datadir下增加如下部分。

      考虑到其他的服务器,服务器id必须是唯一的。推荐的方式是将master的ID设置为1,后续的每个slave节点序号大于1,使得所有服务器编号如:1,2,3等。

    3. 重启MySQL服务。如果是RHEL/CentOS系统,命令为:

      1. # service mysqld restart

      如果是Debian/Ubuntu系统,命令为:

      1. # service mysql restart
    4. 在master上创建一个用于复制的账户,并赋予权限。我们创建用户”cloud-repl”,密码为”password”。假设master和slave都运行在172.16.1.0/24网段。

      1. # mysql -u root
      2. mysql> create user 'cloud-repl'@'172.16.1.%' identified by 'password';
      3. mysql> grant replication slave on *.* TO 'cloud-repl'@'172.16.1.%';
      4. mysql> flush privileges;
      5. mysql> flush tables with read lock;
    5. 检索当前数据库的位置点。

    6. 注意你数据库实例所返回的文件及位置点。

    7. 退出该会话。

    8. 完成master安装。返回到master的第一个会话,取消锁定并退出MySQL。

      1. mysql> unlock tables;
    9. 安装并配置slave节点。在slave服务器上,运行如下命令。

      1. # yum install mysql-server
      2. # chkconfig mysqld on
    10. 编辑my.cnf,在[mysqld]的datadir下增加如下部分。

      1. server_id=2
      2. innodb_rollback_on_timeout=1
      3. innodb_lock_wait_timeout=600
    11. 重启MySQL。对于RHEL/CentOS系统,使用”mysqld”

      1. 引导slave连接master并进行复制。使用上面步骤中得到数据来替换IP地址,密码,日志文件,以及位置点。

        1. mysql> change master to
        2. -> master_host='172.16.1.217',
        3. -> master_user='cloud-repl',
        4. -> master_password='password',
        5. -> master_log_file='mysql-bin.000001',
        6. -> master_log_pos=412;
      2. 在slave上启动复制功能。

        1. mysql> start slave;
      3. 在slave上可能需要开启3306端口,就像之前在master上所做的一样。

        这对复制来说不是必须的。但如果没有做,当需要进行数据库切换时,你仍然需要去做。

      这将为管理服务器提供一个复制的数据库,用于实现手动故障切换。管理员将CloudStack从一个故障MySQL实例切换到另一个。当数据库失效发生时,你应该:

      1. 停止管理服务器(通过命令:service cloudstack-management stop)

      2. 将数据库的复本服务器修改为master并重启

      3. 确保数据库的副本服务器的3306端口开放给管理服务器。

      4. 重启管理服务器: