[the root Master @ ~] # yum the install MySQL MySQL -Y-Server 
[the root Master @ ~] # Start-Service mysqld 
[the root Master @ ~] # mysqladmin -u the root password 123.com 
[the root Master @ ~] # VI / etc open binary log /my.cnf #, set ID 
[mysqld] 
Server-ID = #backup this setting. 1 2 
log-bin bin-MySQL = 
binlog-DB = the ignore-MySQL, INFORMATION_SCHEMA # binlog log write is ignored library 
auto -increment-increment = 2 # incremental change field 
auto-increment-offset = 1 # initial field ID. 1 
Slave-All Skip-errors = # ignore all errors generated replication      
[root @ master ~] # service mysqld restart

  # Mysql -uroot -p 'password'

Logs and log bin pos value of the position at first view

wKiom1MJYSngwysqAADkFn9zcK8686.jpg

 

master configuration is as follows:

[root@ master ~]# mysql -u root -p123.com
mysql> GRANT  REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED  BY 'replication';
mysql> flush  privileges;
mysql> change  master to
    ->  master_host='192.168.0.203',
    ->  master_user='replication',
    ->  master_password='replication',
    ->  master_log_file='mysql-bin.000002',
    ->  master_log_pos=106;  #对端状态显示的值
mysql> start  slave;         #启动同步

  backup configuration is as follows:

[root@backup ~]#  mysql -u root -p123.com
mysql> GRANT  REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED  BY 'replication';
mysql> flush  privileges;
mysql> change  master to
    ->  master_host='192.168.0.202',
    ->  master_user='replication',
    ->  master_password='replication',
    ->  master_log_file='mysql-bin.000002',
    ->  master_log_pos=106;
mysql> start  slave;

# The Lord synchronization configuration is complete, view the synchronization status Slave_IO and Slave_SQL is YES Description The Lord synchronization is successful.

wKioL1MJYQ7QfZfXAAGQt0H1o1c742.jpg

In the master data insertion test:

wKiom1MJYUCC0nlQAAEk4ruZ3ys652.jpg

 

Check whether the backup synchronization is successful:

wKioL1MJYXyyChXUAADPZraUk3Y684.jpg

You can see the past has been successfully synchronized, the same is inserted into the user table in the backup data, sync, like in the past, dual master to do a success.

 

2, to achieve hot standby configuration keepalived

[Root @ backup ~] # yum install -y pcre-devel openssl-devel popt-devel # installation dependencies

[root@master ~]# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz 
[root@master ~]# tar -xf keepalived-1.2.7.tar.gz -C /usr/local/src/
[root@master ~]# cd /usr/local/
[root@master ~]# ln -sv /usr/local/src/keepalived-1.2.7/ keepalived  #根据实际情况修改 
[root@master ~]# cd keepalived
[root@master ~]#./configure --prefix=/usr/local/keepalived
make && make install

#将keepalived配置成系统服务

[root@master ~]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
chmod +x /etc/init.d/keepalived  
[root@master ~]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ [root@master ~]# chkconfig --add keepalived [root@master ~]# chkconfig keepalived on [root@master ~]# mkdir /etc/keepalived [root@master ~]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ [root@master ~]# cp /usr/local/sbin/keepalived /usr/sbin/ #或者ln -s /usr/local/sbin/keepalived /usr/sbin/

