Keepalived(双机热备)
------------------------------------------------------keepalived配置--------------------------------------------------
1.准备工作
vip : 192.168.0.1master1: 192.168.0.2master2: 192.168.0.3
2.安装lnmp:https://lnmp.org/install.html
3. 要给你的机器设置一个虚拟ip
# ifconfig eth0:0 192.168.0.1 netmask 255.255.255.248 up
4.安装keepalived
# cd /usr/local/src # wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz# tar zxvf keepalived-1.2.2.tar.gz# cd keepalived-1.2.2 # ./configure --prefix=/usr/local/keepalived# make && make install
5.修改keepalived.conf配置文件(192.168.0.2机器上的keepalived.conf)
# vim /etc/keepalived/keepalived.conf#ConfigurationFile for keepalived global_defs { notification_email { 12345678@qq.com ######定义接受邮件的邮箱 } notification_email_from test@126.com ######定义发送邮件的邮箱 smtp_server smtp@163.comsmtp_connect_timeout 10 } ######定义vrrptest实例 vrrp_instance VI_1 { state BACKUP ######服务器状态 interface eth0 ######使用的接口 virtual_router_id 51 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换 priority 150 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER advert_int 1 ######服务器之间的存活检查时间 authentication { auth_type PASS ######认证类型 auth_pass 111111 ######认证密码,一组lvs 服务器的认证密码必须一致 } virtual_ipaddress { 192.168.0.1/24 ######虚拟IP地址 } }
6.修改keepalived.conf配置文件(192.168.0.3机器上的keepalived.conf)
# vim /etc/keepalived/keepalived.conf#ConfigurationFile for keepalived global_defs { notification_email { 12345678@qq.com ######定义接受邮件的邮箱 } notification_email_from test@126.com ######定义发送邮件的邮箱 smtp_server smtp@163.comsmtp_connect_timeout 10 } ######定义vrrptest实例 vrrp_instance VI_1 { state BACKUP ######服务器状态 interface eth0 ######使用的接口 virtual_router_id 51 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换 priority 100 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER advert_int 1 ######服务器之间的存活检查时间 authentication { auth_type PASS ######认证类型 auth_pass 111111 ######认证密码,一组lvs 服务器的认证密码必须一致 } virtual_ipaddress { 192.168.0.1/24 ######虚拟IP地址 } }
7.配置防火墙
# vim /eth/sysconfig/iptables
添加:
-A INPUT -d 192.168.0.1/32 -j ACCEPT #放出自己的vip-A INPUT -d 224.0.0.18 -j ACCEPT #添加VRRP通讯支持
重启防火墙
# service iptables restart
8.启动keepalived(master1和master2)服务:
# service keepalived start 或者 /etc/init.d/keepalived start
分别执行 ip addr 可以看到master1里多出一句 inet 192.168.0.2/32 scope global eth0
如果关闭master1的keep服务,则master2中也会出现上面那一句话
9.找一台同网段的机器上访问(比如192.168.0.1)
>> mysql -u root -p123456 -h 192.168.0.1 -port 3306>> use test>> select * from member;
10.在两台机器上分别装有一个脚本
checksql.sh
export LD_LIBRARY_PATH=/usr/local/mysql
while true; do#启动一个循环,定时检查进程是否存在server=`ps aux | grep mysql | grep -v grep`if [ ! "$server" ]; then#如果不存在就重新启动/etc/init.d/keepalived stop && /etc/init.d/mysql start && /etc/init.d/keepalived start#启动后沉睡10ssleep 10fi#每次循环沉睡10ssleep 5
done
10.给checksql.sh 权限
chmod 755 checksql.sh
- nohup checksql.sh &
--------------------------------------------热备----------------------------------------------
-- mysql 双机热备实现方案(A,B) --
A: ip 192.198.0.30
B: ip 192.198.20.30
A->B的过程:
1.创建一个用于备份的用户B:
>> grant replication slave on *.* to 'usera'@'192.168.0.3' identified by 'usera';
- vim /etc/my.cnf (这个是lnmp一键安装下mysql的配置文件)
在mysqld 模块下 有
log-bin=mysql-binbinlog_format=mixedserver-id=1read-only=0#binlog-do-db=test #只关注这个一个库的记录到binlog日志里#binlog-ignore-db = mysql #忽略这个数据库,不记录到binlog中auto-increment-increment=10 #auto-increment-offset=1
3.获取服务器状态和同步数据(1,2,4如果有历史数据,则需要导出表保存,如果是新表,则忽略)
1)锁定表
>> FLUSH TABLES WITH READ LOCK;
2)导出数据库
>> mysqldump -uroot -p -d dbname > db.sql
3)查看A的binlog日志
>> show master status\G
记录file名称以及position位置File:mysql-bin.00004Position:1700
4)解除表
>> UNLOCK TABLES;
5)重启服务器
service mysql restart
4.设置B服务器
1)打开B的数据库配置文件
vim /etc/my.cnf
[mysqld]log-bin=mysql-binbinlog_format=mixedserver-id = 2 #保证每台mysql服务器的id不同#replication-do-db = test #需要关注的数据库并记录到binlog中repliation-ignore-db = mysql #不需要关注也不记录到binlog中relay-log=mysqld-relay-bin # 中继日志的名字log-slave-updates = ON # 双主热备打开,要是主从的话则需要关闭
2)进入B的mysql命令行
>> CHANGE MASTER TO MASTER_HOST='192.168.0.3',MASTER_USER='usera',MASTER_PASSWORD='usera',MASTER_LOG_FILE='mysql-bin.000033',MASTER_LOG_POS=107;如果抛出异常ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log>> stop slave;>> reset slave;>>
- 查看slave线程
>> show slave status\G
关注
Slave_IO_Running:YESSlave_SQL_Running:YES
说明开启成功如果其中有出现NO,则说明开启失败进入/usr/local/mysql/var/删除 机器名-relay-bin.0000001 机器名-relay-bin.index 和 relay-log.info 或者 预设的名称-relay-bin.00001,预设的名称-relay-bin.index 和 relay-log.info 并且重启MYSQL服务;命令:rm -rf 机器名-relay-bin.* relay-log.info或者rm -rf 预设的名称-relay-bin.* relay-log.info
B->A的过程
1.创建一个用于备份的用户A:
>> grant replication slave on *.* to 'userb'@'192.168.0.1' identified by '123';
- B的mysql配置my.cnf
vim /etc/my.cnf
在mysqld 模块下 有
log-bin=mysql-binbinlog_format=mixedserver-id=2read-only=0#binlog-do-db=test #只关注这个一个库的记录到binlog日志里#binlog-ignore-db = mysql #忽略这个数据库,不记录到binlog中auto-increment-increment=10 #auto-increment-offset=2
3.获取服务器状态和同步数据
1)查看B的binlog日志
>> show master status\G
记录file名称以及position位置
File:mysql-bin.00004Position:1700
4.设置A服务器
1)打开A的数据库配置 开启中继服务
vim /etc/my.cnf
更改
server-id = 1 #保证每台mysql服务器的id不同#replication-do-db = test #需要关注的数据库并记录到binlog中repliation-ignore-db = mysql #不需要关注也不记录到binlog中relay-log=mysqld-relay-bin # 中继日志的名字log-slave-updates = ON
2)进入A的mysql命令行
>> CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='userb',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin.000014',MASTER_LOG_POS=7803;如果抛出异常ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log>> stop slave;>> reset slave;>> CHANGE MASTER TO MASTER_HOST='A服务器ip',MASTER_USER='usera',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin.000033',MASTER_LOG_POS=107;
- 重启mysql
service mysql restart
- 查看slave线程
>> show slave status\G
关注Slave_IO_Running:YES
Slave_SQL_Running:YES
说明开启成功
如果其中有出现NO,则说明开启失败
进入/usr/local/mysql/var/
删除 机器名-relay-bin.0000001 机器名-relay-bin.index 和 relay-log.info 并且重启MYSQL服务;