本文環(huán)境如下:
1 準(zhǔn)備4個(gè)ubuntu16.04虛擬機(jī)(啟用網(wǎng)卡二并使用橋接模式):
A服務(wù)器:192.168.0.103 主
B服務(wù)器:192.168.0.104 主(備)
C服務(wù)器:192.168.0.106
D服務(wù)器:192.168.0.107
虛擬IP (VIP):192.168.0.222
2 nginx均使用oneinstack來安裝的
架構(gòu)規(guī)劃:
負(fù)載均衡服務(wù)器:A(主)和B(主備)
web服務(wù)器:C和D
部署完成之后:
1、虛擬IP192.168.0.222指向A和B
2、當(dāng)A宕機(jī)時(shí),虛擬IP192.168.0.222漂移到B上,A啟起來后自動(dòng)成為master
一 安裝配置keepalived
安裝keepalived前先安裝popt庫:
$ sudo apt-get install libpopt-dev
安裝keepalived:
$ sudo apt-get install keepalived
A服務(wù)器keepalived配置(keepalived配置在/etc/keepalived/keepalived.conf,如果沒有keepalived.conf則創(chuàng)建):
! Configuration File for keepalivedglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict}vrrp_script chk_http_port { script "</dev/tcp/127.0.0.1/8088" interval 1 weight -2 } vrrp_instance VI_1 { state MASTER interface enp0s8 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.222 }}
B服務(wù)器keepalived配置(keepalived配置在/etc/keepalived/keepalived.conf,如果沒有keepalived.conf則創(chuàng)建):
! Configuration File for keepalivedglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict}vrrp_script chk_http_port { script "</dev/tcp/127.0.0.1/8088" interval 1 weight -2 } vrrp_instance VI_1 { state BACKUP interface enp0s8 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.222 }}
然后分別啟動(dòng)A和B服務(wù)器的keepalived服務(wù):
$ service keepalived start
在A服務(wù)器執(zhí)行命令 ip a 如果出現(xiàn)標(biāo)紅的一行,說明keepalived配置成功
$ ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:e0:3b:df brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 85009sec preferred_lft 85009sec inet6 fe80::a74c:9a93:5116:118/64 scope link valid_lft forever preferred_lft forever3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:82:4c:24 brd ff:ff:ff:ff:ff:ff inet 192.168.0.103/24 brd 192.168.0.255 scope global dynamic enp0s8 valid_lft 5809sec preferred_lft 5809sec valid_lft forever preferred_lft forever inet6 fe80::5f42:1580:33ed:51ef/64 scope link valid_lft forever preferred_lft forever
二 各服務(wù)器nginx配置
A和B服務(wù)器nginx.conf配置
打開/usr/local/nginx/conf/nginx.conf,在http段加入以下代碼:
upstream test.com { server 192.168.0.106:80; server 192.168.0.107:80; } server { listen 80; server_name test.com; location / { proxy_pass http://test.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
C和D服務(wù)器nginx.conf配置
打開/usr/local/nginx/conf/nginx.conf,在http段加入以下代碼:
server { listen 80; server_name test.com; access_log /data/wwwlogs/access_nginx.log combined; root /data/wwwroot/default; index index.html index.htm index.php;}
附keepalived配置詳解:
! Configuration File for keepalivedglobal_defs { notification_email { admin@lvtao.net #設(shè)置報(bào)警郵件地址,可以設(shè)置多個(gè),每行一個(gè)。 需開啟本機(jī)的sendmail服務(wù) } notification_email_from admin@lvtao.net #設(shè)置郵件的發(fā)送地址 smtp_server 127.0.0.1 #設(shè)置smtp server地址 smtp_connect_timeout 30 #設(shè)置連接smtp server的超時(shí)時(shí)間 router_id LVS_DEVEL #表示運(yùn)行keepalived服務(wù)器的一個(gè)標(biāo)識(shí)。發(fā)郵件時(shí)顯示在郵件主題的信息}vrrp_instance VI_1 { state MASTER #指定keepalived的角色,MASTER表示此主機(jī)是主服務(wù)器,BACKUP表示此主機(jī)是備用服務(wù)器 interface eth0 #指定HA監(jiān)測(cè)網(wǎng)絡(luò)的接口 virtual_router_id 51 #虛擬路由標(biāo)識(shí),這個(gè)標(biāo)識(shí)是一個(gè)數(shù)字,同一個(gè)vrrp實(shí)例使用唯一的標(biāo)識(shí)。即同一vrrp_instance下,MASTER和BACKUP必須是一致的 priority 100 #定義優(yōu)先級(jí),數(shù)字越大,優(yōu)先級(jí)越高,在同一個(gè)vrrp_instance下,MASTER的優(yōu)先級(jí)必須大于BACKUP的優(yōu)先級(jí) advert_int 1 #設(shè)定MASTER與BACKUP負(fù)載均衡器之間同步檢查的時(shí)間間隔,單位是秒 authentication { #設(shè)置驗(yàn)證類型和密碼 auth_type PASS #設(shè)置驗(yàn)證類型,主要有PASS和AH兩種 auth_pass 1111 #設(shè)置驗(yàn)證密碼,在同一個(gè)vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信 } virtual_ipaddress { #設(shè)置虛擬IP地址,可以設(shè)置多個(gè)虛擬IP地址,每行一個(gè) 10.0.0.148 }}virtual_server 10.0.0.148 80 { #設(shè)置虛擬服務(wù)器,需要指定虛擬IP地址和服務(wù)端口,IP與端口之間用空格隔開 delay_loop 6 #設(shè)置運(yùn)行情況檢查時(shí)間,單位是秒 lb_algo rr #設(shè)置負(fù)載調(diào)度算法,這里設(shè)置為rr,即輪詢算法 lb_kind DR #設(shè)置LVS實(shí)現(xiàn)負(fù)載均衡的機(jī)制,有NAT、TUN、DR三個(gè)模式可選 persistence_timeout 50 #會(huì)話保持時(shí)間,單位是秒。這個(gè)選項(xiàng)對(duì)動(dòng)態(tài)網(wǎng)頁是非常有用的,為集群系統(tǒng)中的session共享提供了一個(gè)很好的解決方案。 #有了這個(gè)會(huì)話保持功能,用戶的請(qǐng)求會(huì)被一直分發(fā)到某個(gè)服務(wù)節(jié)點(diǎn),直到超過這個(gè)會(huì)話的保持時(shí)間。 #需要注意的是,這個(gè)會(huì)話保持時(shí)間是最大無響應(yīng)超時(shí)時(shí)間,也就是說,用戶在操作動(dòng)態(tài)頁面時(shí),如果50秒內(nèi)沒有執(zhí)行任何操作, #那么接下來的操作會(huì)被分發(fā)到另外的節(jié)點(diǎn),但是如果用戶一直在操作動(dòng)態(tài)頁面,則不受50秒的時(shí)間限制 protocol TCP #指定轉(zhuǎn)發(fā)協(xié)議類型,有TCP和UDP兩種 real_server 10.0.0.137 80 { #配置服務(wù)節(jié)點(diǎn)1,需要指定real server的真實(shí)IP地址和端口,IP與端口之間用空格隔開 weight 3 #配置服務(wù)節(jié)點(diǎn)的權(quán)值,權(quán)值大小用數(shù)字表示,數(shù)字越大,權(quán)值越高,設(shè)置權(quán)值大小可以為不同性能的服務(wù)器 #分配不同的負(fù)載,可以為性能高的服務(wù)器設(shè)置較高的權(quán)值,而為性能較低的服務(wù)器設(shè)置相對(duì)較低的權(quán)值,這樣才能合理地利用和分配系統(tǒng)資源 TCP_CHECK { #realserver的狀態(tài)檢測(cè)設(shè)置部分,單位是秒 connect_timeout 10 #表示3秒無響應(yīng)超時(shí) nb_get_retry 3 #表示重試次數(shù) delay_before_retry 3 #表示重試間隔 connect_port 80 } } real_server 10.0.0.139 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }}
聯(lián)系客服