1. 程式人生 > >keepalived+nginx+mysql實現高可用及負載均衡

keepalived+nginx+mysql實現高可用及負載均衡

最近搗鼓了一下mysql資料庫的高可用方案。藉助mysql官方的InnoDB Cluster 以及nginx+keepalived。能夠輕易的做到。效果及穩定性令人滿意。

前言:

首先這裡預設你已經安裝好了mysql叢集,並且叢集是可用的。不會安裝的可以參考另外一篇博文:http://blog.csdn.net/kokjuis/article/details/78401022

這裡不介紹mysql InnoDB Cluster 的安裝,只介紹通過nginx+keepalived對mysql進行高可用配置。

實際上應該是對mysql-router做高可用。因為mysql InnoDB Cluster本身就是mysql的高可用方案。只是其中的mysql-router可能存在單點問題。

mysql-router本身沒有提供高可用方案,但我們可以通過nginx實現負載均衡以及高可用,nginx的高可用可以通過keepalived主備方式實現。

安裝nginx

先安裝nginx需要的依賴

一. gcc 安裝

安裝 nginx 需要先將官網下載的原始碼進行編譯,編譯依賴 gcc 環境,如果沒有 gcc 環境,則需要安裝:

yum install gcc-c++

二. PCRE pcre-devel 安裝
PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 相容的正則表示式庫。nginx 的 http 模組使用 pcre 來解析正則表示式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也需要此庫。命令:

yum install -y pcre pcre-devel

三. zlib 安裝
zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,所以需要在 Centos 上安裝 zlib 庫。

yum install -y zlib zlib-devel

四. OpenSSL 安裝
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的金鑰和證書封裝管理功能及 SSL 協議,並提供豐富的應用程式供測試或其它目的使用。
nginx 不僅支援 http 協議,還支援 https(即在ssl協議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。

yum install -y openssl openssl-devel

安裝nginx

注意:代理mysql需要支援tcp。只有nginx1.9及以上才可以支援tcp協議,官網下載最新版本即可;

安裝:

tar -zxvf nginx-1.13.7.tar.gz
cd nginx-1.13.7

編譯nginx:

注意:

Nginx有兩種方式實現TCP代理功能:

一種是使用nginx_tcp_proxy_module模組,一般用於Nginx早期版本。

一種是使用官方ngx_stream_core_module模組,用於1.9及其以後版本。

推薦使用官方ngx_stream_core_module。

只有在configure時使用了--with-stream引數,編譯出來的nginx程式才支援stream方式實現TCP代理。

./configure --prefix=/usr/nginx  --with-stream --with-stream_ssl_module
make
#已經在使用的nginx則不需make install,否則就覆蓋了
make install

配置tcp代理功能

nginx.conf配置檔案中新增

stream配置塊以及其中的server配置塊。

stream {

upstream mysql {

hash $remote_addr consistent;
#mysql-router連線地址
server 172.30.12.14:7001 weight=5 max_fails=3 fail_timeout=30s;
server 172.30.12.17:7001 weight=5 max_fails=3 fail_timeout=30s;

}

server {

listen 7777;
#建立連線超時時間
proxy_connect_timeout 5s;
#proxy_timoute指定Nginx與客戶端,以及Nginx與被代理的主機之間在兩個相鄰的讀或寫資料的操作之間的最大時間間隔。超過此時間間隔而沒有資料讀或寫操作發生,則斷開連線。
proxy_timeout 5m;

proxy_pass mysql;

}

}

至於其他的nginx配置什麼的這裡不說了。網上很多

Keepalived的安裝和配置:

keepalived 的安裝步驟


#解壓
tar -zxvf keepalived-1.2.24.tar.gz
#進入目錄
cd keepalived-1.2.24
#編譯
./configure --prefix=/usr/keepalived
#建立資料夾
mkdir /etc/keepalived


#複製配置
cp /usr/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/keepalived-1.3.9/keepalived/etc/init.d/keepalived /usr/keepalived/etc/rc.d/init.d/keepalived
cp /usr/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/keepalived/etc/sysconfig/keepalived /etc/sysconfig/




#授權
chmod +x /etc/rc.d/init.d/keepalived


#新增軟連結
ln -s /usr/sbin/keepalived/usr/sbin/
ln -s /usr/keepalived/sbin/keepalived/sbin/
#新增到服務
chkconfig --add /etc/init.d/keepalived
chkconfig keepalived on


#檢視服務
chkconfig --list keepalived

注:
cp /usr/keepalived-1.3.9/keepalived/etc/init.d/keepalived /usr/keepalived/etc/rc.d/init.d/keepalived
新版本可能keepalived不存在,直接從/keepalived-1.3.9/keepalived/etc/init.d/ 目錄下拷貝過去即可。

系統提示警告

 *** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
安裝:
yum -y install libnl libnl-devel

系統提示錯誤 

configure: error: libnfnetlink headers missing

安裝
yum install -y libnfnetlink-devel

配置keepalived.conf

主:

global_defs {
# 設定nginx master的id,在一個網路應該是唯一的
    router_id nginx_master
}
vrrp_script chk_http_port {
#最後手動執行下此指令碼,以確保此指令碼能夠正常執行
    script "/etc/keepalived/check_nginx_pid.sh"
	 #(檢測指令碼執行的間隔,單位是秒)
    interval 2
    weight 2
	#檢測連續2次失敗才算確定是真失敗。會用weight減少優先順序(1-255之間)
	fall 2
	#檢測1次成功就算成功。但不修改優先順序
	rise 1
}
vrrp_instance VI_1 {
# 指定keepalived的角色,MASTER為主,BACKUP為備
    state MASTER
	# 當前進行vrrp通訊的網路介面卡(當前centos的網絡卡),通過命令 ip addr 可以檢視,必須要填對
    interface enp2s0
	# 虛擬路由編號,主從要一致
    virtual_router_id 66
	# 優先順序,數值越大,獲取處理請求的優先順序越高
    priority 100
	# 檢查間隔,預設為1s(vrrp組播週期秒數)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
	#(呼叫檢測指令碼)
    chk_http_port
    }
    virtual_ipaddress {
	# 定義虛擬ip(VIP),可多設,每行一個
        172.30.12.200
    }
}


