1. 程式人生 > >利用keepalived和haproxy配置mysql的高可用負載均衡

利用keepalived和haproxy配置mysql的高可用負載均衡

轉載http://www.cnblogs.com/tae44/p/4717334.html

實驗系統:CentOS 6.6_x86_64(2.6.32-504.30.3.el6.x86_64)

實驗前提:防火牆和selinux都關閉

實驗說明:本實驗共有4臺主機,IP分配如拓撲

實驗軟體:keepalived-1.2.19  haproxy-1.5.14  mariadb-10.0.20

下載地址:http://pan.baidu.com/s/1bnnYiMr

實驗拓撲:

    

一、安裝mariadb

  1.在兩臺資料庫伺服器安裝:

複製程式碼
tar xf mariadb-10.0.20-linux-x86_64.tar
.gz -C /usr/local/ cd /usr/local/ ln -sv mariadb-10.0.20-linux-x86_64 mysql useradd -r mysql mkdir -pv /mydata/data chown -R mysql.mysql /mydata/data/ cd mysql/ chown -R root.mysql . scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ cp support-files/my-large.cnf /etc/my.cnf cp support-files/mysql.server /etc/init.d/mysqld chkconfig
--add mysqld chkconfig mysqld on
複製程式碼

  2.配置主主複製:

    19.74:

vim /etc/my.cnf 
----------------------------------------------->
[mysqld]
server-id = 1
datadir = /mydata/data
log-bin = /mydata/data/mysql1-bin
binlog_format = ROW
relay_log = /mydata/data/relay-log
auto-increment-increment = 2
auto-increment-offset = 1
sync_binlog = 1
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1 按 Ctrl+C 複製程式碼

19.76:

按 Ctrl+C 複製程式碼 vim /etc/my.cnf 
----------------------------------------------->
[mysqld]
server-id = 2
datadir = /mydata/data
log-bin = /mydata/data/mysql2-bin
binlog_format = ROW
relay_log = /mydata/data/relay-log
auto-increment-increment = 2
auto-increment-offset = 2
sync_binlog = 1
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1 按 Ctrl+C 複製程式碼

  3.建立具有複製許可權的使用者:

19.74:

service mysqld start
/usr/local/mysql/bin/mysql
------------------------------------------>
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'master'@'192.168.19.76' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

19.76:

service mysqld start
/usr/local/mysql/bin/mysql
------------------------------------------>
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'master'@'192.168.19.74' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

  4.檢視二進位制位置:

19.74:

SHOW MASTER LOGS;

    

    19.76上使用相同命令:

    

  5.配置雙主:

19.74:

CHANGE MASTER TO MASTER_HOST='192.168.19.76',MASTER_USER='master',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql2-bin.000001',MASTER_LOG_POS=1112;
START SLAVE;

19.76:

CHANGE MASTER TO MASTER_HOST='192.168.19.74',MASTER_USER='master',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql1-bin.000001',MASTER_LOG_POS=1112;
START SLAVE;

二、編譯安裝haproxy

  1.在19.66和19.79上編譯安裝haproxy:

tar xf haproxy-1.5.14.tar.gz 
cd haproxy-1.5.14
yum install -y gcc
make TARGET=linux2628 ARCH=x86_64        //根據自己主機設定makeinstall SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/

  2.提供啟動指令碼:

按 Ctrl+C 複製程式碼 vim /etc/init.d/haproxy
--------------------------------------------------->
#!/bin/sh
#
# haproxy
#
# chkconfig:   - 85 15
# description:  HAProxy is a free, very fast and reliable solution \
#               offering high availability, load balancing, and \
#               proxying for TCP and  HTTP-based applications
# processname: haproxy
# config:      /etc/haproxy/haproxy.cfg
# pidfile:     /var/run/haproxy.pid


# Source function library.
. /etc/rc.d/init.d/functions


# Source networking configuration.
. /etc/sysconfig/network


# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0


exec="/usr/sbin/haproxy"
prog=$(basename $exec)


[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog


cfgfile=/etc/haproxy/haproxy.cfg
pidfile=/var/run/haproxy.pid
lockfile=/var/lock/subsys/haproxy


check() {
    $exec -c -V -f $cfgfile $OPTIONS
}


start() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi


    echo -n $"Starting $prog: "
    # start it up here, usually something like "daemon $exec"
    daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}


