中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LVS+OSPF IPV6 部署

發布時間:2020-03-01 04:44:45 來源:網絡 閱讀:1741 作者:筑夢攻城獅 欄目:建站服務器

?【背景】

???????今年ipv6的事情再次提上議程,工信部一直在強推,不知道大家都開搞沒有?我們這邊收到的要求是這樣的:


LVS+OSPF IPV6 部署


????????一開始只是說Q4只要保證測試環境下主要業務功能可以在ipv6 環境下順利運作即可,突然就變成至少灰度10%的線上流量到ipv6環境

????????這段時間都在折騰ipv6 的事情,各種環境部署聯調什么的,翻閱不少資料,但網上關于這塊的資料實在太少了,環境部署期間踩過不少坑,這里簡單記錄下。


【部署】



lb-01

lb-02

rs-01

rs-02

vip

ipv4

10.1.1.111

10.1.1.112

10.1.1.113

10.1.1.114

10.21.5.7

ipv6

240e:45e:1111:1ff::1

240e:45e:1111:1ff::2

240e:45e:1111:1ff::3

240e:45e:1111:1ff::4

240e:97d:1111:2ff::2



一、ospf

1、打開ospf6d進程監聽

ipv6環境下相比原來ipv4,需要額外打開ospf6d

root@node-01:/etc/quagga#?cat??daemons
zebra=yes
bgpd=no
ospfd=yes
ospf6d=yes
ripd=no
ripngd=no
isisd=no


2、配置ospf

root@node-01:/etc/quagga#??cat?/etc/quagga/ospf6d.conf
!
!?Zebra?configuration?saved?from?vty
!???2019/11/21?11:55:20
!
hostname?ospf6d
password?zebra
log?stdout
log?file?/var/log/quagga/ospf6d.log
!
!

interface?eth0
ipv6?ospf6?hello-interval?1
ipv6?ospf6?dead-interval?3
ipv6?ospf6?priority?0
ipv6?ospf6?instance-id?0

interface?lo
ipv6?ospf6?hello-interval?1
ipv6?ospf6?dead-interval?3
ipv6?ospf6?priority?0
ipv6?ospf6?instance-id?0

router?ospf6
?router-id?10.1.1.111
?interface?eth0?area?0.0.0.0
?interface?lo?area?0.0.0.0
!
line?vty


以下是ipv4的ospf 配置,可以對比下配置之間的差異

!
!?Zebra?configuration?saved?from?vty
!???2019/10/15?16:51:09
!
hostname?ospfd
password?zebra
log?stdout
log?file?/var/log/quagga/ospf.log
!
!

interface?eth0
!
ip?ospf?hello-interval?1
ip?ospf?dead-interval?3
ip?ospf?priority?0

interface?eth2
!
ip?ospf?hello-interval?1
ip?ospf?dead-interval?3
ip?ospf?priority?0

!
router?ospf
ospf?router-id?10.1.1.111

network?10.21.5.7/32?area?0.0.0.0
network?10.1.1.0/24?area?0.0.0.0
!
line?vty


注意事項:

  • log file 建議設置一個額外的日志路徑,跟原來ipv4 ospfd 日志分開打印,方便日后排查問題

  • router ospf 配置改成router ospf6

  • ospf 進程id一般使用機器IP(保證唯一即可)

  • 還有一個最大的不同就是機器IP網段跟VIP不需要在router ospf 里面宣告,ipv6只需要指定哪些接口需要對外宣告即可


3、啟動quagga

root@node-01:/etc/quagga#?/etc/init.d/quagga?restart
[?ok?]?Restarting?quagga?(via?systemctl):?quagga.service.


啟動后會看到多watch 了一個ospf6d進程

root@node-01:/etc/quagga#?ps?aux|grep?quagga
quagga???25820??0.0??0.0??24496???616??????????Ss???15:15???0:00?/usr/lib/quagga/zebra?--daemon?-A?127.0.0.1
quagga???25824??0.0??0.0??26980??2732??????????Ss???15:15???0:00?/usr/lib/quagga/ospfd?--daemon?-A?127.0.0.1
quagga???25828??0.0??0.0??24556???628??????????Ss???15:15???0:00?/usr/lib/quagga/ospf6d?--daemon?-A?::1
root?????25833??0.0??0.0??15428???168??????????Ss???15:15???0:00?/usr/lib/quagga/watchquagga?--daemon?zebra?ospfd?ospf6d


telnet 本地2606 端口