備:

global_defs {
# 設定nginx master的id,在一個網路應該是唯一的
    router_id nginx_slave
}
vrrp_script chk_http_port {
#最後手動執行下此指令碼,以確保此指令碼能夠正常執行
    script "/etc/keepalived/check_nginx_pid.sh"
	 #(檢測指令碼執行的間隔,單位是秒)
    interval 2
    weight 2
	#檢測連續2次失敗才算確定是真失敗。會用weight減少優先順序(1-255之間)
	fall 2
	#檢測1次成功就算成功。但不修改優先順序
	 rise 1
}
vrrp_instance VI_1 {
# 指定keepalived的角色,MASTER為主,BACKUP為備
    state BACKUP
	# 當前進行vrrp通訊的網路介面卡(當前centos的網絡卡)
    interface enp2s0
	# 虛擬路由編號,主從要一致
    virtual_router_id 66
	# 優先順序,數值越大,獲取處理請求的優先順序越高
    priority 99
	# 檢查間隔,預設為1s(vrrp組播週期秒數)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
	#(呼叫檢測指令碼)
    chk_http_port
    }
    virtual_ipaddress {
	# 定義虛擬ip(VIP),可多設,每行一個
        172.30.12.200
    }
}
nginx檢測指令碼:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /usr/nginx/sbin/nginx                #重啟nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重啟失敗,則停掉keepalived服務,進行VIP轉移
              killall keepalived                    
      fi
fi

#啟動服務
service keepalived start
#停止服務
service keepalived stop
啟動成功:

注意:keepalived啟動時不會檢查配置檔案的語法是否正確,所以我們在編寫配置檔案時要特別小心,別寫錯了,否則會出現一些意想不到的現象。

通過命令 ip addr 命令可以檢視虛擬IP已經生效

注意:同一時間只有主服務生效,只有主伺服器宕機以後,vip才會偏移到從機上。等主機恢復以後,vip又會自動偏移到主機上。



然後通過vip(172.30.12.200:7777)即可訪問資料庫,並且已經實現高可用和負載均衡



相關推薦

keepalived+nginx+mysql實現可用負載均衡

最近搗鼓了一下mysql資料庫的高可用方案。藉助mysql官方的InnoDB Cluster 以及nginx+keepalived。能夠輕易的做到。效果及穩定性令人滿意。 前言: 首先這裡預設你已

Keepalive+Amoeba+Mysql 實現可用負載均衡讀寫分離

一:實驗環境   寫:寫入的介面是keepalive配置的虛擬IP(192.168.1.60),而這個VIP指向雙主複製中的兩個節點。 讀:slave1(該slave1指向的是master1)。 二:實驗目的 Master1與master2實現高可用,master1

linux Nginx +keepalived+varnish+lamp實現可用負載均衡集群

lse 規則 col sys 腳本 lld keepaliv pro start 環境 需要六臺服務器:兩臺keepalived+nginx:192.168.80.100/192.168.80.101兩臺varnish:192.168.80.102/192.18.80.1

Nginx +keepalived+varnish+lamp實現可用負載均衡集群

負載均衡 cfb cdd .rpm fad bec 安裝mysql html root賬戶 描述:1、前端兩臺NGINX,通過keepalived虛擬IP漂移,實現前端兩臺NGINX高可用;2、利用NGINX反向代理功能對後端varnish實現高可用集群, 3、再通過var

Keepalived+Nginx+Redis+Tomcat實現可用web負載均衡

一、系統環境 作業系統:CentOS 7 tomcat 8.0.47 Nginx 1.12.2 Redis 4.0.2 192.168.124.128 tomcat1+Nginx+Redis 192.168.124.130 tomcat2