stop() {
    echo -n $"Stopping $prog: "
    # stop it here, often "killproc $prog"
    killproc $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}


restart() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
    stop
    start
}


reload() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
    echo -n $"Reloading $prog: "
    $exec -D -f $cfgfile -p $pidfile $OPTIONS -sf $(cat $pidfile)
    retval=$?
    echo
    return $retval
}


force_reload() {
    restart
}


fdr_status() {
    status $prog
}


case "$1" in
    start|stop|restart|reload)
        $1
        ;;
    force-reload)
        force_reload
        ;;
    check)
        check
        ;;
    status)
        fdr_status
        ;;
    condrestart|try-restart)
        [ ! -f $lockfile ] || restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
        exit 2
esac
<---------------------------------------------------
chkconfig --add haproxy
chkconfig haproxy on
chmod +x /etc/init.d/haproxy 按 Ctrl+C 複製程式碼

  3.提供配置檔案:

按 Ctrl+C 複製程式碼 mkdir /etc/haproxy
mkdir /var/lib/haproxy
useradd -r haproxy
vim /etc/haproxy/haproxy.cfg
----------------------------------------------------------------------->
global


    log         127.0.0.1 local2


    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon


    stats socket /var/lib/haproxy/stats


defaults
    mode                    tcp            //haproxy執行模式
    log                     global
    option                  dontlognull
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 600           //最大連線數


listen stats                              //配置haproxy狀態頁
    mode http
    bind :6677                            //找一個比較特殊的埠
    stats enable
    stats hide-version                    //隱藏haproxy版本號
    stats uri     /haproxyadmin?stats     //一會用於開啟狀態頁的uri
    stats realm   Haproxy\ Statistics     //輸入賬戶密碼時的提示文字
    stats auth    admin:admin             //使用者名稱:密碼
    stats admin if TRUE                   //開啟狀態頁的管理功能


frontend  main *:3306                     //這裡為了實驗方便,使用3306埠
    default_backend             mysql     //後端伺服器組名


backend mysql
    balance     leastconn                 //使用最少連線方式排程
    server m1 192.168.19.74:3306 check port 3306 maxconn 300
    server m2 192.168.19.76:3306 check port 3306 maxconn 300 按 Ctrl+C 複製程式碼

   4.啟動日誌:

複製程式碼
vim /etc/rsyslog.conf 
----------------------------------------------------->
# Provides UDP syslog reception                //去掉下面兩行註釋,開啟UDP監聽
$ModLoad imudp
$UDPServerRun 514

local2.*             /var/log/haproxy.log      //新增此行
<-----------------------------------------------------
service rsyslog restart
複製程式碼

   5.啟動測試haproxy:

service haproxy start
netstat -tnlp

 

  6.在19.74上建立遠端登入賬號:

GRANT ALL ON *.* TO 'jason'@'192.168.19.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

  7.分別在19.66和19.79上登入mysql,若都能連線成功則繼續往下:

yum -y install mysql                            //如果沒有mysql客戶端則執行此命令
mysql -ujason -p123456 -h192.168.19.66 //在19.66上登入
mysql -ujason -p123456 -h192.168.19.79 //在19.79上登入

三、安裝keepalived

  1.在19.66和19.79上編譯安裝keepalived:

複製程式碼
tar xf keepalived-1.2.19.tar.gz 
cd keepalived-1.2.19
yum -y install openssl-devel
./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.30.3.el6.x86_64/      //核心版本換成自己主機的 uname -a 檢視核心  
make && make install
chkconfig --add keepalived
chkconfig keepalived on
複製程式碼

   2.在19.66上配置:

按 Ctrl+C 複製程式碼 vim /etc/keepalived/keepalived.conf
----------------------------------------------------->
! Configuration File for keepalived


global_defs {                                             //此段暫時略過,下同
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}


vrrp_script chk_haproxy {
    script "/etc/keepalived/chk.sh"                      //檢查haproxy的指令碼
    interval 2                                           //每兩秒檢查一次
}