root@node-01:/etc/quagga#?telnet?::1?2606
Trying?::1...
Connected?to?::1.
Escape?character?is?'^]'.
Hello,?this?is?Quagga?(version?0.99.24.1).
Copyright?1996-2005?Kunihiro?Ishiguro,?et?al.
User?Access?Verification
ospf6d>?show?ipv6?ospf6?neighbor
Neighbor?ID?????Pri????DeadTime??State/IfState?????????Duration?I/F[State]
10.1.1.1???255????00:00:02???Full/DR??????????????00:00:09?eth0[DROther]


注:這里遇到一個坑,由于我們跑的是TUNNEL模式的LVS,需要將MTU設小,在ospf起來后,發現沒辦法跟交換機建立鄰居,交換機側日志顯示需要將交換機接口MTU設成一樣的值(我們的環境下是1440)

而ipv4 環境下交換機側并不需要設置MTU。


4、配置VIP

LB 上面啟動ipv6 vip

有兩種配置方式:(IPV6相關操作命令見文末)

方式一:

root@node01:/etc/quagga#??ip?addr?add?240E:97D:1111:2FF::2/64?dev?lo:vip1?label?lo:vip1


方式二:

root@node01:/etc/quagga#??/sbin/ifconfig?lo:vip3?inet6?add?240E:97D:1111:2FF::2/64



5、測試ipv6 vip連通性

root@ubuntu:/usr/local/named/etc#?ping6?240e:97d:1111:2ff::2?-c?3
PING?240e:97d:1111:2ff::2(240e:97d:1111:2ff::2)?56?data?bytes
64?bytes?from?240e:97d:1111:2ff::2:?icmp_seq=1?ttl=51?time=28.4?ms
64?bytes?from?240e:97d:1111:2ff::2:?icmp_seq=2?ttl=51?time=28.4?ms
64?bytes?from?240e:97d:1111:2ff::2:?icmp_seq=3?ttl=51?time=28.3?ms


注意:

測試的機器必須也有ipv6地址,否則會返回網絡不可達


二、配置LVS

1、編譯安裝較新版本keepalived(這里我編譯的是keepalived-2.0.18)

注:建議在 ubuntu16.04 以上版本環境下編譯,嘗試過在12.04 跟 14.04等低版本下ubuntu有些包找不到

root@ubuntu:/usr/local/src/keepalived-2.0.18# apt-get install libnftnl-dev libmnl-dev

root@ubuntu:/usr/local/src/keepalived-2.0.18# apt-get install iptables-dev libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev

root@ubuntu:/usr/local/src/keepalived-2.0.18# ./configure --prefix=/usr/local/keepalived

root@ubuntu:/usr/local/src/keepalived-2.0.18# ?make && make install



2、keepalived配置

方式一:命令行

root@node-01:/etc/quagga#?ipvsadm?-A?-t?[240e:97d:2014:1ff::2]:80?-s?rr
root@node-01:/etc/quagga#?ipvsadm?-a?-t?[240e:97d:2014:1ff::2]:80?-r?10.21.41.43:80?-i
root@node-01:/etc/quagga#?ipvsadm?-a?-t?[240e:97d:2014:1ff::2]:80?-r?10.21.41.44:80?-i



方式二:

virtual_server?240e:97d:1111:2ff::2?80?{
????delay_loop?6
????lb_algo??wrr
????lb_kind?TUN
????persistence_timeout?0
????protocol?TCP

????real_server?240e:45e:1111:1ff::3?80?{
????????weight?10
????????TCP_CHECK?{
????????????connect_port?80
????????????connect_timeout?8
????????????nb_get_retry?3
????????????delay_before_retry?3
????????}
????}
????real_server?240e:45e:1111:1ff::4?80?{
????????weight?10
????????TCP_CHECK?{
????????????connect_port?80
????????????connect_timeout?8
????????????nb_get_retry?3
????????????delay_before_retry?3
????????}
????}
}


root@node-01:/etc/quagga#?ipvsadm?-ln
IP?Virtual?Server?version?1.2.1?(size=1048576)
Prot?LocalAddress:Port?Scheduler?Flags
??->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn
TCP??[240e:97d:1111:2ff::2]:80?rr
??->?[240e:45e:1111:1ff::3]:80????Tunnel??1??????0??????????0?????????
??->?[240e:45e:1111:1ff::4]:80????Tunnel??1??????0??????????0


3、配置RS VIP

LVS tunnel模式下,RS上面需要做2個事情,一個是起VIP,一個是跟LB間建立TUN隧道

