Mysql(主主)+Keepalived

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql(主主)+Keepalived相关的知识,希望对你有一定的参考价值。

Mysql(主主结构)+Keepalived实现数据库高可用

一、实现环境3台服务器,2台mysql,一台client

Mysql服务器命名为:master-10(ip:192.168.4.10),master-20(ip:192.168.4.20)

Vip:192.168.4.100,clinet:192.168.4.30

使用3台虚拟机,2台作为mysql服务器,并部署Keepalived、1台作为客户端,拓扑结构如图。


技术分享图片


步骤一:配置网络环境,安装mysql数据库,配置主主结构

Mysql1服务器配置:

1)设置mysql服务器网络参数

1.[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
2.DEVICE=eth0
3.ONBOOT=yes
4.BOOTPROTO=static
5.IPADDR=192.168.4.10
6.[[email protected] ~]# service network restart //重启网卡
7.[[email protected] ~]# yum -y install mysql mysql-server //安装数据库

1) 配置192.168.4.10 做主数据库服务器

8.[[email protected] ~]# vim /etc/my.cnf
9.log-bin=master10 //启用binlog日志
10.server_id=10 //指定自己server-id
11.
12.:wq
13.[[email protected] ~]#service msyqld start //重启数据库


2) 授权一个连接用户 可以从远程来连接自己,并且有拷贝数据的权限

16.[[email protected] ~]#mysql -uroot -p
17.mysql> show master status; //查看值, 另外一台主数据库会用到这些值
18.>change master to master_host="192.168.4.20",master_user="slaveuser",master_password="123456",master_log_file="master20.000001",master_log_pos=120;
19.mysql> start slave; //启用保存

22.mysql> grant replication slave on . to [email protected]"192.168.4.20" identified by "654321";
23.
24.[[email protected] ~]#service mysqld restart //启动数据库
25.[[email protected] ~]# iptables -F;service iptables save //清空防火墙规则


Mysql2服务器配置:

27.[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
28.DEVICE=eth0
29.ONBOOT=yes
30.BOOTPROTO=static
31.IPADDR=192.168.4.20

32.[[email protected] ~]# service network restart //重启网卡
33.[[email protected] ~]# yum -y install mysql mysql-server //安装数据库
34.[[email protected] ~]# vim /etc/my.cnf
35.log-bin=master20 //启用binlog日志
36.server_id=20 //指定自己server-id
37.
38.:wq
39.[[email protected] ~]#service msyqld start //重启数据库
40.
41.2) 授权一个连接用户 可以从远程来连接自己,并且有拷贝数据的权限
42.[[email protected] ~]#mysql -uroot -p
43.
44.>show master status; //查看节点位置
45.>show slave staeetus; //查看,没指定前是空的
46.>change master to master_host="192.168.4.10",master_user="slaveuser",master_password="123456",master_log_file="master10.000001",master_log_pos=120;
47.>start slave; //启用保存
48.>show slave statusG;

49.授权ip地址有拷贝权限:
50.mysql> grant replication slave on . to [email protected]"192.168.4.10" identified by "654321";
51.
52.[[email protected] ~]#service msyqld start //重启数据库
53.[[email protected] ~]# iptables -F;service iptables save //清空防火墙规则

  1. 55.[[email protected] ~]#mysql -h192.168.4.10 -uroot -p654321 //测试授权用户是否有效


步骤二:安装Keepalived软件

注意:两台mysql服务器做相同的操作。

1.[[email protected] ~]# yum install -y gcc kernel-devel openssl-devel popt-devel
2.[[email protected] ~]# tar -xzf keepalived-1.2.7.tar.gz
3.[[email protected] ~]# cd keepalived-1.2.7
4.[[email protected] keepalived-1.2.7]# ./configure --sysconf=/etc
5.[[email protected] keepalived-1.2.7]# ./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.x.x.x //可以按照此方法定义kernel位置,也可以忽略此步骤
6.[[email protected] keepalived-1.2.7]# make && make install
7.[[email protected] keepalived-1.2.7]# ls /etc/keepalived/
8.keepalived.conf samples
9.[[email protected] keepalived-1.2.7]# ln -s /usr/local/sbin/keepalived /sbin/
10.[[email protected] keepalived-1.2.7]# chkconfig keepalived on


11.[[email protected] ~]# yum install -y gcc kernel-devel openssl-devel popt-devel
12.[[email protected] ~]# tar -xzf keepalived-1.2.7.tar.gz
13.[[email protected] ~]# cd keepalived-1.2.7
14.[[email protected] keepalived-1.2.7]# ./configure --sysconf=/etc
15.[[email protected] keepalived-1.2.7]# make && make install
16.[[email protected] keepalived-1.2.7]# ln -s /usr/local/sbin/keepalived /sbin/
17.[[email protected] keepalived-1.2.7]# chkconfig keepalived on


