九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Heartbeat+DRBD+NFS+Keepalived+Lnmp雙機熱備+負載均衡-線上方案

導讀:我們下面來實現(xiàn)一個架構,heartbeat+drbd+nfs實現(xiàn)mysql和網(wǎng)站數(shù)據(jù)的同步,keepalived實現(xiàn)nginx的高可用,而用nginx和dns輪詢實現(xiàn)負載均衡。架構說明目錄規(guī)劃/usr/local/src/lnmp:用來存放源碼工具等等/data...

我們下面來實現(xiàn)一個架構,heartbeat+drbd+nfs實現(xiàn)mysql和網(wǎng)站數(shù)據(jù)的同步,keepalived實現(xiàn)nginx的高可用,而用nginx和dns輪詢實現(xiàn)負載均衡。

架構說明

目錄規(guī)劃

/usr/local/src/lnmp:用來存放源碼工具等等
/data:用來存放所有數(shù)據(jù)和NFS以及DRBD的掛載
/data/shell:用來存放所有管理腳本
/data/mysql:用來掛載DRBD的mysql資源,以供mysql存放數(shù)據(jù)庫
/data/wwwnfs:用來掛載DRBD生成的www資源,以供兩個節(jié)點掛載到各個節(jié)點的/data/www目錄,以供論壇等程序數(shù)據(jù)使用
/data/www:用來掛載NFS資源,用來存放論壇(網(wǎng)站)等程序數(shù)據(jù)

拓撲工作原理

內(nèi)網(wǎng):
1,DRBD網(wǎng)絡存儲創(chuàng)建出兩個資源,一個mysql給mysql數(shù)據(jù)庫同步用,一個www給web(論壇)數(shù)據(jù)NFS共享掛載用,虛擬出兩個虛擬IP,一個是 192.168.1.100,用來連接數(shù)據(jù)庫,一個是192.168.1.200,用來給節(jié)點掛載NFS
注意:NFS底下掛載了三次:DRBD掛載一次,文件系統(tǒng)掛載一次,客戶端掛載一次
2,Heartbeat來實現(xiàn)DRBD的HA,同時虛擬出兩個內(nèi)網(wǎng)IP,并管理NFS,MySQL的啟動和關閉

外網(wǎng):
1,兩個節(jié)點都用Nginx做均衡器,通過內(nèi)網(wǎng)調度負載兩個節(jié)點,實現(xiàn)內(nèi)部均衡
2,DNS配置雙IP對應一個域名的方式來實現(xiàn)DNS輪詢,實現(xiàn)外網(wǎng)均衡
3,Keepalived使用雙主(master)配置虛擬出兩個虛擬IP:節(jié)點一 12.12.12.100和節(jié)點二 12.12.12.200,同時共外網(wǎng)訪問,兩個節(jié)點互為主從關系,當某個節(jié)點掛掉的時候,另外一個節(jié)點將同時是兩個資源的master,同時擁有兩個虛 擬IP,實現(xiàn)資源轉移。

