mysql @a_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台作为客户端,拓扑结构如图。

dc53cb5229b9fd478b830e96a8796a9d.png

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

Mysql1服务器配置:

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 //安装数据库

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 //清空防火墙规则

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

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

31c8f168404d2609c031004f13d3c4f9.png

2)本地进入第一台数据库查看库

3e43c8b324b67b095586cb3fb75f41f4.png

3)第二台mysql数据库(备)ip:4.20

0520547f8efe89769e0778e351d0be81.png

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

0681538872fd0e9a2c778668cf6c27d2.png

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

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

4088351f723845093fc1fc3cc914a76c.png

2、接下来测试虚拟ip飘移,模拟第一台数据库宕机

252e6e1fc7dda7681716f6186d44dbf0.png

3、查看第二台数据库服务器获取飘移ip成功

ea736e7cb53bb036d8ce27e73b962262.png

4、客户端再次通过虚拟ip访问

340e902a394a67e45314a1bfb4c0cddf.png

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

主主复制测试

默认都有5个库

ef73fb59eda9d9b3c05290e36b34c6ad.png

42d71c63d1889591eeb17095833060fc.png

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

3ddc8f898ba1a0ca12624a20c769f368.png

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

aa2761654324acc3d367529e079cad66.png

992a04a6958a9b08e2e98bb8287c4fb4.png

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:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值