vrrp_instance VI_1 {
    state BACKUP                                        //定義為BACKUP節點
    nopreempt                                           //開啟不搶佔
    interface eth0
    virtual_router_id 51
    priority 100                                        //開啟了不搶佔,所以此處優先順序必須高於另一臺
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abcd
    }
    virtual_ipaddress {
        192.168.19.150                                 //配置VIP
    }
    track_script {
        chk_haproxy                                    //呼叫檢查指令碼
    }


    notify_backup "/etc/init.d/haproxy restart"
    notify_fault "/etc/init.d/haproxy stop"
} 按 Ctrl+C 複製程式碼

  3.在19.79上配置:

複製程式碼
vim /etc/keepalived/keepalived.conf
----------------------------------------------------->
! Configuration File for keepalived


global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}


vrrp_script chk_haproxy {
    script "/etc/keepalived/chk.sh"
    interval 2
}


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abcd
    }
    virtual_ipaddress {
        192.168.19.150
    }
    track_script {
        chk_haproxy
    }


    notify_backup "/etc/init.d/haproxy restart"
    notify_fault "/etc/init.d/haproxy stop"
}

  4.在兩臺機器上建立chk.sh檔案:

按 Ctrl+C 複製程式碼 vim /etc/keepalived/chk.sh
------------------------------------------------>
#!/bin/bash
#
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
       /etc/init.d/keepalived stop
fi
<------------------------------------------------
chmod +x /etc/keepalived/chk.sh 按 Ctrl+C 複製程式碼

  5.在19.66和19.79上進行測試:

service keepalived start

    此處兩臺主機均配置為BACKUP,因此哪臺先執行keepalived,VIP就在哪臺上。我這裡剛開始VIP執行在19.66上,然後進行連線測試:

    

mysql -ujason -p123456 -h192.168.19.150
------------------------------------------->
CREATE DATABASE bokeyuan;

    後端資料庫伺服器抓包:

    

    停掉19.66的keepalived服務,讓VIP轉移到19.79上,再進行測試:

service keepalived stop                   //停掉19.66的keepalived服務
mysql -ujason -p123456 -h192.168.19.150
------------------------------------------->
SHOW DATABASES;

    後端資料庫伺服器抓包:yum install -y tcpdump

tcpdump -n -i eth0src 192.168.19.74