配置keepalived
我们自己在新建一个配置文件,默认情况下keepalived启动时会去/etc/keepalived目录下找配置文件

  1. [root@master ~]# vi /etc/keepalived/keepalived.conf  
    global_defs {    
         notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MYSQL_HA #标识,双主相同 } vrrp_instance VI_1 { state BACKUP #两台配置此处均是BACKUP interface eth0 virtual_router_id 51 #主备相同 priority 100 #优先级,另一台backup改为90 advert_int 1 nopreempt #不抢占,只在优先级高master的机器上设置即可,优先级低backup的机器不设置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200 } } virtual_server 192.168.1.200 3306 { delay_loop 2 #每个2秒检查一次real_server状态 #lb_algo wrr #LVS算法,用不到,我们就关闭了 #lb_kind DR #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL persistence_timeout 60 #会话保持时间,同一IP的连接60秒内被分配到同一台真实服务器 protocol TCP real_server 192.168.1.201 3306 { #检测本地mysql,backup也要写检测本地mysql weight 3 notify_down /usr/local/keepalived/mysql.sh #当mysq服down时,执行此脚本,杀死keepalived实现切换 TCP_CHECK { connect_timeout 10 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 3306 #健康检查端口 } } }
编写检测服务down后所要执行的脚本
[root@master ~]# vi /usr/local/keepalived/mysql.sh
#!/bin/bash
pkill keepalived [root@master ~]# chmod +x /usr/local/keepalived/mysql.sh [root@master ~]# /etc/init.d/keepalived start

注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server 的服务状态,当发现real_server服务故障时,便触发此脚本;我们可以看到,脚本就一个命令,通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。另外,我们不用担心两个MySQL会同时提供数据更新操作, 因为每台MySQL上的keepalived的配置里面只有本机MySQL的IP+VIP,而不是两台MySQL的IP+VIP

启动keepalived

[root@master ~]# /usr/local/keepalived/sbin/keepalived –D     或者/etc/init.d/keepalived start
[root@master ~]# ps -aux | grep keepalived

测试
找一台局域网PC,然后去ping  MySQL的VIP,这时候MySQL的VIP是可以ping的通的
停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本

 

#backup服务器只修改priority为90、nopreempt不设置、real_server设置本地IP。

 

#授权两台Mysql服务器允许root远程登录,用于在其他服务器登陆测试!

mysql> grant all on *.* to'root'@'192.168.0.%' identified by '123.com';

mysql> flush privileges;

3、测试高可用性

1、通过Mysql客户端通过VIP连接,看是否连接成功。

2、停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看VIP在哪台服务器上。

wKiom1MJYbCBORSGAAHChWpI93k009.jpg

 

3、可通过查看/var/log/messges日志,看出主备切换过程

4、master服务器故障恢复后,是否主动抢占资源,成为活动服务器。

 

附:keepalived-1.2.7 keepalived实现服务高可用 http://down.51cto.com/data/2440924 

 

---------------------------------------------------------------------------------------------

针对网卡做bond的做VIP: https://blog.51cto.com/sf1314/2073519 

 

 

[root@master ~]# vi /etc/keepalived/keepalived.conf  
global_defs {    
     notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MYSQL_HA #标识,双主相同 } vrrp_instance VI_1 { state BACKUP #两台配置此处均是BACKUP interface bond0.101 #------->这边指定配置的聚合网卡bond0.101 virtual_router_id 51 #主备相同 priority 100 #优先级,另一台backup改为90 advert_int 1 nopreempt #不抢占,只在优先级高master的机器上设置即可,优先级低backup的机器不设置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.104.101.13/24 #------->这边设置虚拟的VIP地址 } } virtual_server 10.104.101.13/24 3306 { #--------->指定虚拟VIP地址的配置信息 delay_loop 2 #每个2秒检查一次real_server状态 #lb_algo wrr #LVS算法,用不到,我们就关闭了 #lb_kind DR #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL persistence_timeout 60 #会话保持时间,同一IP的连接60秒内被分配到同一台真实服务器 protocol TCP real_server 10.104.101.12 3306 { #10.104.101.12指本地配置的IP地址,检测本地mysql,backup也要写检测本地mysql weight 3 notify_down /usr/local/keepalived/mysql.sh #当mysq服down时,执行此脚本,杀死keepalived实现切换 TCP_CHECK { connect_timeout 10 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 3306 #健康检查端口 } } }
 

 

附:修改mysql账户下的replication的密码可以参考本文章:https://blog.51cto.com/sf1314/2094562