首先在两台服务器上安装相应版本的mysql,详细安装过程这里就不再进行描述,查看相关文档进行安装
mysql服务器A 192.168.1.126
mysql服务器B192.168.1.127
两台均是主服务器
mysql版本:5.6.33
系统版本Centos6.6 x86_64
主主配置过程
通常,主从配置需要主服务器上为从服务器建立一个授权访问的账户,给予REPLICAITON SLAVE权限
服务器A和服务器B这里需要互为主从,都需要定义一个授权账户以便进行同步
服务器A和B上执行操作
grant replication slave on *.* to 'master'@'192.168.1.%' identified by 'mima';
flush privileges;
A服务器上的my.cnf文件,修改添加的部分
basedir = /usr/local/mysql
datadir = /var/mysql/data
server_id = 10
log-bin = mysql-bin
auto-increment-increment=2
auto-increment-offset=1
log-slave-updates
sync_binlog=1
#replicate-ignore-db = mysql,information_schema 忽略同步更新的库
B服务器上的my.cnf文件,修改添加的部分
basedir = /usr/local/mysql
datadir = /var/mysql/data
server_id = 15
log-bin = mysql-bin
auto-increment-increment=2
auto-increment-offset=1
log-slave-updates
sync_binlog=1
#replicate-ignore-db = mysql,information_schema 忽略同步更新的库
服务器A和B重启mysql服务
/etc/init.d/mysqld restart
A和B服务器上查看作为主服务器的状态信息,相关的mysql信息如下
mysql> show master status;
+-----------------------+-----------+--------------------+------------------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+-----------+--------------------+------------------------+---------------------------+
| mysql-bin.000001 | 120 | | | |
+-----------------------+-----------+--------------------+------------------------+--------------------------+
1 row in set (0.00 sec)
在mysql中添加二进制的日志文件名及位置字段,如以上是A服务器(192.168.1.126)上的信息,需要添加到B(192.168.1.127)服务器上,如下操作:
步骤一:
B服务器(192.168.1.127)上授权A能访问数据库
grant replication slave on *.* to 'master'@'192.168.1.%' identified by 'mima';
flush privileges;
步骤二:
change master to master_host'192.168.1.127',master_port=3306,master_user='master',master_password='mima',master_log_file='mysql-bin.000001',master_log_pos=781;
授权及指定同步信息操作完成后重启mysql服务
B服务器上操作
A服务器(192.168.1.126)上授权B能访问数据库
步骤一:
grant replication slave on *.* to 'master'@'192.168.1.%' identified by 'mima';
flush privileges;
步骤二:
B服务器添加A作为为主服务器
change master to master_host='192.168.1.126', master_port=3306, master_user='master', master_password='mima', master_log_file='mysql-bin.000003', master_log_pos=920;
授权及指定同步信息操作完成后重启mysql服务
安装keepalived,这里是使用yum安装的方法
yum install -y keepalived
服务器上配置
A服务器的keepalived配置:
! Configuration File for keepalived
global_defs {
notification_email {
960477251@qq.com #keepalived出现问题发送邮件的地址
}
notification_email_from Alexandre.Cassen@firewall.loc #出现问题后用哪个账号发送邮件
smtp_server 192.168.1.24 #SMTP服务器ip地址
smtp_connect_timeout 30 #stmp链接超时时间
router_id master01 #机器表示ID,改为自己的主机名
}
vrrp_instance VI_1 {
state BACKUP #此处指定两台主主都为BACKUP,指定没有效果,需要通过优先级来计算
interface eth0 #绑定网卡,配置虚拟ip也是从现有的网卡上加的
priority 100 #节点优先级,优先级高为master,另一个设置成90
advert_int 1 #检查时间间隔
nopreempt 1 #不抢占,恢复服务后也不抢占回来,只在优先级高的机器上配置即可,低优先级无需配置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.150 #Vip地址配置,虚拟ip地址
}
}
virtual_server 192.168.1.150 3306 { # 虚拟ip地址 端口
delay_loop 6 #每隔一段时间检查real_server通信状态
lb_algo rr #请求的轮询方式算法
lb_kind NAT #哪种路由模式
nat_mask 255.255.255.0
persistence_timeout 50 #保持多久的会话时间
protocol TCP #TCP协议方式去检测对方
real_server 192.168.1.126 3306 { #真实主机ip及端口
weight 1 #权重值,轮询几次?
notify_down /usr/local/mysql/bin/mysql.sh 服务监测down后执行的脚本
TCP_CHECK {
connect_timeout 3 #重连超时时间
nb_get_retry 3 #发生通信中断,重试此时
delay_before_retry 3 #重新连接时间间隔,多久尝试一次重连
connect_port 3306 #端口健康监测
}
}
}
B服务器上的keepalived配置内容:
! Configuration File for keepalived
global_defs {
notification_email {
960477251@qq.com #keepalived出现问题发送邮件的地址
}
notification_email_from Alexandre.Cassen@firewall.loc #出现问题后用哪个账号发送邮件
smtp_server 192.168.1.24 #SMTP服务器ip地址
smtp_connect_timeout 30 #stmp链接超时时间
router_id master02 #机器表示ID,改为自己的主机名
}
vrrp_instance VI_1 {
state BACKUP #此处指定两台主主都为BACKUP,指定没有效果,需要通过优先级来计算
interface eth0 #绑定网卡,配置虚拟ip也是从现有的网卡上加的
priority 90 #节点优先级,优先级高为master,另一个设置成90
advert_int 1 #检查时间间隔
# nopreempt 1 #不抢占,只在优先级高的机器上配置即可,底优先级无需配置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.150 #Vip地址配置,虚拟ip地址
}
}
virtual_server 192.168.1.150 3306 { # 虚拟ip地址 端口
delay_loop 6 #每隔一段时间检查real_server通信状态
lb_algo rr #请求的轮询方式算法
lb_kind NAT #哪种路由模式
nat_mask 255.255.255.0
persistence_timeout 50 #保持多久的会话时间
protocol TCP #TCP协议方式去检测对方
real_server 192.168.1.127 3306 { #真实主机ip及端口
weight 1 #权重值,轮询几次?
notify_down /usr/local/mysql/bin/mysql.sh 服务监测down后执行的脚本
TCP_CHECK {
connect_timeout 3 #重连超时时间
nb_get_retry 3 #发生通信中断,重试此时
delay_before_retry 3 #重新连接时间间隔,多久尝试一次重连
connect_port 3306 #端口健康监测
}
}
}
配置内容仅作为参考用,请勿直接搬运
建立mysql进程结束脚本
vim /usr/local/mysql/bin/mysql.sh
#! /bin/bash
pkill keepalived
给予权限
chmod +x /usr/local/mysql/bin/mysql.sh
测试
停止A主机的mysql服务,在B主机上ip a查看虚拟ip状态
发现VIP已经被绑定到mysql2上
停止之后再恢复A主机服务,手动关掉B主机服务,发现VIP没有漂移到A主机上,
可以把keepalived配置中的不抢占那项注释掉,A主机恢复服务后再停止B主机后即可立即切换到A主机的mysql服务
登录测试:
两台主机授权其他主机访问的账号权限:
GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'pwd@123' WITH GRANT OPTION;
其他主机可使用虚拟的VIP访问数据库服务
mysql -h192.168.1.150 -uzabbix -p
编辑回复