1.Keepalived 소개
keepalived는 원래 LVS 클러스터 시스템의 각 서비스 노드 상태를 관리하고 모니터링하기 위해 LVS 로드 밸런싱 소프트웨어용으로 설계되었습니다. 나중에 고가용성을 위한 vrrp 기능이 추가되었습니다. LVS 소프트웨어 관리 외에도 keepalived는 다른 서비스에 대한 고가용성 솔루션도 지원할 수 있습니다.
keepalived는 vrrp 프로토콜을 통해 고가용성 기능을 구현합니다. vrrp(가상 라우터 중복 프로토콜) 가상 라우터 중복 프로토콜. vrrp의 목적은 정적 라우팅의 단일 실패 지점 문제를 해결하는 것입니다. 이는 개별 노드가 다운될 때 전체 네트워크가 중단 없이 실행될 수 있도록 보장할 수 있습니다.
2. Keepalived 고가용성 장애 조치 원칙
Keepalived 고가용성 서비스 간의 장애 조치는 vrrp를 통해 구현됩니다. Keepalived 서비스가 작동 중이면 마스터 노드는 백업 노드에 하트비트 메시지를 지속적으로 전송(멀티캐스트)하여 백업 노드가 아직 살아 있음을 알립니다.
마스터 노드에 장애가 발생하면 백업 노드가 마스터 노드에서 하트비트를 계속 감지할 수 없는 경우 하트비트 메시지를 백업 노드로 보낼 수 없습니다. 마스터 노드의 IP 자원과 서비스를 인수하기 위해 자체 인수 프로그램을 호출합니다. 기본 노드가 복구되면 대기 노드는 기본 노드가 실패했을 때 차지했던 IP 리소스와 서비스를 해제하고 원래 대기 역할로 돌아갑니다
3. nginx
3.1.1.1을 설치합니다. 80.22)
3.1.1. 컴파일 도구 및 라이브러리 파일 설치
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
3.1.2. pcre
#进入目录 cd /usr/local/develop/anginx #上传安装文件并解压 tar -zxvf pcre-8.38.tar.gz #进入安装目录 cd pcre-8.38 #检查配置 ./configure #编译、安装 make && make install #查看pcre版本 pcre-config --version
3.1.3 설치. nginx
#进入目录 cd /usr/local/develop/anginx #上传安装文件,并解压 tar -zxvf nginx-1.8.1.tar.gz #进入安装目录 cd nginx-1.8.1 #检查配置 ./configure --prefix=/usr/local/develop/anginx/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/develop/anginx/pcre-8.38 #编译安装 make && make install #查看nginx版本 /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v -------------------------------------------------------- [root@hadoop02 webserver]# /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v nginx version: nginx/1.8.1 #配置nginx(检查) /usr/local/develop/anginx/webserver/nginx/sbin/nginx -t #nginx管理命令 /usr/local/develop/anginx/webserver/nginx/sbin/nginx # 启动 nginx /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop # 停止 nginx /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reopen # 重启 nginx
3.1.4.nginx 기본 구성
vi nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; #添加tomcat列表,真实应用服务器都放在这 upstream tomcat_pool{ #server tomcat地址:端口号 weight表示权值,权值越大,被分配的几率越大; server 192.168.80.22:8080 weight=4 max_fails=2 fail_timeout=30s; server 192.168.80.22:8081 weight=4 max_fails=2 fail_timeout=30s; } server { listen 80; server_name tomcat_pool; #charset koi8-r; #access_log logs/host.access.log main; location / { #root html; #index index.html index.htm; proxy_pass http://tomcat_pool; #转向tomcat处理 proxy_set_header host $host; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
3.2. node (192.168.80.21)
참고: 설치 방법은 nginx 마스터 노드와 동일합니다.
4. keepalived를 설치하세요
4.1. 마스터 노드(192.168.80.22)
#安装keepalived yum install keepalived -y #启动keepalived服务 /etc/init.d/keepalived start ------------------------------------------- [root@hadoop02 anginx]# /etc/init.d/keepalived start 正在启动 keepalived: [确定] [root@hadoop02 anginx]# ps -ef |grep keepalived root 15723 1 0 00:59 ? 00:00:00 /usr/sbin/keepalived -d root 15724 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -d root 15725 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -d root 15731 15622 0 00:59 pts/1 00:00:00 grep keepalived [root@hadoop02 anginx]# #设置开机自启动 echo "/etc/init.d/keepalived start" >>/etc/rc.local #关闭keepalived服务 /etc/init.d/keepalived stop #编辑keepalived配置文件 vi /etc/keepalived/keepalived.conf ----------------------------------------------------------- ! configuration file for keepalived global_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 lb01 } vrrp_instance vi_1 { state master interface eth1 virtual_router_id 55 priority 150 advert_int 1 authentication { auth_type pass auth_pass server123 } virtual_ipaddress { 192.168.80.100 dev eth1 label eth1:1 } } ...........................................................
구성 지침 정보:
[router_id]는 LAN에서 고유해야 합니다
【vrrp_instance vi_1】{...} 이것은 keepalived
[state]의 활성 및 백업 상태, 인터페이스, 우선 순위, 인증 및 IP 정보를 정의하는 vrrp 인스턴스입니다. vrrp
[인터페이스]는 여기에서 내 서버가 사용하는 네트워크 카드를 모두 정의합니다. eth1
[virtual_router_id]는 일련의 연결 유지 구성에서 기본 및 백업 설정이 일관됩니다
[priority]는 우선순위, 숫자가 클수록 우선순위가 높습니다.
[auth_type]은 인증 방법
[auth_pass]는 인증용 비밀번호
[virtual_ipaddress] {...}가상 IP 주소 정의, 여러 IP 주소를 구성할 수 있습니다. 여기서는 eth1의 네트워크 인터페이스, 가상 인터페이스 eth1:1
4.2에 바인딩된 192.168.80.100으로 정의합니다. node (192.168.80.21)
#安装keepalived yum install keepalived -y #启动keepalived服务 /etc/init.d/keepalived start ------------------------------------------- [root@hadoop02 anginx]# /etc/init.d/keepalived start 正在启动 keepalived: [确定] [root@hadoop02 anginx]# ps -ef |grep keepalived root 15723 1 0 00:59 ? 00:00:00 /usr/sbin/keepalived -d root 15724 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -d root 15725 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -d root 15731 15622 0 00:59 pts/1 00:00:00 grep keepalived [root@hadoop02 anginx]# #设置开机自启动 echo "/etc/init.d/keepalived start" >>/etc/rc.local #关闭keepalived服务 /etc/init.d/keepalived stop #编辑keepalived配置文件 vi /etc/keepalived/keepalived.conf ----------------------------------------------------------------- ! configuration file for keepalived global_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 lb02 } vrrp_instance vi_1 { state backup interface eth1 virtual_router_id 55 priority 100 advert_int 1 authentication { auth_type pass auth_pass server123 } virtual_ipaddress { 192.168.80.100 dev eth1 label eth1:1 } } .............................................................
5. Test
5.1. 활성 노드와 백업 노드의 연결 유지 서비스를 시작합니다
#在节点一执行(192.168.80.22) /etc/init.d/keepalived start ------------------------------------- [root@hadoop02 anginx]# ps -ef |grep keepalived root 15788 1 0 01:09 ? 00:00:00 /usr/sbin/keepalived -d root 15790 15788 0 01:09 ? 00:00:00 /usr/sbin/keepalived -d root 15791 15788 0 01:09 ? 00:00:00 /usr/sbin/keepalived -d root 15807 15622 0 01:33 pts/1 00:00:00 grep keepalived [root@hadoop02 anginx]# #在节点二执行(192.168.80.21) /etc/init.d/keepalived start --------------------------------------- [root@hadoop01 ~]# ps -ef |grep keepalived root 11542 1 0 01:30 ? 00:00:00 /usr/sbin/keepalived -d root 11544 11542 0 01:30 ? 00:00:00 /usr/sbin/keepalived -d root 11545 11542 0 01:30 ? 00:00:00 /usr/sbin/keepalived -d root 11550 11512 0 01:33 pts/1 00:00:00 grep keepalived [root@hadoop01 ~]#
5.2. 가상 IP
http:// 192.168.80.100/session-redis-demo/
5.3. 마스터 노드 연결 유지 서비스를 중지합니다
#在节点一执行(192.168.80.22) /etc/init.d/keepalived stop #观察备节点变化 ip addr ------------------------------------------- [root@hadoop01 ~]# ip addr 1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state unknown link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth1: <broadcast,multicast,up,lower_up> mtu 1500 qdisc pfifo_fast state up qlen 1000 link/ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff inet 192.168.80.21/24 brd 192.168.80.255 scope global eth1 inet 192.168.80.100/32 scope global eth1:1 inet6 fe80::250:56ff:fe38:e546/64 scope link valid_lft forever preferred_lft forever [root@hadoop01 ~]#
5.4 가상 IP를 통해 계속 서비스에 액세스합니다
http://192.168.80.100/session- redis-demo/
6.keepalived+nginx 통합
지침: nginx 서비스가 실패할 경우 현재 노드의 연결 유지 서비스를 중지하는 nginx 데몬 스크립트를 작성하세요. 백업 노드로 자동 전환합니다.
6.1. nginx 데몬 스크립트 작성
vi nginx_check.sh -------------------------------------- #!/bin/bash while true do if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ] then /etc/init.d/keepalived stop fi sleep 2 done #给脚本授权 chmod u+x nginx_check.sh #执行脚本 nohup /usr/local/develop/anginx/shell/nginx_check.sh &
6.2. 마스터 노드 nginx 서비스를 중지합니다
#停止主节点nginx服务 /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop #查找进程 [root@hadoop02 ~]# ps -ef |grep nginx root 15915 1 0 01:51 ? 00:00:00 /bin/bash /usr/local/develop/anginx/shell/nginx_check.sh root 16516 15753 0 01:54 pts/5 00:00:00 grep nginx [root@hadoop02 ~]# #观察备用节点变化【服务正常】 ip addr -------------------------------------- [root@hadoop01 shell]# ip addr 1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state unknown link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth1: <broadcast,multicast,up,lower_up> mtu 1500 qdisc pfifo_fast state up qlen 1000 link/ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff inet 192.168.80.21/24 brd 192.168.80.255 scope global eth1 inet 192.168.80.100/32 scope global eth1:1 inet6 fe80::250:56ff:fe38:e546/64 scope link valid_lft forever preferred_lft forever [root@hadoop01 shell]# #再次重新启动主节点nginx和keepalived服务 /usr/local/develop/anginx/webserver/nginx/sbin/nginx /etc/init.d/keepalived start.
위 내용은 Keepalived+nginx 고가용성을 달성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!