首頁 資料庫 mysql教程 利用Keepalived构建高可用的MySQL

利用Keepalived构建高可用的MySQL

Jun 07, 2016 pm 05:20 PM
keepalived 高可用

公司大牛让用keepalived构建高可用的MySQL,在网上看到一篇很完整的文章,于是乎照着前辈的足迹,加上自己补充。如上述均正确配置

前言:公司大牛让用keepalived构建高可用的MySQL,在网上看到一篇很完整的文章,于是乎照着前辈的足迹,加上自己补充。

环境拓扑如下:

MySQL-VIP:192.168.1.150
MySQL-master1:192.168.1.151 
MySQL-master2:192.168.1.152
 
OS版本:RedHat 5.4 
MySQL版本:5.0.77 
Keepalived版本:1.1.20

一、MySQL master-master的安装及配置
1、安装mysql
#yum install mysql-server -y       \\为了节省时间,这里两台server都直接yum装,希望你配好了yum源。

2、修改配置文件
On server1:
 #vim /etc/my.cnf
 [mysqld]
 server-id = 10
 log-bin = mysql-bin
 replicate-do-db = ccledb 
 auto-increment-increment = 2     
 auto-increment-offset = 1
On server2 :
 #vim /etc/my.cnf
 [mysqld]
 server-id = 20
 log-bin = mysql-bin
 replicate-do-db = ccledb
 auto-increment-increment = 2
 auto-increment-offset = 2
3、建立授权用户
On server1:
 mysql> grant replication client,replication slave on *.* to cclo1@’192.168.1.%’ identified by ‘123456’;

On server2:
mysql> grant replication client,replication slave on *.* to cclo2@’192.168.1.%’ identified by ‘123456’;

4、指定主服务器
On server1
mysql> show master status; 
+------------------+----------+--------------+------------------+ 
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+ 
| MySQL-bin.000003 |      374 |              |                  |  
+------------------+----------+--------------+------------------+ 
1 row in set (0.00 sec)
mysql> change master to master_host='192.168.1.152',master_user='cclo2',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=374; 
Query OK, 0 rows affected (0.05 sec) 

 


On server2
mysql> show master status; 
+------------------+----------+--------------+------------------+ 
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+ 
| MySQL-bin.000003 |      374 |              |                  |  
+------------------+----------+--------------+------------------+ 
1 row in set (0.00 sec)
mysql> change master to master_host='192.168.1.151',master_user='cclo1',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=374; 
Query OK, 0 rows affected (0.05 sec) 

5、开启主主服务
mysql> start slave;       \\两台server分别执行
MySQL> show slave status\G    \\查看主主状态
     Slave_IO_Running: Yes 
     Slave_SQL_Running: Yes   \\如果此2项都为yes,master-master配置即成功

如上述均正确配置,现在在任何一台MySQL上更新数据都会同步到另一台MySQL。

二、keepalived安装及配置

1、192.168.1.151服务器上keepalived安装及配置
 
安装keepalived

#tar zxvf keepalived-1.1.20.tar.gz 
#cd keepalived-1.1.20 
#./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686
 \\此处一定确保你的linux中有/usr/src/kernels/2.6.18-164.el5-i686这个目录,如果没有请安装kernel- devel包,建议最好是下载和你的linux系统内核版本相同的devel包安装(一般安装镜像有),此处直接#yum install -y kernel-devel
#make && make install


配置keepalived
此处需新建一个配置文件,默认情况下keepalived启动时会去/etc/keepalived目录下找配置文件

#mkdir /etc/keepalived 
#vim /etc/keepalived/keepalived.conf      \\配置文件内容如下:
! Configuration File for keepalived 
global_defs { 
     notification_email { 
     cclo@cer.cn 
     } 
     notification_email_from cclo@cer.cn 
     smtp_server 127.0.0.1 
     smtp_connect_timeout 30 
     router_id MySQL-ha 
     } 
 
vrrp_instance VI_1 { 
     state BACKUP   #两台配置此处均是BACKUP 
     interface eth0 
     virtual_router_id 51 
     priority 100   #优先级,另一台改为90 
     advert_int 1 
     nopreempt     #不主动抢占资源,只在优先级高的机器上设置即可,优先级低的机器不设置 
     authentication { 
     auth_type PASS 
     auth_pass 1111 
     } 
     virtual_ipaddress { 
     192.168.1.150 
     } 
     } 
 
virtual_server 192.168.1.150 3306 { 
     delay_loop 2   #每个2秒检查一次real_server状态 
     lb_algo wrr    #LVS算法 
     lb_kind DR     #LVS模式 
     persistence_timeout 60   #会话保持时间 
     protocol TCP 
     real_server 192.168.1.151 3306 { 
     weight 3 
     notify_down /usr/local/my/my.sh  #检测到服务down后执行的脚本 
     TCP_CHECK { 
     connect_timeout 10    #连接超时时间 
     nb_get_retry 3        #重连次数 
     delay_before_retry 3   #重连间隔时间 
     connect_port 3306      #健康检查端口 
     } 
     }
    
编写检测服务down后所要执行的脚本:
#vim /usr/local/my/my.sh
#!/bin/sh 
pkill keepalived 
#chmod +x /usr/local/my/my.sh
注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server的服务状态,当发现real_server服务故障时,便触发此脚本;我们可以看到,脚本就一个命令,通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。另外,,我们不用担心两个MySQL会同时提供数据更新操作,因为每台MySQL上的keepalived的配置里面只有本机MySQL的IP+VIP,而不是两台MySQL的IP+VIP

启动keepalived:
#/usr/local/keepalived/sbin/keepalived –D 
#ps -aux | grep keepalived

测试
找一台局域网PC,然后去ping MySQL的VIP,这时候MySQL的VIP是可以ping的通的
停止MySQL服务,#ps -aux | grep keepalived 看keepalived健康检查程序是否会触发我们编写的脚本

linux

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用分散式資料庫架構建構高可用的MySQL集群 如何使用分散式資料庫架構建構高可用的MySQL集群 Aug 02, 2023 pm 04:29 PM

如何使用分散式資料庫架構建構高可用的MySQL集群

實現高可用的分散式系統的Golang解決方案 實現高可用的分散式系統的Golang解決方案 Jan 16, 2024 am 08:17 AM

實現高可用的分散式系統的Golang解決方案

Linux和Docker:如何實現高可用的容器叢集? Linux和Docker:如何實現高可用的容器叢集? Jul 29, 2023 pm 07:54 PM

Linux和Docker:如何實現高可用的容器叢集?

使用Go語言開發高可用的容器編排系統 使用Go語言開發高可用的容器編排系統 Nov 20, 2023 am 08:40 AM

使用Go語言開發高可用的容器編排系統

如何在Linux上設定高可用的容器編排平台監控 如何在Linux上設定高可用的容器編排平台監控 Jul 06, 2023 pm 07:17 PM

如何在Linux上設定高可用的容器編排平台監控

建構高可用的分散式儲存系統:Go語言開發實踐 建構高可用的分散式儲存系統:Go語言開發實踐 Nov 20, 2023 pm 12:03 PM

建構高可用的分散式儲存系統:Go語言開發實踐

Go語言中的高可用分散式系統實作策略 Go語言中的高可用分散式系統實作策略 Jun 30, 2023 pm 05:06 PM

Go語言中的高可用分散式系統實作策略

如何使用Golang實現一個高可用的快取叢集? 如何使用Golang實現一個高可用的快取叢集? Jun 20, 2023 pm 10:49 PM

如何使用Golang實現一個高可用的快取叢集?

See all articles