步骤三:部署Keepalived服务

1)修改mysql1服务器Keepalived主配置文件

1.[[email protected] ~]# vim /etc/keepalived/keepalived.conf
2.global_defs {
3.notification_email {
[email protected] · //设置报警收件人邮箱
5.}
6.notification_email_from [email protected] //设置发件人
7.smtp_server 127.0.0.1 · //定义发件人邮件服务器
8.smtp_connect_timeout 30
9.router_id mysql1 ·· //设置路由ID号
10.}
11.vrrp_instance VI_1 {
12.state MASTER //主服务器为MASTER
13.interface eth0 //定义网络接口
14.virtual_router_id 50 //主辅VRID号必须一致
15.priority 100 ·········· //服务器优先级
16.advert_int 1
17.authentication {
18.auth_type pass
19.auth_pass 1111 //主辅服务器密码必须一致
20.}
21.virtual_ipaddress { //定义虚拟服务器ip

  1. 192.168.4.100 }
    23.}
    24.下面的配置文件,可以直接删除,只用到上面的就ok了。

25.# scp keepalived.conf 192.168.4.20:/etc/keepalived/ //拷贝配置文件到20服务器上


2)修改mysql2服务器Keepalived配置文件。

1.[[email protected] ~]# vim /etc/keepalived/keepalived.conf
2.global_defs {
3.notification_email {
[email protected] //设置报警收件人邮箱
5.}
6.notification_email_from [email protected] //设置发件人
7.smtp_server 127.0.0.1 //定义邮件服务器
8.smtp_connect_timeout 30
9.router_id master2 //设置路由ID号
10.}
11.vrrp_instance VI_1 {
12.state SLAVE //从服务器为SLAVE
13.interface eth0 //定义网络接口
14.virtual_router_id 50 //主辅VRID号必须一致
15.priority 50 //服务器优先级
16.advert_int 1
17.authentication {
18.auth_type pass
19.auth_pass 1111 //主辅服务器密码必须一致
20.}
21.virtual_ipaddress { 192.168.4.100 }
22.}

3)启动服务

[[email protected] ~]# tail –f /var/log/messages //启动服务前可以观察日志文件变化
1.[[email protected] ~]# service keepalived start
2.[[email protected] ~]# service keepalived start


步骤四:测试


1)登录两台mysql服务器查看VIP信息,将会在mysql1上看到多出一个虚拟ip
1.[[email protected] ~]# ip addr show

2.[[email protected] ~]# ip addr show


Keepalived+mysql(主主结构)实现数据库高可用测试结果


测试结果如下图:
1)第一台mysql数据库(主)ip:4.10, 虚拟ip地址4.100

技术分享图片

2)本地进入第一台数据库查看库
技术分享图片

3)第二台mysql数据库(备)ip:4.20
技术分享图片

4)本地进入第二台数据库查看库

技术分享图片


客户端通过ip(虚拟ip)远程访问数据库


1、测试:客户端通过访问远程数据库服务器的虚拟ip连接成功。
技术分享图片


2、接下来测试虚拟ip飘移,模拟第一台数据库宕机
技术分享图片


3、查看第二台数据库服务器获取飘移ip成功
技术分享图片


4、客户端再次通过虚拟ip访问
技术分享图片


测试结果:当第一台宕机,第二台将代替第一台正常提供服务。


主主复制测试


默认都有5个库
技术分享图片

技术分享图片


客户端连接远程数据库,创建db4库

技术分享图片


接下来分别查看2台数据库下面有没有刚刚创建的db4这个库
技术分享图片
技术分享图片


mysql数据库同步工作原理:
IO进程: 负责拷贝主数据库服务器binlog日志里的sql语句到本机的中继 binlog日志里
IO进程出错:连接不上主数据库服务器时会出错, ping (线路问题 安全),授权 ,
指定的binlog日志名和pos节点的位置和当前主数据库服务器上的信息不一致。


SQL进程: 负责执行本机中继binlog日志里sql语句把数据写进数据库。
SQL进程什么时候会出错: SQL语句操作的库、表、字段在自己本机不存在。


IO进程的报错信息:
Last_IO_Errno: 0 //0表示正常,没有报错
Last_IO_Error:
SQL进程的报错信息
Last_SQL_Errno: 0
Last_SQL_Error:

以上是关于Mysql(主主)+Keepalived的主要内容,如果未能解决你的问题,请参考以下文章

Mysql主主复制

Keepalived+Lvs+Mysql主主复制

Mysql主主

mysql主主复制汇总整理

[转帖]MySQL+keepalived用keepalived实现MySQL主主模式的高可用

mysql 主主配置