主从复制参考: https://blog.csdn.net/u013792404/article/details/91591585
修改其中部分即可 .
1、在2台主机(192.168.8.111,192.168.8.112)上都修改配置 , /etc/my.cnf ; 修改完成后重启MySQL
[mysqld]
port=3306
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
user=mysql
max_connections=1024
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0lower_case_table_names=1
character-set-server=utf8
collation-server=utf8_general_ci# 配置主从
server-id=1 #服务器id (主从必须不一样)
log-bin=mysql-bin #打开日志(主机需要打开)
binlog_format=mixed # binlog日志格式,mysql默认采用statement,建议使用mixed
relay-log=relay-bin #定义relay_log的名称
relay-log-index=slave-relay-bin.index #定义relay_log的位置和名称#在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2.这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
auto-increment-increment=2 #表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
auto-increment-offset=1 #表示自增长字段从那个数开始,他的取值范围是1 .. 65535binlog-ignore-db=mysql #不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/vari/run/mysqld/mysqld.pid
2、重启完成后 , 登录MySQL
两台MySQL中都建立备份账号:backup为用户名,%表示任何远程地址,如下表示密码为'backup'的任何远程地址的backup都可以连接master主机
mysql> grant replication slave on *.* to 'backup'@'%' identified by 'backup' ;
mysql> use mysql ;
mysql> select user,authentication_string,host from user ;
3、配置主从(192.168.8.111 --> 192.168.8.112)
查看第一台机器(192.168.8.111)的状态 : show master status ;
然后在第二台机器(192.168.8.112)上配置第一台机器(192.168.8.111)为主机。
stop slave ;
change master to master_host='192.168.8.111', master_user='backup', master_password='backup', master_log_file='mysql-bin.000005',master_log_pos=154;
start slave ;
然后查看主机状态
show slave status ;
4、配置主从(192.168.8.112 --> 192.168.8.111)
相同的操作,查看192.168.8.112的主机状态 , 在192.168.8.111上配置。
stop slave ;
change master to master_host='192.168.8.112', master_user='backup', master_password='backup', master_log_file='mysql-bin.000005',master_log_pos=154;
start slave ;
然后查看主机状态
show slave status ;
双主测试: 在111中创建数据库, 在112查看数据库生成了; 在112的库中插入表 ,111中有数据表了 。
5、keepalived安装
参考https://blog.csdn.net/u013792404/article/details/98634073
6、keepalived配置
vim /etc/keepalived/keepalived.conf , 2个keepalived配置大体相同,复制过去修改部分即可
! Configuration File for keepalived
global_defs {
router_id 102id #标识节点的字符串,通常为hostname 2台keepalived配置不同即可
}
## keepalived 会定时执行脚本并且对脚本的执行结果进行分析,动态调整vrrp_instance的优先级。这里的权重weight 是与下面的优先级priority有关,如果执行了一次检查脚本成功,则权重会-20,也就是由100 - 20 变成了80,Master 的优先级为80 就低于了Backup的优先级90,那么会进行自动的主备切换。
如果脚本执行结果为0并且weight配置的值大于0,则优先级会相应增加。
如果脚本执行结果不为0 并且weight配置的值小于0,则优先级会相应减少。
vrrp_script check_mysql_alive{
script "/etc/keepalived/check_mysql_alive.sh" ##执行脚本位置
interval 2 ##检测时间间隔
#调用脚本两次之间的间隔,默认为1秒
weight -20 ## 如果条件成立则权重减20(-20)
}
## 定义虚拟路由 VI_1为自定义标识
vrrp_instance VI_1 {
state BACKUP ## 主节点为MASTER,备份节点为BACKUP 两个keepalived都配置为BACKUP,防止脑裂
interface eth0 ## 绑定虚拟IP的网络网卡,与本机IP地址所在的网络接口相同
virtual_router_id 111 ## 虚拟路由ID号
mcast_src_ip 192.168.8.111 ## 本机ip地址
priority 100 ##优先级配置(0-254的值)第二台配置为90 , 2台keepalived配置不同即可
nopreempt ##通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。所以我们要在配置文件加入 nopreempt 非抢占,但是这个参数只能用于state 为backup,故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争。
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产环境下对密码进行匹配
}
virtual_ipaddress {
192.168.8.91 ## 虚拟ip(vip),可以指定多个
}
track_script {
check_mysql_alive ##上面定义vrrp_script的名称
}
}
2个keepalived都配置好后,启动keepalived ;
service keepalived start ; (重启: service keepalived restart )
check_mysql_alive.sh , 复制到2台机器适当位置:
#!/bin/bash
A=`ps -C mysqld --no-header |wc -l`
if [ $A -eq 0 ];then
service mysqld restart
sleep 10
B=`ps -C mysqld --no-header |wc -l`
if [ $B -eq 0 ];then
killall keepalived
fi
fi
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时
7、访问数据库
连接keepalived虚拟地址 : 192.168.8.91:3306 , 连接正常。
1、停止192.168.8.111上的MySQL后,访问仍正常。
2、停止192.168.8.112上的MySQL后,访问仍正常。
keepalived问题: 可能遇到脚本不执行的情况
1、权限不足问题:给脚本加上相关权限,放到/etc/keepalived/下面
2、keepalived配置问题:修改配置vrrp_script check_mysql_alive后面的{换行,并且不必要的空格和注释都删除
3、脚本本身问题;执行脚本测试
4、vrrp_script 需要放到vrrp_instance VI_1的上面才行。
5、查看keepalived启动日志: tail -f /var/log/messages
检查问题:
1、脚本问题检测: 脚本中加入以下, cat /usr/local/echo.log 看是否执行
#!/bin/bash
echo "OK" >> /usr/local/echo.log
2、keepalived配置问题检测 , cat /usr/local/echo.log 看是否执行
vrrp_script check_mysql_alive
{
script "echo "OK" >> /usr/local/echo.log" ##执行脚本位置
interval 2 ##检测时间间隔
#调用脚本两次之间的间隔,默认为1秒
weight -20 ## 如果条件成立则权重减20(-20)
}
来源:https://blog.csdn.net/u013792404/article/details/100535359