Mysql(主主)+Keepalived

2021年09月15日 阅读数:2
这篇文章主要向大家介绍Mysql(主主)+Keepalived,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

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

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

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

Vip:192.168.4.100,clinet:192.168.4.30vim

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


Mysql(主主)+Keepalived


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

Mysql1服务器配置:markdown

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

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

1) 配置192.168.4.10 作主数据库服务器测试

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


2) 受权一个链接用户 能够从远程来链接本身,而且有拷贝数据的权限

16.[root@master-10 ~]#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 root@"192.168.4.20" identified by "654321";
23.
24.[root@master-10 ~]#service mysqld restart //启动数据库
25.[root@master-10 ~]# iptables -F;service iptables save //清空防火墙规则


Mysql2服务器配置:

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

32.[root@master-20 ~]# service network restart //重启网卡
33.[root@master-20 ~]# yum -y install mysql mysql-server //安装数据库
34.[root@master-20 ~]# vim /etc/my.cnf
35.log-bin=master20 //启用binlog日志
36.server_id=20 //指定本身server-id
37.
38.:wq
39.[root@master-20 ~]#service msyqld start //重启数据库
40.
41.2) 受权一个链接用户 能够从远程来链接本身,而且有拷贝数据的权限
42.[root@master-20 ~]#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 status\G;

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

  1. 55.[root@master-20 ~]#mysql -h192.168.4.10 -uroot -p654321 //测试受权用户是否有效


步骤二:安装Keepalived软件

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

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


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


步骤三:部署Keepalived服务

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

1.[root@master-10 ~]# vim /etc/keepalived/keepalived.conf
2.global_defs {
3.notification_email {
4.admin@tarena.com.cn · //设置报警收件人邮箱
5.}
6.notification_email_from ka@localhost //设置发件人
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.[root@msater-20 ~]# vim /etc/keepalived/keepalived.conf
2.global_defs {
3.notification_email {
4.admin@tarena.com.cn //设置报警收件人邮箱
5.}
6.notification_email_from ka@localhost //设置发件人
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)启动服务

[root@master-10 ~]# tail –f /var/log/messages //启动服务前能够观察日志文件变化
1.[root@master-10 ~]# service keepalived start
2.[root@master-20 ~]# service keepalived start


步骤四:测试


1)登陆两台mysql服务器查看VIP信息,将会在mysql1上看到多出一个虚拟ip
1.[root@master-10 ~]# ip addr show

2.[root@master-20 ~]# ip addr show


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


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

Mysql(主主)+Keepalived

2)本地进入第一台数据库查看库
Mysql(主主)+Keepalived

3)第二台mysql数据库(备)ip:4.20
Mysql(主主)+Keepalived

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

Mysql(主主)+Keepalived


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


一、测试:客户端经过访问远程数据库服务器的虚拟ip链接成功。
Mysql(主主)+Keepalived


二、接下来测试虚拟ip飘移,模拟第一台数据库宕机
Mysql(主主)+Keepalived


三、查看第二台数据库服务器获取飘移ip成功
Mysql(主主)+Keepalived


四、客户端再次经过虚拟ip访问
Mysql(主主)+Keepalived


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


主主复制测试


默认都有5个库
Mysql(主主)+Keepalived

Mysql(主主)+Keepalived


客户端链接远程数据库,建立db4库

Mysql(主主)+Keepalived


接下来分别查看2台数据库下面有没有刚刚建立的db4这个库
Mysql(主主)+Keepalived
Mysql(主主)+Keepalived


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:

上一篇: 部署RabbitMQ集群