網上搜的抓包方法 不知道筆者怎麼抓的(經過測試我沒抓到


    

  6.在瀏覽器開啟http://192.168.19.150:6677/haproxyadmin?stats,開啟haproxy狀態頁:admin/admin

ps:外部客戶的連線mysql   用vip  192.168.19.150

    在19.74上關閉mysql服務,可以看到haproxy對於後端伺服器的檢測是很迅速的:

service mysqld stop

  7.額外說明:

    繼續之前的實驗,將19.66上的keepalived服務再次啟動,可以發現,VIP仍然在19.79上,這就是之前為什麼要配置不搶佔的原因。如果按照正常的配置,將19.66配置為MASTER,當它重啟keepalived服務後,則一定會將VIP搶回。但實際上我們並不希望這樣,因為19.79仍在正常工作,19.66沒有理由去搶奪資源,造成沒必要的資源切換。實驗演示就到這裡,謝謝大家!

相關推薦

利用keepalivedhaproxy配置mysql可用負載均衡

轉載http://www.cnblogs.com/tae44/p/4717334.html 實驗系統:CentOS 6.6_x86_64(2.6.32-504.30.3.el6.x86_64) 實驗前提:防火牆和selinux都關閉 實驗說明:本實驗共有4臺主機,I

搭建MySQL可用負載均衡集群

分別是 $? 啟動腳本 hang 常見 ase 說明 配置步驟 分享 閱讀目錄1、簡介2、基本環境3、配置MySQL主主復制4、中間件簡述  4.1、Haproxy介紹  4.2、keepalived介紹5、中間件的安裝與配置(haproxy、keepalived)  5.

MMM+Amoeba搭建MySQL可用負載均衡群集

模擬 關閉防火墻 同步服務 lan 基礎上 拓撲 編譯安裝mysql 時鐘 命令行 MySQL的主從復制和MySQL的讀寫分離兩者有著緊密聯系,首先要部署主從復制,只有主從復制完成了,才能在此基礎上進行數據的讀寫分離。MySQL的讀寫分離就是只在主服務器上寫,只在從服務器上

MySQL可用負載均衡叢集部署

簡介 使用MySQL時隨著時間的增長,使用者量以及資料量的逐漸增加,訪問量更是劇增,最終將會使MySQL達到某個瓶頸,那麼MySQL的效能將會大大降低。這一結果也不利於軟體的推廣。   那麼如何跨過這個瓶頸,提高MySQL的併發量呢?方法有很多,分散式資料庫、讀寫分離

centos部署lvs+keepalived+apache/tomcat實現高效能可用負載均衡

前言: 常用的負載均衡軟體有lvs、haproxy、nginx,一般lvs和keeplavied一起使用 lvs是實現負載均衡作用的,即將客戶端的需求採用特定的負載均衡演算法分發到後端的web應用伺服器上,keepalived是用來實現高可用的,即保證主lvs宕機後,從lv

LVS + KEEPALIVED + WINDOWS SERVER 2008 R2 ------可用負載均衡

http://www.cnblogs.com/zengen/archive/2013/04/22/3028298.html 工作原理此處不作講解,自己去官方網站學習(http://www.linuxvirtualserver.org),這裡重點講如何配置!注:最好從官方

Haproxy + Pacemaker 實現可用負載均衡(二)

Pacemaker server1 和 server2 均安裝pacemaker 和 corosync server1 和 server2 作相同配置 [root@server1 ~]# yum install -y pacemaker coros

CDH 配置Mysql可用:主從keepalived

問題描述:配置CDH 配置Mysql高可用,並實現和cdh無縫對接。 主從和keepalived配置步驟:網上很多,這裡就不多贅述了!   配置常用命令: 查詢mysql連線使用的是那臺伺服器: show variables like "%hostname%"; s

基於HAProxy+Keepalived可用負載均衡web服務的搭建

1.2 epo cnblogs oba backup 保持 ica mysql redis 一 原理簡介 1.HAProxyHAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那

Haproxy + keepalived 可用負載均衡解決方案

haproxy + keepalived文檔作者:amunlinux文檔版本:Version 1.1修改記錄:2017-04-22系統環境:CentOS 6.8 64 bitIP 信息列表: 名稱 IP -----------------------------------VIP 192.1

[轉] HaproxyKeepalived雙主可用負載均衡

配置過程 virtual dev gnu 文本 tpch margin amp queue http://blog.chinaunix.net/uid-25266990-id-3989321.html 在測試了Nginx+Keepalived的負載均衡後,也對Haprox

Keepalived+Haproxy搭建可用負載均衡

eas 1.5 desc patch ble set 雙機 backend sql global_defs { notification_email { [email protected]/* */ } n

公司nginx keepalived tomcat cxf 搭建可用負載均衡實戰系列1- keepalived安裝配置

技術分享 cnblogs start ges idt def auth div .cn 1,ip說明 vip 10.50.13.67 server1 10.50.13.68 server2 10.50.13.140 2

Keepalived+Haproxy可用負載均衡群集

刷新 rfi opened width col vim router 一個 .com 介紹 HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,

(2)LVS+Keepalived可用負載均衡架構原理及配置

LVS Keepalived1、keepalived 介紹2、keepalived 優缺點3、keepalived 應用場景4、keepalived 安裝配置5、keepalived+lvs 高可用6、keepalived+nginx 高可用7、keepalived 切換原理8、性能優化9、常見故障 一、k

keepalived+haproxy 可用負載均衡叢集

案例 chkconfig NetworkManager off chkconfig iptables off cat /etc/sysconfig/selinux #例行公事四臺都要這樣selinux為disabled狀態。 #web為配置好的狀態 只有一個頁面。

Centos7.5 配置 Nginx+Keepalived 搭建可用負載均衡

一、系統要求:[[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 二、IP 地址規劃:主機名 IP VIP linux-node1 192.168.10.10 192.168.1

Centos7.5 配置 Nginx+Keepalived 搭建可用負載均衡

.rpm pass 創建 綁定 提供服務 網卡 stat -i welcom 一、系統要求:[root@linux-node1 ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 二、IP 地址規

配置MySQL可用叢集MHA

配置MySQL高可用叢集+++++++++++++++++++主機角色 :客戶端 client50資料庫伺服器 mysql51 到 mysql55管理主機 mgm56VIP地址 192.168.4.100拓撲結構: client50 | mysql51主 |

HAProxy+Keepalived 可用負載均衡

link ipad 配置 make type 負載均衡 pro ext figure 轉自 https://www.jianshu.com/p/95cc6e875456 Keepalived+haproxy實現高可用負載均衡 Master 192.168.0