我們知道DNS的缺點就是生效慢,分配資源不合理,理論上有可能把所有的請求都發(fā)送給同一節(jié)點,導致均衡不合理導致所有資源不可用,這里我們由于有 了NGINX內(nèi)部負載,就不怕DNS輪詢不均衡了,因為NGINX內(nèi)部有嚴謹?shù)恼{度方式,不管那臺請求有多少,在內(nèi)部都能實現(xiàn)理想的調度,這樣就能把 DNS負載均衡和NGINX完美結合,是硬件資源得到合理的利用,然后利用keepalive保證了每個節(jié)點的可靠性,幾乎完美!
拓撲圖如下:

架構實現(xiàn)

LNMP架構配置

配置LNMp架構需要注意兩點:
注意一:這里MYSQL都不要初始化,不要啟動!后面有專門的配置的
注意二:nginx所有端口都改成 8080,因為一會還要安裝nginx來做均衡器并對外提供服務,所以不要用默認的80
注意三、nginx和php-fpm運行的用戶都是www。

安裝配置NFS

1、安裝NFS

  1. yum install nfs-utils nfs4-acl-tools portmap

2、配置/etc/exports

  1. /data/wwwnfs 192.168.1.0/24(rw,,no_root_squash,sync,anonuid=502,anongid=502)

注意:
/data/wwwnfs:就是給兩個節(jié)點掛載的目錄,所有網(wǎng)站程序都放在這里,實現(xiàn)論壇程序等數(shù)據(jù)的共享(同步)
anonuid=502,anongid=502:這個表示客戶端上任何用戶進入到掛載目錄都以uid=502和gid=502身份,我這里這個代表的是www用戶
3、啟動

  1. service portmap start
  2. service nfs start

切忌,必須先啟動portmap

  1. chkconfig  nfs off
  2. chkconfig  portmap on

注意:portmap服務器必須常駐,且不收heartbeat管理;而nfs這必須要用heartbeat來管理他的啟動和關閉,所以這里要關閉nfs開機自動啟動

同時要啟動鎖機制,因為同時有兩個節(jié)點要使用同一份數(shù)據(jù),所以需要有總裁,這個尤其是在NFS給mysql用的時候是必須要用的,對于論壇或網(wǎng)站, 要看情況,如果存在對同一文件同時修改的時候必須要啟動NFS鎖機制,如果沒有這種情況,那么建議不要啟動,啟動了會降低NFS的性能:

  1. /sbin/rpc.lockd
  2. echo “/sbin/rpc.lockd” >>/etc/rc.local

4、開機自動掛載

  1. echo “sleep 20″ >>/etc/rc.local
  2. echo “/bin/mount -t nfs 192.168.1.200:/data/wwwnfs /data/www” >>/etc/rc.local

為什么為延遲20秒再掛載nfs?因為如果不等待立即掛載,會發(fā)現(xiàn)掛載不上,這是由于heartbeat啟動用的vip還沒設置好的原因。
立即掛載:

  1. mount -a

安裝配置DRBD

安裝方法見:http://www.centos.bz/2012/02/drbd-compile-install-deploy/

配置文件

DRBD有三種配置文件:
/usr/local/drbd/etc/drbd.conf
/usr/local/drbd/etc/drbd.d/global_common.conf
/usr/local/drbd/etc/drbd.d/*.res
1、drbd.conf

  1. include “drbd.d/global_common.conf”;
  2. include “drbd.d/*.res”;

2、global_common.conf

  1. global {
  2.   usage-count yes;
  3. }
  4. common {
  5.   net {
  6.     protocol C;
  7.   }
  8. }

3、mysql.res和www.res
mysql.res:

  1. vi /usr/local/drbd/etc/drbd.d/mysql.res
  1. #資源組的名稱
  2. resource mysql{
  3. #定義主服務器資源
  4.         on node1{
  5. #建立塊設備文件
  6.         device /dev/drbd1;
  7. #要用于復制的分區(qū)
  8.         disk /dev/sdb1;
  9. #定義偵聽IP和端口
  10.         address 192.168.1.10:7788;
  11. #meta data信息存放的方式,這里為內(nèi)部存儲,即和真實數(shù)據(jù)放在一起存儲
  12.         meta-disk internal;
  13.                    }
  14. #定義備服務器資源
  15.         on node2{
  16.         device /dev/drbd1;
  17.         disk /dev/sdb1;
  18.         address 192.168.1.20:7788;
  19.         meta-disk internal;
  20.                    }
  21.                 }

www.res:

  1. vi /usr/local/drbd/etc/drbd.d/www.res
  1. #資源組的名稱
  2. resource www{
  3. #定義主服務器資源
  4.         on node2{
  5. #建立塊設備文件
  6.         device /dev/drbd2;
  7. #要用于復制的分區(qū)
  8.         disk /dev/sdb2;
  9. #定義偵聽IP和端口
  10.         address 192.168.1.20:7789;
  11. #meta data信息存放的方式,這里為內(nèi)部存儲,即和真實數(shù)據(jù)放在一起存儲
  12.         meta-disk internal;
  13.                    }
  14. #定義備服務器資源
  15.         on node1{
  16.         device /dev/drbd2;
  17.         disk /dev/sdb2;
  18.         address 192.168.1.10:7789;
  19.         meta-disk internal;
  20.                    }
  21.                 }

最后復制這些文件到node2。

初始化DRBD資源

1)在各個節(jié)點啟用資源mysql和www

  1. modprobe drbd
  2. dd if=/dev/zero of=/dev/sdb1 bs=1M count=10
  3. dd if=/dev/zero of=/dev/sdb2 bs=1M count=10
  4. drbdadm create-md mysql
  5. drbdadm create-md www
  6. drbdadm up mysql
  7. drbdadm up www

2),提升各個節(jié)點上的主
在node1上:

  1. drbdadm primary –force mysql

在node2上:

  1. drbdadm primary –force www

3)格式化drbd塊設備
在node1上

  1. mkfs.ext3 /dev/drbd1

在node2上

  1. mkfs.ext3 /dev/drbd2

4)掛載分區(qū)
在node1上

  1. mount /dev/drbd1 /data/mysql

在node2上

  1. mount /dev/drbd2 /data/wwwfs

安裝配置heartbeat

1、安裝heartbeat

  1. yum install heartbeat

安裝完后會自動建立用戶hacluster和組haclient
確保兩個節(jié)點上hacluster用戶的的UID和GID相同
2、同步兩臺節(jié)點的時間

  1. rm -rf /etc/localtime
  2. \cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  3. yum install -y ntp
  4. ntpdate -d cn.pool.ntp.org

3、配置/etc/ha.d/ha.cf

  1. debugfile /var/log/ha-debug                             #打開錯誤日志報告
  2. keepalive 2                                             #兩秒檢測一次心跳線連接
  3. deadtime 10                                             #10 秒測試不到主服務器心跳線為有問題出現(xiàn)
  4. warntime 6                                              #警告時間(最好在 2 ~ 10 之間)
  5. initdead 120                                            #初始化啟動時 120 秒無連接視為正常,或指定heartbeat
  6.                                                         #在啟動時,需要等待120秒才去啟動任何資源。
  7. udpport 694                                             #用 udp 的 694 端口連接
  8. ucast eth0 192.168.1.20                                #單播方式連接(主從都寫對方的 ip 進行連接)
  9. node   node1                                           #聲明主服(注意是主機名uname -n不是域名)
  10. node   node2                                           #聲明備服(注意是主機名uname -n不是域名)
  11. auto_failback on                                        #自動切換(主服恢復后可自動切換回來)這個不要開啟
  12. respawn hacluster /usr/lib/heartbeat/ipfail           #監(jiān)控ipfail進程是否掛掉,如果掛掉就重啟它

4、/etc/ha.d/authkeys

  1. auth 1
  2. 1 crc

5、/etc/ha.d/haresources

  1. node1 IPaddr::192.168.1.100/24/eth0 drbddisk::mysql Filesystem::/dev/drbd1::/data/mysql::ext3 mysqld portmap
  2. node2 IPaddr::192.168.1.200/24/eth0 drbddisk::www Filesystem::/dev/drbd2::/data/wwwnfs::ext3 portmap nfs

6、創(chuàng)建nfs管理腳本

  1. vi /etc/ha.d/resource.d/nfs

寫入:

  1. #!/bin/bash
  2. NFSD=/etc/rc.d/init.d/nfs
  3. NFSDPID=`/sbin/pidof nfsd`
  4. case $1 in
  5. start)
  6. $NFSD start;
  7. ;;
  8. stop)
  9. $NFSD stop;
  10.         if [ "$NFSDPID" != " " ];then
  11.                 for NFSPID in $NFSDPID
  12.                 do /bin/kill -9 $NFSPID;
  13.                 done
  14.         fi
  15. ;;
  16. *)
  17. echo “Syntax incorrect. You need one of {start|stop }”
  18. ;;
  19. esac

先啟動node1的heartbeat,再啟動node2的heartbeat
啟動成功后,這里有幾項需要檢查
node1:
1、執(zhí)行ip a,檢查是否已經(jīng)設置有虛擬ip 192.168.1.100
2、執(zhí)行cat /proc/drbd檢查狀態(tài)是否正常
3、執(zhí)行df -h查看/dev/drbd1是否已經(jīng)掛載到/data/mysql
4、執(zhí)行service mysqld status查看mysql是否已經(jīng)啟動
node2:
1、執(zhí)行ip a查看是否已經(jīng)設置虛擬ip 192.168.1.200
2、執(zhí)行cat /proc/drbd檢查狀態(tài)是否正常
3、執(zhí)行df -h查看/dev/drbd2是否已經(jīng)掛載到/data/wwwnfs和192.168.1.200:/data/wwwnfs是否已經(jīng)掛載到/data/www

nginx均衡器配置

  1. user  www;
  2. worker_processes  1;
  3. error_log  /var/log/nginx/error.log warn;
  4. pid        /var/run/nginx.pid;
  5. events {
  6.     worker_connections  1024;
  7. }
  8. http {
  9.     include       /etc/nginx/mime.types;
  10.     default_type  application/octet-stream;
  11.     log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
  12.                       ’$status $body_bytes_sent “$http_referer” ‘
  13.                       ’”$http_user_agent” “$http_x_forwarded_for”‘;
  14.     access_log  /var/log/nginx/access.log  main;
  15.     sendfile        on;
  16.     #tcp_nopush     on;
  17.     keepalive_timeout  65;
  18.     #gzip  on;
  19.  upstream www.centos.bz_server
  20.   {
  21.   server 192.168.1.10:8080 weight=3 max_fails=2 fail_timeout=30s;
  22.   server 192.168.1.20:8080 weight=9 max_fails=2 fail_timeout=30s;
  23.   }
  24.   server
  25.   {
  26.     listen       80;
  27.     server_name  www.centos.bz;
  28.     location / {
  29.     root /data/www/www.centos.bz;
  30.     index index.php index.htm index.html;
  31.     proxy_redirect off;
  32.     proxy_set_header Host $host;
  33.     proxy_set_header X-Real-IP $remote_addr;
  34.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  35.     proxy_pass http://www.centos.bz_server;
  36.     }
  37.     access_log  off;
  38.   }
  39. server
  40.   {
  41.     listen       8080;
  42.     server_name  www.centos.bz;
  43.     index index.html index.htm index.php;
  44.     root  /data/www/www.centos.bz;
  45.     #limit_conn   crawler  20;
  46.  location ~ \.php$ {
  47.         root           /data/www/www.centos.bz;
  48.         fastcgi_pass   127.0.0.1:9000;
  49.         fastcgi_index  index.php;
  50.         fastcgi_param  SCRIPT_FILENAME  /data/www/www.centos.bz/$fastcgi_script_name;
  51.         include        fastcgi_params;
  52.     }
  53.     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  54.     {
  55.       expires      30d;
  56.     }
  57.     location ~ .*\.(js|css)?$
  58.     {
  59.       expires      1h;
  60.     }
  61.     access_log  off;
  62.       }
  63. }

這里定義了兩臺用于負載均衡的機子,分別是192.168.1.10:8080和192.168.1.20:8080,通過proxy_pass http://www.centos.bz_server代理循詢轉發(fā)到這兩臺機,達到負載均衡的作用。
你可以建立index.php,里面寫入:

  1. <?php
  2. echo $_SERVER['SERVER_ADDR'];
  3. ?>

如果連續(xù)刷新幾次,得到不同的IP,證明已經(jīng)均衡負載到不同的服務器。

Keepalived實現(xiàn)nginx和php的HA

1、keepalived安裝
安裝方法見:http://www.centos.bz/2012/02/nginx-keepalived-high-availability/
2、配置
節(jié)點一node1配置如下:

  1. global_defs {
  2.    notification_email {
  3.      admin@centos.bz
  4.    }
  5.    notification_email_from keepalived@domain.com
  6.    smtp_server 127.0.0.1
  7.    smtp_connect_timeout 30
  8.    router_id LVS_DEVEL
  9. }
  10. vrrp_instance VI_1 {
  11.     state MASTER        ############ 輔機為 BACKUP
  12.     interface eth0
  13.     virtual_router_id 100
  14.     mcast_src_ip 192.168.1.10  ########### 本機IP
  15.     priority 102                  ########### 權值要比 back 高
  16.     advert_int 1
  17.     authentication {
  18.         auth_type PASS
  19.         auth_pass 1111
  20.     }
  21.     virtual_ipaddress {
  22.        12.12.12.100
  23.     }
  24. }
  25. vrrp_instance VI_1 {
  26.     state BACKUP
  27.     interface eth0
  28.     virtual_router_id 200
  29.     mcast_src_ip 192.168.1.101 ########### 本機IP
  30.     priority 101              ##########權值 要比 master 低。。
  31.     advert_int 1
  32.     authentication {
  33.         auth_type PASS
  34.         auth_pass 1111
  35.     }
  36.     virtual_ipaddress {
  37.        12.12.12.200
  38.     }
  39. }

節(jié)點二配置:

  1. global_defs {
  2.    notification_email {
  3.      admin@centos.bz
  4.    }
  5.    notification_email_from keepalived@domain.com
  6.    smtp_server 127.0.0.1
  7.    smtp_connect_timeout 30
  8.    router_id LVS_DEVEL
  9. }
  10. vrrp_instance VI_1 {
  11.     state BACKUP
  12.     interface eth0
  13.     virtual_router_id 100
  14.     mcast_src_ip 192.168.1.20 ########### 本機IP
  15.     priority 101              ##########權值 要比 master 低。。
  16.     advert_int 1
  17.     authentication {
  18.         auth_type PASS
  19.         auth_pass 1111
  20.     }
  21.     virtual_ipaddress {
  22.        12.12.12.100
  23.     }
  24. }
  25. vrrp_instance VI_1 {
  26.     state MASTER        ############ 輔機為 BACKUP
  27.     interface eth0
  28.     virtual_router_id 200
  29.     mcast_src_ip 192.168.1.103  ########### 本機IP
  30.     priority 102                  ########### 權值要比 back 高
  31.     advert_int 1
  32.     authentication {
  33.         auth_type PASS
  34.         auth_pass 1111
  35.     }
  36.     virtual_ipaddress {
  37.        12.12.12.200
  38.     }
  39. }

3、創(chuàng)建監(jiān)控腳本
node1監(jiān)控腳本:

  1. vi /opt/check.sh
  1. #!/bin/bash
  2. while  :
  3. do
  4. mysqlcheck=`/usr/bin/mysqladmin -uroot ping 2>&1`
  5. mysqlcode=`echo $?`
  6. heartbeat=`ps -C heartbeat –no-header | wc -l`
  7. if [ $mysqlcode -ne 0 ] ;then
  8.  if [ $heartbeat-ne 0 ];then
  9. service heartbeat stop
  10. fi
  11. fi
  12. phpcheck=`ps -C php-fpm –no-header | wc -l`
  13. nginxcheck=`ps -C nginx –no-header | wc -l`
  14. keepalivedcheck=`ps -C keepalived –no-header | wc -l`
  15. if [ $nginxcheck -eq 0 ]|| [ $phpcheck -eq 0 ];then
  16.                 if [ $keepalivedcheck -ne 0 ];then
  17.                    killall -TERM keepalived
  18.                 else
  19.                    echo “keepalived is stoped”
  20.                 fi
  21.         else
  22.                 if [ $keepalivedcheck -eq 0 ];then
  23.                    /etc/init.d/keepalived start
  24.                 else
  25.                    echo “keepalived is running”
  26.                 fi
  27. fi
  28. sleep 5
  29. done

node2監(jiān)控腳本:

  1. #!/bin/bash
  2. while  :
  3. do
  4. phpcheck=`ps -C php-cgi –no-header | wc -l`
  5. nginxcheck=`ps -C nginx –no-header | wc -l`
  6. keepalivedcheck=`ps -C keepalived –no-header | wc -l`
  7. if [ $nginxcheck -eq 0 ]|| [ $phpcheck -eq 0 ];then
  8.                 if [ $keepalivedcheck -ne 0 ];then
  9.                    killall -TERM keepalived
  10.                 else
  11.                    echo “keepalived is stoped”
  12.                 fi
  13.         else
  14.                 if [ $keepalivedcheck -eq 0 ];then
  15.                    /etc/init.d/keepalived start
  16.                 else
  17.                    echo “keepalived is running”
  18.                 fi
  19. fi
  20. sleep 5
  21. done

這個監(jiān)控代碼實現(xiàn)了mysql,nginx,php-fpm的HA。
加上權限,并執(zhí)行

  1. chmod +x /opt/check.sh
  2. nohup sh /opt/check.sh &

設置開機啟動:
echo “nohup sh /opt/check.sh &” >> /etc/rc.loal

4、測試keepalived
分別啟動keepalived

  1. service keepalived start

1)執(zhí)行ip a檢查node1和node2是否已經(jīng)存在vip:12.12.12.100和12.12.12.200
2)測試nginx和php-fpm的HA。在node1執(zhí)行service nginx stop或者service php-fpm stop停止nginx或php-fpm,過幾秒鐘后你會發(fā)現(xiàn)node2已經(jīng)接管了vip 12.12.12.100,并且使用vip 12.12.12.100或12.12.12.200瀏覽nginx網(wǎng)頁你會發(fā)現(xiàn)網(wǎng)頁顯示的IP一直是192.168.1.20,表明 keepalived已經(jīng)成功接管node1的vip和nginx或php-fpm服務。
3)測試mysql HA。在node1執(zhí)行service mysqld stop停止mysql服務,幾秒后在node2查看,發(fā)現(xiàn)node2已經(jīng)接管vip 192.168.1.100,并且已經(jīng)啟動mysql服務。
注意:在恢復mysql或nginx,php-fpm時,先停止監(jiān)控腳本,要不heartbeat或keepalived還沒實現(xiàn)接管又被停止。
參考:http://bbs.ywlm.net/thread-965-1-1.html

本文由“www.126cm.com”收集編輯,如涉及版權問題請郵件通知。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
CentOS6.5下DRBD+HeartBeat+NFS配置(一)
CentOS5系統(tǒng)安裝和配置HA+DRBD+MySQL筆記
FreeSwitch + Bluebox High Availability (HA) Cluster using Heartbeat and DRBD
構建MySQL+DRBD+Keepalived集群服務 | 專注Unix/Linux領域
生產(chǎn)環(huán)境下的高可用NFS文件服務器
要學好linux運維請從排版畫圖開始
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服