分散式架構學習之:Keepalived+Nginx實現可用Web負載均衡

一、場景需求 二、Keepalived 簡要介紹 Keepalived 是一種高效能的伺服器高可用或熱備解決方案,Keepalived 可以用來防止伺服器單點故障的發生,通過配合 Nginx 可以實現 web 前端服務的高可用。 Keepalived 以 VRRP

lvs+keepalived 可用負載均衡

module pri gzip cal flv -i poll ORC 虛擬ip 一、環境準備 VIP:10.18.43.30 dr1:10.18.43.10 dr2:10.18.43.20 web1:10.18.43.13 web2:10.18.43.14

keepalivedmysql實現可用

環境說明 主機名 IP地址 服務 系統版本 master 192.168.102.11 Keepalivedmariadb red-hat7

lvs+keepalived+memcached+varnish+LNMP 實現可用負載均衡排程伺服器

實驗環境: web1 :eth0 192.168.4.11     web2 : eth0192.168.4.12    兩臺web伺服器需要配置VIP                    排程器Lvs1: eth0 192.168.4.5    排程器Lvs2: eth

主題:分散式架構可用架構_Keepalived+Nginx實現可用Web負載均衡

一、場景需求 二、Keepalived 簡要介紹 Keepalived 是一種高效能的伺服器高可用或熱備解決方案,Keepalived 可以用來防止伺服器單點故障的發生,通過配合 Nginx 可以實現 web 前端服務的高可用。 Keepalived 以 VRRP

Redis之——搭建可用負載均衡的Redis

之前,給大家介紹了一些關於Redis的文章,大家可以參見博文中有關Redis的文章。今天,我們就一起來學習如何搭建高可用及負載均衡的Redis,好了,不多說了,我們直接進入正題吧。 一、測試環境 1、機器    母機:centos6.5-64    虛擬機器:centos

LVS + keepalived + nginx + tomcat 實現主從熱備 + 負載均衡

前言   首先宣告下,由於這兩天找資料,看了不少部落格 ,但是出於不細心,參考者的部落格地址沒有記錄下來,所有文中要是出現了與大家部落格相同的地方,那麼請大家在評論區說明並附上部落格地址,我好引用進來;這裡表示抱歉了!   另外,本文是在我的另一篇部落格主從熱備+負載均衡(LVS + kee

十一、使用KeepAlived為RabbitMQ的可用負載均衡

概述 高可用架構是 Keepalived + HAproxy,用 HAproxy 來做 RabbitMQ 負載均衡和高可用,用

keepalived +nginx 實現HA 可用負載均衡

想了半天沒想好該怎麼起一個頭。 寫這個部落格呢,是因為目前相把公司的專案都做成高可用的,能夠應對緊急情況的伺服器宕機事件。 之前專案部署如下圖: 圖是比較簡單的,域名指向 單機的nginx 一個nginx 指向2臺應用伺服器(負載均衡方式) 。 基

初識keepalived(三)——keepalivednginx代理實現可用

keepalived nginx 背景介紹nginx除了可以作為web服務器外,同時也是一個反向代理軟件,nginx不能完全取代apache,所以很多場景下nginx作為apache的反向代理服務器。nginx運行在用戶空間,代替用戶向服務器發起請求,請求返回時再經由nginx服務器返回給用戶。不同於

nginx+keepalive實現可用負載均衡

keepalived+nginx高可實驗一:實驗環境 主nginx負載均衡器:192.168.10.63 (通過keepalived配置了VIP:192.168.10.188供外使用)副nginx負載均衡器:192.168.10.200(通過keepalived配置了VIP:192.168.10.188供外

keepalived+mysql實現可用

algo prior 優先級 mysqld www. cte enc 方案 .cn 為了響應公司需求,打造出更安全的mysql集群,能夠實現mysql故障後切換,研究了幾天終於有了成果,一起分享一下。首先介紹一下這套集群方案實現的功能1、mysql服務器故障後自動轉移,修好

lvs+keepalived+nginx實現性能負載均衡集群 性能jsp集群

檢查 檢測 查詢 ref status onf tsp download inux LVS-master:192.168.254.134LVS-backup:192.168.254.135LVS-VIP:192.168.254.88nginx+tomcat:192.168.

keepalived+httpd+tomcat實現可用負載均衡

一、環境 centos 6.5 keepalived keepalived-1.2.19.tar.gz httpd httpd-2.4.12.tar.gz tomcat apache-tomcat-7.0.63.tar.gz 二、部署 安裝 http

keepalived+nginx-upstream部署可用反向代理

proxy route 服務器 宕機 127.0.0.1 trac 訪問 代理 _id 實驗拓撲 實驗要求 兩個web server提供httpd服務,ip地址分別是172.18.27.201、202,掩碼是16 兩個nginx proxy提供高可用反向代理,ip地