一、主主数据同步,为了防止丢失,可全量备份。
$ mysqldump —all-databases -uroot -p > mysql.sql
二、配置MySQL主主同步
主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同步。
创建同步账号
1. 分别在两台机器上配置同步账号
master1机器上:
mysql> grant all privileges on *.* to 'repl'@'%' identified by '123456';mysql> flush privileges;
master2机器上:
mysql> grant all privileges on *.* to 'repl'@'%' identified by '123456';mysql> flush privileges;
2. 配置数据库参数
master1机器上:
关闭mysql
$ service mysql stop
更改配置文件/etc/my.cnf
$ vi /etc/my.cnf
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockserver-id=1log-bin=mysql-binrelay_log=mysql-relay-binbinlog_format=ROWreport-host = master2report-user = replreport-password = 123456report-port = 3306[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid
其中标红为新增内容:
server-id=1
log-bin=mysql-bin
binlog_format=ROW
report-host = master2
report-user = repl
report-password = 123456
report-port = 3306
Log-bin:启动二进制日志文件
Server-id:本机数据库ID(和)
Binlog_format:一共有三种复制方式:ROW\STATEMENT\MIXED,默认是STATEMENT
report-host,report-user,report-password,report-port为master复制的主机名,用户,密码以及端口号。
启动mysql
$ service mysql start
Master2机器上:
关闭mysql
$ service mysql stop
更改配置文件/etc/my.cnf
$ vi /etc/my.cnf
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockserver-id=1log-bin=mysql-binrelay_log=mysql-relay-binbinlog_format=ROWreport-host = master2report-user = replreport-password = 123456report-port = 3306[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid
启动mysql
$ service mysql start
3. 设置master2同步master1
master1机器上:
master2机器上:
#设置master2同步master1数据mysql> change master to master_host='master1IP', master_port=3306, master_user='repl',master_password='123456', master_log_file='binlog.000003',master_log_pos=365;#开启同步mysql> start slave;#执行这命令后 注意观察下面这两个参数,必须要都是yes才行mysql> show slave status \GSlave_IO_Running: YesSlave_SQL_Running: Yes
master_host表示是master1的IP
master_user表示主库master1上允许同步的用户
maser_password表示同步用户的密码
master_log_file表示从哪个binlog文件开始同步
master_log_pos表示从该binlog文件的那个pos节点位置开始同步
我们查看同步是否主要是查看Slave_IO_Running与Slave_SQL_Running选项。如果正常同步,这两选必须同时为YES。
如果Slave_IO_Running为NO,说明可能是从库与主库的网络不通。
如果Slave_SQL_Running为NO,说明很可能是从库与主库的数据不一致。
如果Slave_IO_Running: Connecting,可能是同步的用户密码写错了。
同样的 反过来做相同操作
4. 设置master1同步master2
master2机器上:
master1机器上:
mysql> change master tomaster_host='10.1.1.21', master_port=3306, master_user='repl',master_password='123456', master_log_file='binlog.000004',master_log_pos=207;mysql> start slave;mysql> show slave status \G #执行这命令后 注意观察下面这两个参数,必须要都是yes才行Slave_IO_Running: YesSlave_SQL_Running: Yes
介此,主主同步打造完成,可以简单测试一下,分别在两个机器上写数据 看看会不会同步到另一台机器上
PS:如果报错Slave_IO_Running: NO 可以检查同步的账号是否创建正常!
三、安装keepalived 并设置监控
keepalived是安装在两台MySQL服务器上的
首先安装keepalived 过程不解释就正常解压安装就好
安装后配置 vim /etc/keepalived/keepalived.conf 内容如下
master1(10.1.1.20)的配置文件
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL}vrrp_instance VI_1 {state backup #两台配置此处均是BACKUPinterface eth0virtual_router_id 51priority 100 #优先级,另一台改为90advert_int 1nopreempt #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.1.1.25}}virtual_server 10.1.1.25 3306 {delay_loop 6lb_algo wrrlb_kind DRpersistence_timeout 50 #会话保持时间protocol TCPreal_server 10.1.1.20 3306 {weight 3notify_down /tmp/nimei.sh #检测到mysql服务挂了就执行这个脚本(脚本要自己写哈)TCP_CHECK {connect_timeout 10 #连接超时时间nb_get_retry 3 #重连次数delay_before_retry 3 #重连间隔时间connect_port 3306 #健康检查端口}}}
master2(10.1.1.21)的配置文件
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL}vrrp_instance VI_1 {state backupinterface eth0virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.1.1.25}}virtual_server 10.1.1.25 3306 {delay_loop 6lb_algo wrrlb_kind DRpersistence_timeout 50protocol TCPreal_server 10.1.1.21 3306 {weight 3notify_down /tmp/nimei.shTCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 3306}}}
编写监控mysql服务是否挂了的脚本,按照上面配置文件的位置编写脚本。
vim /tmp/nimei.sh
#!/bin/shpkill keepalived
脚本很简单就一句,目的是当keepalived检测到mysql服务挂了之后触发这个脚本,杀死keepalived进程,让另一台机器接管好 修改后启动keeplived服务
介此整个集群搭建完成
四、测试
找一台机器用虚拟ip连接mysql
这样成功连上了,然后你可以任意关闭某台机器,或者某台机器的mysql服务,看看还能不能连上!!
