当前位置: 代码迷 >> 综合 >> Keepalived(双机热备--笔记)
  详细解决方案

Keepalived(双机热备--笔记)

热度:31   发布时间:2023-10-25 19:29:32.0

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
  1. 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';
  1. 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;>> 
  1. 查看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';  
  1. 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;
  1. 重启mysql
		service mysql restart
  1. 查看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服务;
  相关解决方案