root@node-03:~?#?ip?-6?tunnel?add?lvs6tun0?mode?ip6ip6?local?240e:45e:1111:1ff::3?remote?240e:45e:1111:1ff::2?dev?eth0
root@node-03:~?#?ip?link?set?dev?lvs6tun0?up
root@node-03:~?#?ip?-6?addr?add?240e:97d:1111:2ff::2/64?dev?lvs6tun0


創建ipv6 tunnel 命令說明,由于是點對點tunnel,這里需要指明local 即本地RSIP,remote 對端IP,也就是LB的IP

ip?-6?tunnel?add?lvs6tun0?mode?ip6ip6?local?$rs-ip?remote?$lb-ip?dev?$interface


點對點顧名思義就是每個節點之間需要建立peer,n個LB節點,m個RS節點,最終需要建立 n * m 個tunnel


這里跟ipv4 比較大的區別是,ipv6沒有廣播地址,沒辦法建立一個一對多的tunnel,只能基于ip6ip6協議建立一個點對點的tunnel,下面是ipv4環境下tunnel 創建的方式,可以對比下:

/sbin/ifconfig?tunl0?$vip?broadcast?$vip?netmask?255.255.255.255?up
/sbin/route?add?-host?$vip?dev?tunl0


4、服務測試

在一臺擁有ipv6 的機器上(不能是上述集群中的機器),嘗試通過ipv6 vip 訪問

root@ubuntu:~?#?for?i?in?{0..999};do?nc?-6?-v?-w?1?240e:97d:1111:2ff::2?80;done
Connection?to?240e:97d:1111:2ff::2?80?port?[tcp/http]?succeeded!
Connection?to?240e:97d:1111:2ff::2?80?port?[tcp/http]?succeeded!
Connection?to?240e:97d:1111:2ff::2?80?port?[tcp/http]?succeeded!
...?...

root@ubuntu:~?#?curl?http://[240e:97d:1111:2ff::2]/?-H"Host:ipv6-test.aaa.com"
Test?Page


至此,測試環境可以正常通信。


另外說明一點,測試的時候也驗證了LVS NAT/DR模式,都可以原生支持,不像TUNNEL 這么麻煩,像DR模式,RS上配置個VIP上去就完事了。之所以沒采用DR,是因為DR模式存在LB跟RS必須在同個網段的限制,我們生產環境無法保證LB跟RS一定在同網段。而NAT性能較差,FullNAT 也有一部分業務在用,性能不是特別好,依賴nf_conntrack 表,最后選擇了TUNNEL模式。



注意:

部署過程中ipv6 tunnel 的配置最費勁,嘗試過各種方式,都不行。現象是LB 給RS 發了SYN包,但收不到ACK, LB上連接處于一個SYNC_RECV狀態(通過ipvsadm -lnc 可以看到連接狀態)

最后通過上面的點對點tunnel方式解決,暫時沒有其他更合適的方式,后續發現了再更新下。

上述只是一個基本可用的測試環境,要正式上線的話還需要進行各種性能、參數調優才行。


ipv6 其實涉及的東西非常多,并不僅僅只有上面提到的,還有DNS、GSLB、業務、網絡、CDN等等各個層面都會涉及相關的改造。測試的話可以玩一玩,但正式上線還是得謹慎,畢竟據我了解國內很多運營商對ipv6 支持還不是特別好,據上次跟阿里云的同學交流,在相同場景下,從ipv4 切到 ipv6 性能會降20%-40%,需要靠后期不斷優化,總的來說任重道遠。



附:

1、IPV6環境測試網站

純ipv6環境請使用:http://ipv6.test-ipv6.com

雙棧環境請使用:http://www.test-ipv6.com/


2、ipv6相關指令

http://tldp.org/HOWTO/Linux+IPv6-HOWTO/ch06s02.html

http://tldp.org/HOWTO/Linux+IPv6-HOWTO/ch07s02.html

http://tldp.org/HOWTO/Linux+IPv6-HOWTO/ch04s03.html




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

响水县| 抚宁县| 雅江县| 临泉县| 奉新县| 板桥市| 通渭县| 梅州市| 仲巴县| 通化市| 米林县| 中方县| 定边县| 桐城市| 安溪县| 凯里市| 香港| 县级市| 登封市| 千阳县| 长白| 大姚县| 越西县| 依安县| 酒泉市| 诸城市| 固原市| 宿州市| 汉川市| 新田县| 蒙自县| 浮山县| 宣武区| 安康市| 江川县| 子洲县| 合作市| 凯里市| 古田县| 城市| 台中市|