第18章 Linux集群架构
2019獨角獸企業重金招聘Python工程師標準>>>
keepalived介紹
- 在這里使用keepalived來實現高可用集群,因為heartbeat在centos6上有一些問題,影響實驗效果
- heartbeat 切換的時候,會不是很及時——>比如:主 已經宕機了,但 從 卻一直啟動不了,通信會不順暢,所以不使用 heartbeat
- keepalived通過VRRP(Virtual Router Redundancy Protocl 中文為:虛擬路由冗余協議)來實現高可用。
- 虛擬路由冗余協議(Virtual Router Redundancy Protocol,簡稱VRRP)是由IETF提出的解決局域網中配置靜態網關出現單點失效現象的路由協議,1998年已推出正式的RFC2338協議標準。VRRP廣泛應用在邊緣網絡中,它的設計目標是支持特定情況下IP數據流量失敗轉移不會引起混亂,允許主機使用單路由器,以及及時在實際第一跳路由器使用失敗的情形下仍能夠維護路由器間的連通性。
- 在這個協議里,會將多臺功能相同的路由器組成一個小組,這個小組里會有1個master角色和N(N>=1)個backup角色。
- master會通過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認為master宕機了。此時就需要根據各個backup的優先級來決定誰成為新的mater。
- Keepalived要有三個模塊,分別是core、check和vrrp。其中core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。
用keepalived配置高可用集群
-
準備兩臺機器130和132,130作為master,132作為backup
-
兩臺機器都執行yum install -y keepalived
-
兩臺機器都安裝nginx,其中130上已經編譯安裝過nginx,132上需要yum安裝nginx: yum install -y nginx
-
設定vip為100
-
編輯130上keepalived配置文件,內容獲取地址
-
130編輯監控腳本,內容獲取地址https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf
-
給腳本755權限
-
systemctl start keepalived 130啟動服務
-
132上編輯配置文件,內容獲取地址
-
132上編輯監控腳本,內容獲取地址
-
給腳本755權限
-
132上也啟動服務 systemctl start keepalived
keepalived配置高可用集群
1.首先準備兩臺機器,都安裝keepalived
- keepalived,實際是包含一個服務的,也就是說這個服務用來實現高可用
2.這里使用 nginx ,把它作為一個高可用的對象——>使用nginx作為演示對象的原因,因為nginx在工作中,在生產環境中,很多企業把nginx做一個負載均衡器
- 假設nginx一旦掛掉,那么后端所有的web,即使說是正常的,那也無法訪問到
3.若是A、B機器沒有裝nginx服務,可以直接 yum安裝
- 若是lnmp安裝過nginx,則不需要安裝了(源碼包安裝的nginx)
- 直接yum安裝的nginx,兩者很容易區分(PS:有時直接yum安裝不了,需要安裝yum擴展源——>yum install -y epel-release)
- 源碼包安裝nginx
- 源碼安裝nginx經常出現的錯誤
- A機器源碼安裝nginx (PS:有時初始化的時候,會看到無法初始化,是因為缺少一些包yum install -y gcc)
4.更改keepalived配置文件了,內容地址
- 默認的配置文件路徑在/etc/keepalived/keepalived.conf
- 清空文件的快捷鍵方法 > !$
- virtual_ipaddress:簡稱VIP,這個vip,兩臺機器,一個主,一個從,正常的情況是主在服務,主宕掉了,從起來了,從啟動服務,從啟動nginx以后,,啟動以后,訪問那個IP呢?把域名解析到那個IP上呢?假如解析到主上,主宕掉了,所以這個,需要定義一個公有IP(主上用的IP,從上也用的IP);這個IP是隨時可以夏掉,去配置的
5.定義監控腳本,腳本內容獲取地址https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
- 腳本路徑在keepalived配置文件中有定義,路徑為/usr/local/sbin/check_ng.sh
- “腦裂”,在高可用(HA)系統中,當聯系2個節點的“心跳線”斷開時,本來為一整體、動作協調的HA系統,就分裂成為2個獨立的個體。由于相互失去了聯系,都以為是對方出了故障。兩個節點上的HA軟件像“裂腦人”一樣,爭搶“共享資源”、爭起“應用服務”,就會發生嚴重后果——或者共享資源被瓜分、2邊“服務”都起不來了;或者2邊“服務”都起來了,但同時讀寫“共享存儲”,導致數據損壞
- 如何判斷腦裂?
- 分別在兩臺機查看當前服務器是否擁有虛擬IP,如果兩臺服務器都擁有,則說明發生了腦裂,證明目前雙機通信出現問題,產生此問題的原有在于 兩臺服務器都探測不到組內其他服務器的狀態(心跳請求無法正常響應),私自判定另一臺服務器掛起,則搶占虛擬IP,腦裂的出現是不被允許的,解決此問題的方法為檢查防火墻設置(關閉防火墻)或者使用串口通信。
6.腳本創建完之后,還需要改變腳本的權限(不更改權限,就無法自動加載腳本,那就無法啟動keepalived服務)
[root@xuexi-001 ~]# chmod 755 /usr/local/sbin/check_ng.sh7.啟動keepalived服務,并查看是否啟動成功(PS:啟動不成功,有可能是防火墻未關閉或者規則限制導致的)
- systemctl stop firewalld 關閉firewalld
- iptables -nvL
- setenforce 0 臨時關閉selinux
- getenforce命令查看是否為Permissive
- 這時再來啟動keepalived,就會看到keepalived進程服務了
8.查看nginx服務進程
[root@xuexi-001 ~]# ps aux |grep nginx root 1035 0.0 0.0 46040 1292 ? Ss 20:14 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 1041 0.0 0.2 48576 4188 ? S 20:14 0:00 nginx: worker process nobody 1042 0.0 0.2 48576 3928 ? S 20:14 0:00 nginx: worker process root 2389 0.0 0.0 112720 968 pts/0 R+ 23:12 0:00 grep --color=auto nginx9.這時停止nginx服務
- /etc/init.d/nginx stop
10.再來查看nginx服務進程,會看到自動加載了
[root@xuexi-001 ~]# ps aux |grep nginx root 2478 0.0 0.0 46040 1292 ? Ss 23:12 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 2480 0.0 0.2 48576 4192 ? S 23:12 0:00 nginx: worker process nobody 2481 0.0 0.2 48576 3928 ? S 23:12 0:00 nginx: worker process root 2515 0.0 0.0 112720 972 pts/0 R+ 23:12 0:00 grep --color=auto nginx11.keepalived日志文件路徑
- /var/log/messages
12.查看ip地址,使用 ip add 命令,而不能使用ifconfig命令,因為 ifconfig命令 是無法查看到vip192.168.5.100這個IP的
[root@xuexi-001 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ffinet 192.168.5.130/24 brd 192.168.5.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.5.100/32 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0valid_lft forever preferred_lft foreverinet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ff13.檢查A、B 機器下防火墻和selinux是否關閉了,若沒有關閉,可能會導致實驗失敗
- systemctl stop firewalld 關閉firewalld
- iptables -nvL
- setenforce 0 臨時關閉selinux
- getenforce命令查看是否為Permissive
以上就是主機器A的配置
backup 機器配置
1.在B機器yum安裝nginx和keepalived
[root@hf-01 ~]# yum install -y epel-release [root@hf-01 ~]# yum install -y nginx2.關閉B機器的防火墻和selinux
- iptables -F 清空規則
- setenforce 0 臨時關閉selinux
3.自定義B機器keepalived配置文件,內容獲取地址,更改虛擬IP和主一樣的 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf
首先清空B機器keepalived里面自帶的配置文件 [root@localhost ~]# > /etc/keepalived/keepalived.conf 然后復制配置文件并粘貼進去,更改虛擬IP和主一樣的 [root@localhost ~]# vi !$ vi /etc/keepalived/keepalived.confglobal_defs {notification_email {aming@aminglinux.com}notification_email_from root@aminglinux.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL } vrrp_script chk_nginx {script "/usr/local/sbin/check_ng.sh"interval 3 } vrrp_instance VI_1 {state BACKUP //這里 和master不一樣的名字interface ens33 //網卡和當前機器一致,否則無法啟動keepalived服務virtual_router_id 51 //和主機器 保持一致priority 90 //權重,要比主機器小的數值advert_int 1authentication {auth_type PASSauth_pass aminglinux>com}virtual_ipaddress {192.168.5.100 //這里更改為192.168.5.100}track_script {chk_nginx} }保存退出4.定義監控腳本,路徑再keepalived里面已定義過,腳本內容地址 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh
- 這個腳本和主上的腳本有一點區別,啟動nginx的命令不同,因為一個是yum安裝,一個是源碼包安裝
5.改動腳本的權限,設置為755權限
[root@localhost ~]# chmod 755 /usr/local/sbin/check_ng.sh6.B機器啟動keepalived服務
- systemctl start keepalived
如何區分主和從上的nginx?
A機器,是源碼包安裝的nginx(PS:這是lnmp配置好的環境虛擬主機內容)
[root@xuexi-001 ~]# cat /usr/local/nginx/conf/vhost/ aaa.com.conf proxy.conf test.com.conf load.conf ssl.conf [root@xuexi-001 ~]# cat /usr/local/nginx/conf/vhost/aaa.com.conf server {listen 80 default_server; server_name aaa.comindex index.html index.htm index.php;root /data/wwwroot/default; location ~ \.php${include fastcgi_params;fastcgi_pass unix:/tmp/aming.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;} }[root@xuexi-001 ~]# cat /data/wwwroot/default/index.html master This is the default site.- B機器是yum安裝的nginx
- 默認的索引頁在 /usr/share/nginx/html/index.html
- 訪問192.168.5.100這個VIP會看到和主機器(即A機器相同的內容),說明現在訪問到的是機器master,VIP在master上
問題-B機器無法調用nginx服務?
- B機器關閉nginx服務,keepalived無法拉動nginx服務起來
- 解決方法:
- 再次設置755權限,就可以拉動nginx服務了
測試高可用
1.模擬線上生產環境,主機器宕機環境,最簡單直接的方法,就是直接關閉keepalived服務
2.關閉master機器(即A機器)上的keepalived服務關閉
[root@xuexi-001 ~]# systemctl stop keepalived3.查看A機器上的VIP被已經釋放掉了
[root@xuexi-001 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ffinet 192.168.5.130/24 brd 192.168.5.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0valid_lft forever preferred_lft foreverinet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ff4.查看backup機器(即B機器)在監聽VIP
[root@localhost ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:36:a3:32 brd ff:ff:ff:ff:ff:ffinet 192.168.5.133/24 brd 192.168.5.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.5.100/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::cf14:5db2:1b49:f0c2/64 scope link valid_lft forever preferred_lft forever5.查看B機器日志
[root@localhost ~]# tail /var/log/messages Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.1006.瀏覽器訪問vip,會看到已經變成backup機器上的了
7.在master機器(即A機器)啟動keepalived服務,會看到vip這個IP立刻回來了
[root@xuexi-001 ~]# systemctl start keepalived [root@xuexi-001 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ffinet 192.168.5.130/24 brd 192.168.5.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.5.100/32 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0valid_lft forever preferred_lft foreverinet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ffinet6 fe80::44c4:9bed:dd1f:6c01/64 scope link valid_lft forever preferred_lft forever8.查看B機器日志變化
[root@localhost ~]# tail /var/log/messages Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 [root@localhost ~]# tail /var/log/messages Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:50:01 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Received advert with higher priority 100, ours 90 Sep 3 23:50:01 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Entering BACKUP STATE Sep 3 23:50:01 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) removing protocol VIPs.總結
- 在生產環境中,可能會用到2-3臺backup角色, vim /etc/keepalived/keepalived.conf 這里面的權重調成不同級別,權重越高優先級越高!除了nginx服務的話,還可以做MySQL的高可用集群服務。(做mysql的高可用,一定要保證兩邊的數據一致)
LVS 介紹
- LVS是由國人章文嵩開發
- 流行度不亞于apache的httpd,基于TCP/IP做的路由和轉發,穩定性和效率很高
- LVS最新版本基于Linux內核2.6,有好多年不更新了
- LVS有三種常見的模式:NAT、DR、IP Tunnel
- LVS架構中有一個核心角色叫做分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)
LVS三種模式:
1、 LVS NAT模式
- 這種模式借助iptables的nat表來實現
- 用戶的請求到分發器后,通過預設的iptables規則,把請求的數據包轉發到后端的rs上去
- rs需要設定網關為分發器的內網ip
- 用戶請求的數據包和返回給用戶的數據包全部經過分發器,所以分發器成為瓶頸
- 在nat模式中,只需要分發器有公網ip即可,所以比較節省公網ip資源
# 使用NAT 這種模式的請求量不能過大 一般十臺以內,超過十臺就有點力不從心了,除非機器配置很高,網卡是千兆網卡,萬兆光纖。
2、 LVS IP Tunnel模式
- 這種模式,需要有一個公共的IP配置在分發器和所有rs上,我們把它叫做vip
- 客戶端請求的目標IP為vip,分發器接收到請求數據包后,會對數據包做一個加工,會把目標IP改為rs的IP,這樣數據包就到了rs上
- rs接收數據包后,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己 [![]
3、LVS DR模式
- 這種模式,也需要有一個公共的IP配置在分發器和所有rs上,也就是vip
- 和IP Tunnel不同的是,它會把數據包的MAC地址修改為rs的MAC地址
- rs接收數據包后,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己
NAT模式搭建 – 準備工作
- 三臺機器
- 分發器,也叫調度器(簡寫為dir)
- 內網:133.130,外網:142.147(vmware僅主機模式)
- rs1
- 內網:133.132,設置網關為133.130
- rs2
- 內網:133.133,設置網關為133.130
- 三臺機器上都執行執行
- systemctl stop firewalld; systemc disable firewalld
- systemctl start iptables-services; iptables -F; service iptables save
- 三臺機器
- 分發器,也叫調度器(簡寫為dir)
- 內網:5.130,外網:81.144(vmware僅主機模式)
- rs1
- 內網:5.133,設置網關為5.130
- rs2
- 內網:5.134,設置網關為5.130
- 三臺機器上都執行執行
- systemctl stop firewalld; systemc disable firewalld
- systemctl start iptables-services; iptables -F; service iptables save
安裝iptables-services 每臺機器上都安裝
[root@xuexi-003 ~]# yum install -y iptables-services [root@xuexi-003 ~]# systemctl start iptables [root@xuexi-003 ~]# systemctl enable iptables Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service. [root@xuexi-003 ~]# iptables -F [root@xuexi-003 ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables: [ 確定 ]#為什么要開啟iptables 服務,是因為要調用一個空規則,隨后需要配置一個新的規則出來,默認的規則可能影響到實驗效果。
然后還需要關閉selinux 所有的機器都需要更改
[root@xuexi-003 ~]# getenforce Disabled [root@xuexi-003 ~]# setenforce 0 setenforce: SELinux is disabled [root@xuexi-003 ~]# vi /etc/selinux/config 更改配置文件關閉selinux1、安裝ipvsadm
[root@xuexi-001 ~]# yum install -y ipvsadm2、在dir上編寫腳本,vim /usr/local/sbin/lvs_nat.sh //內容如下
配置文件內容 #! /bin/bash # director 服務器上開啟路由轉發功能,不開啟的話沒有辦法把數據傳輸到后面的rs上面 echo 1 > /proc/sys/net/ipv4/ip_forward # 關閉icmp的重定向 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects # 注意區分網卡名字,兩個網卡分別為ens33和ens37 echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects # director 設置nat防火墻 iptables -t nat -F #清空iptables 規則 iptables -t nat -X #清空鏈 iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -j MASQUERADE #可以實現同網段的內網上網 # director設置ipvsadm IPVSADM='/usr/sbin/ipvsadm' $IPVSADM -C #清空規則 $IPVSADM -A -t 192.168.81.144:80 -s wlc -p 3 #設置一個規則 指定使用的什么規則(大規則) $IPVSADM -a -t 192.168.81.144:80 -r 192.168.5.133:80 -m -w 1 $IPVSADM -a -t 192.168.81.144:80 -r 192.168.5.134:80 -m -w 1 #具體的規則(小規則)3、沒有輸出內容,說明配置沒有問題
[root@xuexi-001 ~]# sh /usr/local/sbin/lvs_nat.sh [root@xuexi-001 ~]#4、
- 兩臺rs上都安裝nginx
- 設置兩臺rs的主頁,做一個區分,也就是說直接curl兩臺rs的ip時,得到不同的結果
- 瀏覽器里訪問192.168.81.144,多訪問幾次看結果差異
可以在dir上更改一下規則,編輯配置文件vim /usr/local/sbin/lvs_nat.sh 將$IPVSADM -A -t 192.168.81.144:80 -s wlc -p 3 后面的-p 3 去掉
查看ipvsadm 設置的規則
[root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.81.144:80 wlc-> 192.168.5.133:80 Masq 1 2 0 -> 192.168.5.134:80 Masq 1 0 4測試
[root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-002 192.168.5.133 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-002 192.168.5.133 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-002 192.168.5.133 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-002 192.168.5.133 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134測試結果
Keepalived+LVS DR
- 完整架構需要兩臺服務器(角色為dir)分別安裝keepalived軟件,目的是實現高可用,但keepalived本身也有負載均衡的功能,所以本次實驗可以只安裝一臺keepalived
- keepalived內置了ipvsadm的功能,所以不需要再安裝ipvsadm包,也不用編寫和執行那個lvs_dir的腳本
- 三臺機器分別為:
- dir(安裝keepalived)133.130
- rs1 133.132
- rs2 133.133
- vip 133.200
- 編輯keepalived配置文件 vim /etc/keepalived/keepalived.conf//內容地址
- 需要更改里面的ip信息
- 執行ipvsadm -C 把之前的ipvsadm規則清空掉
- systemctl restart network 可以把之前的vip清空掉
- 兩臺rs上,依然要執行/usr/local/sbin/lvs_rs.sh腳本
- keepalived有一個比較好的功能,可以在一臺rs宕機時,不再把請求轉發過去
- 測試
1、因為之前做了NAT模式的現在需要做DR模式,需要將之前的rs1,rs2上面的網關更改回來
- rs1 192.168.5.2
- rs2 192.168.5.2
2、dir上編寫腳本 vim /usr/local/sbin/lvs_dr.sh //內容如下
(dir)分發器上的配置
[root@xuexi-001 ~]# vi /usr/local/sbin/lvs_dr.sh #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/usr/sbin/ipvsadm vip=192.168.5.200 rs1=192.168.5.133 rs2=192.168.5.134 ifdown ens33 ifup ens33 #注意這里的網卡名字 ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev ens33:2 $ipv -C $ipv -A -t $vip:80 -s wrr $ipv -a -t $vip:80 -r $rs1:80 -g -w 1 $ipv -a -t $vip:80 -r $rs2:80 -g -w 1 [root@xuexi-001 ~]# sh /usr/local/sbin/lvs_dr.sh 成功斷開設備 'ens33'。 連接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/3)rs1
[root@xuexi-002 ~]# vi /usr/local/sbin/lvs_rs.sh#/bin/bash vip=192.168.5.200 #把vip綁定在lo上,是為了實現rs直接把結果返回給客戶端 ifdown lo ifup lo ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #以下操作為更改arp內核參數,目的是為了讓rs順利發送mac地址給客戶端 #參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announcers2
[root@xuexi-003 ~]# vi /usr/local/sbin/lvs_rs.sh#/bin/bash vip=192.168.5.200 #把vip綁定在lo上,是為了實現rs直接把結果返回給客戶端 ifdown lo ifup lo ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #以下操作為更改arp內核參數,目的是為了讓rs順利發送mac地址給客戶端 #參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announceKeepalived+LVS DR
- 完整架構需要兩臺服務器(角色為dir)分別安裝keepalived軟件,目的是實現高可用,但keepalived本身也有負載均衡的功能,所以本次實驗可以只安裝一臺keepalived
- 為什么需要把keepalived 加到lvs 中的目的是什么?
- 原因一:lvs,它有個關鍵角色,就是dir分發器,如果分發器宕掉,那所有的訪問就會被終止,因為所有的入口全都在dir分發器上,所以需要把分發器做一個高可用,用keepalived實現高可用,并且keepalived還有負載均衡的作用。
- 原因二:在使用lvs的時候,如果沒有額外的操作,這時將一個rs機器關機(宕機)時,lvs照樣會分發數據到這臺宕機機器,這是就會出現訪問無效的情況,說明lvs并不聰明;這時使用keepalived,就可以保證集群中其中一臺rs宕機了,web還能正常提供,不會出現用戶訪問時無效鏈接的結果;一般這種架構,肯定是2臺keepalived;
- 因為keepalived內置了ipvsadm的功能,所以不再需要安裝ipvsadm的包,也不用再編寫和執行.sh腳本
準備工作
1.準備三臺機器,分別為
- dir(安裝keepalived)5.130
- rs1 5.133
- rs2 5.134
- vip 5.200
2.在dir分發器(A機器)上,清空ipvsadm規則,并查看ipvsadm規則,會發現已經清空
[root@xuexi-001 ~]# ipvsadm -C [root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn3.在分發器(即A機器)上編輯配置文件,在/etc/keepalived/keepalived.conf 配置,配置文件內容
- 因為之前做實驗里面編輯過配置文件,這時直接刪除,然后粘貼新的配置文件
- 修改配置文件中的網卡、vip ,還有rs機器上的IP
4.啟動keepalived服務,查看keepalived服務
[root@xuexi-001 ~]# systemctl start keepalived [root@xuexi-001 ~]# ps aux |grep keepalived root 1678 0.0 0.0 118652 1396 ? Ss 07:44 0:00 /usr/sbin/keepalived -D root 1679 0.0 0.1 127520 3332 ? S 07:44 0:00 /usr/sbin/keepalived -D root 1680 0.0 0.1 127388 2616 ? S 07:44 0:00 /usr/sbin/keepalived -D root 1685 0.0 0.0 112720 976 pts/0 S+ 07:44 0:00 grep --color=auto keepalived5.查看IP,會看到虛擬IP依然存在
[root@xuexi-001 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ffinet 192.168.5.130/24 brd 192.168.5.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.5.200/32 brd 192.168.5.200 scope global ens33:2 # 虛擬IP 依舊存在valid_lft forever preferred_lft foreverinet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0valid_lft forever preferred_lft foreverinet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ffinet 192.168.81.144/24 brd 192.168.81.255 scope global ens37valid_lft forever preferred_lft foreverinet6 fe80::44c4:9bed:dd1f:6c01/64 scope link valid_lft forever preferred_lft forever6.查看ipvsadm規則
[root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.5.200:80 wlc7.這時關閉keepalived服務,再來查看ip,會看到虛擬IP停掉了
[root@xuexi-001 ~]# systemctl stop keepalived [root@xuexi-001 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ffinet 192.168.5.130/24 brd 192.168.5.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0valid_lft forever preferred_lft foreverinet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ffinet 192.168.81.144/24 brd 192.168.81.255 scope global ens37valid_lft forever preferred_lft foreverinet6 fe80::44c4:9bed:dd1f:6c01/64 scope link valid_lft forever preferred_lft forever8.再來查看規則,會發現沒有啟動規則
[root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn9.這時啟動keepalived,再來查看規則
[root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.5.200:80 wlc-> 192.168.5.133:80 Route 100 2 0 -> 192.168.5.134:80 Route 100 1 110.注意事項:兩點
- 1.打開dir機器的端口轉發
- 2.在rs機器上創建的/usr/local/sbin/lvs_rs.sh腳本,依然要執行它
總結
- keepalived 有一個比較好的功能,可以在一臺rs宕機的時候,及時把他踢出 ipvsadm 集群,將不再發送數據包給,也就很好的避免的訪問無連接的情況發送
轉載于:https://my.oschina.net/u/3850965/blog/1861510
總結
以上是生活随笔為你收集整理的第18章 Linux集群架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python自动化测试框架有哪些?
- 下一篇: linux 其他常用命令