一 前期规划
1.1 主机规划
1.2 虚拟IP规划
1.3 用户列表
提示:以上角色需要在所有节点添加。
1.4 整体架构
1.4 hosts修改
1 [root@localhost ~]# vi /etc/sysconfig/network 2 NETWORKING=yes 3 HOSTNAME=Master01 4 [root@Master01 ~]# 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
提示:所有主机添加对应的hostname和hosts,此步骤非必须,为方便之后简化配置,建议修改hosts。
1.5 NTP配置
略,具体可参考笔记NTP-《003.NTP客户端配置》。
提示:针对高可用的优化,建议所有节点均配置NTP服务。
二 部署MySQL
2.1 安装MySQL
略,具体可参考MySQL主从复制-《MySQL高可用主从复制部署》。
提示:除去monitor节点外所有节点均需要部署。
三 双主复制部署
3.1 master01 my.cf配置
1 [root@Master01 ~]# 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
注意:
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
方法一:
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 [root@Master01 ~]# service mysqld start 2 [root@Master01 ~]# 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 [root@Master01 ~]# service mysqld restart 9 [root@Master01 ~]# mysql -uroot -px120952576 10 mysql> show master status;
master01:
file:mysql-bin.000001
position:120
注意:读写分离对于用于super或者all privileges权限的用户无效,需要创建普通用户进行测试。
3.4 Master02创建账号
略,同3.3 Master01创建账号同样操作即可。
1 [root@Master01 ~]# service mysqld restart 2 [root@Master01 ~]# mysql -uroot -px120952576 3 mysql> show master status;
master02:
file:mysql-bin.000001
position:120
3.5 启动双主复制
提示:如果Master01和Master02已经存在数据,则在开启主备复制之前,需要将Master01和Master02手动同步一次(/var/lib/mysql整个目录打包tar.gz),具体方法略。
注意:本实验都是重新安装的MySQL,可直接启动同步。
1 [root@Master01 ~]# 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 status\G #查看slave状态
略
3.3 启动Master02的slave功能
1 [root@Master02 ~]# mysql -uroot -px120952576 2 mysql>