mysql> grant replication slave, replication client on *.* to 'repluser'@'192.168.2.%'>
mysql> grant all on *.* to 'mhauser'@'192.168.2.%'> Slave 配置 (192.168.2.38)
在/etc/my.cnf
[mysqld]
server_id = 2
relay_log => read_only = 1
relay_log_purge = 0
log_bin = master-bin
重启mysqld服务
# service mysqld restart
Shutting down MySQL. [ OK ]
Starting MySQL.. [ OK ]
配置半同步slave端:
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
开启半同步:
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show global variables like '%semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
连接master端的配置
mysql> change master to master_host='192.168.2.36',master_user='repluser',master_password='123456',master_log_file='master-bin.000001',master_log_pos=107;
启动以及查看是否正常工作
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.36
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 499
Relay_Log_File:>
>
> Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
在MAH manager端启用ssh無密钥连接各台服务器;
# ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Your> Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
87:fb:6d:2e:f8:f7:72:5d:28:41:01:54:f4:48:7c:12 root@xiong.cn
The key's randomart image is:
+--[ RSA 2048]----+
| .o=Eo |
| .+o. |
| ..o. |
| . . |
| S . . . |
| o . . .|
| .. . ..|
| ....+ . .|
| .o=o+. |
+-----------------+
本机也要一份密钥
# cat .ssh/id_rsa.pub > .ssh/authorized_keys
修改.ssh/authorized_keys 为600权限
chmod go= .ssh/authorized_keys
把密钥复制给其它几个节点
# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.2.36:/root/.ssh
# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.2.38:/root/.ssh
# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.2.40:/root/.ssh
然后验证每个节点是否能正常登录
# ssh root@192.168.2.36 'ifconfig eth0'
eth0 Link encap:Ethernet HWaddr 00:0C:29:16:44:84
inet addr:192.168.2.39 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe16:4484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
# ssh root@192.168.2.38 'ifconfig eth0'
eth0 Link encap:Ethernet HWaddr 00:0C:29:16:44:84
inet addr:192.168.2.38 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe16:4484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
# ssh root@192.168.2.40 'ifconfig eth0'
eth0 Link encap:Ethernet HWaddr 00:0C:29:16:44:84
inet addr:192.168.2.40 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe16:4484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
192.168.2.32 MAH manager :
上传mha4mysql-manager和mha4mysql-node包 之前说过 装这两个会有依赖包的而且都在epel源里面
]# yum -y install mha4mysql-*
已安装:
mha4mysql-manager.noarch 0:0.56-0.el6 mha4mysql-node.noarch 0:0.56-0.el6
作为依赖被安装:
perl-Config-Tiny.noarch 0:2.12-7.1.el6 perl-DBD-MySQL.x86_64 0:4.013-3.el6 perl-Email-Date-Format.noarch 0:1.002-5.el6 perl-Log-Dispatch.noarch 0:2.27-1.el6
perl-MIME-Lite.noarch 0:3.027-2.el6 perl-MIME-Types.noarch 0:1.28-2.el6 perl-Mail-Sender.noarch 0:0.8.16-3.el6 perl-Mail-Sendmail.noarch 0:0.79-12.el6
perl-MailTools.noarch 0:2.04-4.el6 perl-Parallel-ForkManager.noarch 0:0.7.9-1.el6 perl-Params-Validate.x86_64 0:0.92-3.el6 perl-TimeDate.noarch 1:1.16-13.el6
master 安装node 包 和 slave 安装node包 都是一样的 这里就写一条就行了
]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
Installed:
mha4mysql-node.noarch 0:0.56-0.el6
Dependency Installed:
perl-DBD-MySQL.x86_64 0:4.013-3.el6
Complete!
在manager创建相关的目录以及配置文件
# mkdir /etc/masterha
# vim /etc/masterha/app1.cnf
[server default]
user=mhauser
password=123456
manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root
repl_user=repluser
repl_password=123456
ping_interval=1
[server1]
hostname=192.168.2.36
candidate_master=1
master_binlog_dir = "/mydata/data"
[server2]
hostname=192.168.2.38
candidate_master=1
master_binlog_dir = "/mydata/data"
[server3]
hostname=192.168.2.40
在manager上检查ssh连接是否正常
# masterha_check_ssh --conf=/etc/masterha/app1.cnf
Tue Jun 7 05:51:30 2016 - [debug] ok.
Tue Jun 7 05:51:30 2016 - [info] All SSH connection tests passed successfully.
检查脚本是否有误
# masterha_check_repl --conf=/etc/masterha/app1.cnf
Tue Jun 7 05:53:23 2016 - [info] Slaves settings check done.
Tue Jun 7 05:53:23 2016 - [info]
192.168.2.36(192.168.2.36:3306) (current master)
+--192.168.2.38(192.168.2.38:3306)
+--192.168.2.40(192.168.2.40:3306)
Tue Jun 7 05:53:23 2016 - [info] Checking replication health on 192.168.2.38..
Tue Jun 7 05:53:23 2016 - [info] ok.
Tue Jun 7 05:53:23 2016 - [info] Checking replication health on 192.168.2.40..
Tue Jun 7 05:53:23 2016 - [info] ok.
Tue Jun 7 05:53:23 2016 - [warning] master_ip_failover_script is not defined.
Tue Jun 7 05:53:23 2016 - [warning] shutdown_script is not defined.
Tue Jun 7 05:53:23 2016 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
这里没有问题 可以启动mha了,注意它是在前台显示的然后如果master挂了之后 它会自动切换到一台从服务器来充当master,然后它mha 也会停止 然后修好挂掉的服务器之后配置好 然后在启动mha 也可以写个脚本在后台自动检测。
# masterha_manager --conf=/etc/masterha/app1.cnf
Tue Jun 7 05:56:42 2016 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Jun 7 05:56:42 2016 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Tue Jun 7 05:56:42 2016 - [info] Reading server configuration from /etc/masterha/app1.cnf..
然后测试的话 把master停止掉 就行 看mha自动切换从库为主!这里我就不测试了