• 售前

  • 售后

热门帖子
入门百科

keepalived+nginx高可用实现方法示例

[复制链接]
科林回拔 显示全部楼层 发表于 2021-10-26 12:42:28 |阅读模式 打印 上一主题 下一主题
1.keepalived先容
keepalived最初是专为LVS负载平衡软件筹划的,用来管理并监控LVS集群系统中各个服务节点的状态,厥后又加入了实现高可用的VRRP功能。keepalived除了能够管理LVS软件外,还能支持其他服务的高可用办理方案。
keepalived通过VRRP协议实现高可勤奋能的。VRRP(Virtual Router Redundancy Protocol)假造路由冗余协议。VRRP出现的目的就是为相识决静态路由单点故障标题,它能包管当个别节点宕机时,整个网络可以不间断地运行。
2.keepalived高可用故障转移原理
keepalived高可用服务之间的故障转移,是通过VRRP来实现的。在keepalived服务工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备Backup节点自己还活着。
  当主节点发生故障时,无法给备节点发送心跳消息,如果备节点无法继续检测到来自主节点的心跳。就会调用自身的接受步伐,接受主节点的IP资源和服务。当主节点规复时,备节点又会释放主节点故障时自身接受的IP资源和服务,规复到原来的备用脚色
3.安装nginx
3.1.主节点(192.168.80.22)
3.1.1.安装编译工具和库文件
  1. yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
复制代码
3.1.2.安装pcre
  1. #进入目录
  2. cd /usr/local/develop/anginx
  3. #上传安装文件并解压
  4. tar -zxvf pcre-8.38.tar.gz
  5. #进入安装目录
  6. cd pcre-8.38
  7. #检查配置
  8. ./configure
  9. #编译、安装
  10. make && make install
  11. #查看pcre版本
  12. pcre-config --version
复制代码
3.1.3.安装nginx
  1. #进入目录
  2. cd /usr/local/develop/anginx
  3. #上传安装文件,并解压
  4. tar -zxvf nginx-1.8.1.tar.gz
  5. #进入安装目录
  6. cd nginx-1.8.1
  7. #检查配置
  8. ./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
  9. #编译安装
  10. make && make install
  11. #查看nginx版本
  12. /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v
  13. --------------------------------------------------------
  14. [root@hadoop02 webserver]# /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v
  15. nginx version: nginx/1.8.1
  16. #配置nginx(检查)
  17. /usr/local/develop/anginx/webserver/nginx/sbin/nginx -t
  18. #nginx管理命令
  19. /usr/local/develop/anginx/webserver/nginx/sbin/nginx       # 启动 Nginx
  20. /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop       # 停止 Nginx
  21. /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reload      # 重新载入配置文件
  22. /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reopen      # 重启 Nginx
复制代码
3.1.4.nginx底子设置
  1. vi nginx.conf
  2. #user nobody;
  3. worker_processes 1;
  4. #error_log logs/error.log;
  5. #error_log logs/error.log notice;
  6. #error_log logs/error.log info;
  7. pid    logs/nginx.pid;
  8. events {
  9.   worker_connections 1024;
  10. }
  11. http {
  12.   include    mime.types;
  13.   default_type application/octet-stream;
  14.   log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  15.            '$status $body_bytes_sent "$http_referer" '
  16.            '"$http_user_agent" "$http_x_forwarded_for"';
  17.   access_log logs/access.log main;
  18.   sendfile    on;
  19.   #tcp_nopush   on;
  20.   #keepalive_timeout 0;
  21.   keepalive_timeout 65;
  22.   #gzip on;
  23.   
  24.   #添加tomcat列表,真实应用服务器都放在这
  25.   upstream tomcat_pool{
  26.     #server tomcat地址:端口号 weight表示权值,权值越大,被分配的几率越大;
  27.     server 192.168.80.22:8080 weight=4 max_fails=2 fail_timeout=30s;
  28.     server 192.168.80.22:8081 weight=4 max_fails=2 fail_timeout=30s;
  29.    
  30.   }
  31.   server {
  32.     listen    80;
  33.     server_name tomcat_pool;
  34.     #charset koi8-r;
  35.     #access_log logs/host.access.log main;
  36.     location / {
  37.       #root  html;
  38.       #index index.html index.htm;
  39.       proxy_pass http://tomcat_pool;  #转向tomcat处理
  40.       proxy_set_header  Host       $host;
  41.       proxy_set_header  X-Real-IP    $remote_addr;
  42.       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  43.     }
  44.     #error_page 404       /404.html;
  45.     # redirect server error pages to the static page /50x.html
  46.     #
  47.     error_page  500 502 503 504 /50x.html;
  48.     location = /50x.html {
  49.       root  html;
  50.     }
  51. }
复制代码
3.2.备节点(192.168.80.21)
阐明:安装方式同nginx主节点。
4.安装keepalived
4.1.主节点(192.168.80.22)
  1. #安装keepalived
  2. yum install keepalived -y
  3. #启动keepalived服务
  4. /etc/init.d/keepalived start
  5. -------------------------------------------
  6. [root@hadoop02 anginx]# /etc/init.d/keepalived start
  7. 正在启动 keepalived:                   [确定]
  8. [root@hadoop02 anginx]# ps -ef |grep keepalived
  9. root   15723   1 0 00:59 ?    00:00:00 /usr/sbin/keepalived -D
  10. root   15724 15723 0 00:59 ?    00:00:00 /usr/sbin/keepalived -D
  11. root   15725 15723 0 00:59 ?    00:00:00 /usr/sbin/keepalived -D
  12. root   15731 15622 0 00:59 pts/1  00:00:00 grep keepalived
  13. [root@hadoop02 anginx]#
  14. #设置开机自启动
  15. echo "/etc/init.d/keepalived start" >>/etc/rc.local
  16. #关闭keepalived服务
  17. /etc/init.d/keepalived stop
  18. #编辑keepalived配置文件
  19. vi /etc/keepalived/keepalived.conf
  20. -----------------------------------------------------------
  21. ! Configuration File for keepalived
  22. global_defs {
  23.   notification_email {
  24.    acassen@firewall.loc
  25.    failover@firewall.loc
  26.    sysadmin@firewall.loc
  27.   }
  28.   notification_email_from Alexandre.Cassen@firewall.loc
  29.   smtp_server 192.168.200.1
  30.   smtp_connect_timeout 30
  31.   router_id lb01
  32. }
  33. vrrp_instance VI_1 {
  34.   state MASTER
  35.   interface eth1
  36.   virtual_router_id 55
  37.   priority 150
  38.   advert_int 1
  39.   authentication {
  40.     auth_type PASS
  41.     auth_pass server123
  42.   }
  43.   virtual_ipaddress {
  44.     192.168.80.100 dev eth1 label eth1:1
  45.   }
  46. }
  47. ...........................................................
复制代码
关于设置阐明:
      
  • 【router_id】 是路由标识,在一个局域网里面应该是唯一的
         
    • 【vrrp_instance VI_1】{...}这是一个VRRP实例,里面定义了keepalived的主备状态、接口、优先级、认证和IP信息   
    • 【state】 定义了VRRP的脚色   
    • 【interface】定义使用的接口,这里我的服务器用的网卡都是eth1   
    • 【virtual_router_id】是假造路由ID标识,一组的keepalived设置中主备都是设置一致   
    • 【priority】是优先级,数字越大,优先级越大,   
    • 【auth_type】是认证方式   
    • 【auth_pass】是认证的暗码  
       
  • 【virtual_ipaddress】 {...}定义假造IP所在,可以设置多个IP所在,这里我定义为192.168.80.100,绑定了eth1的网络接口,假造接口eth1:1
4.2.备节点(192.168.80.21)
  1. #安装keepalived
  2. yum install keepalived -y
  3. #启动keepalived服务
  4. /etc/init.d/keepalived start
  5. -------------------------------------------
  6. [root@hadoop02 anginx]# /etc/init.d/keepalived start
  7. 正在启动 keepalived:                   [确定]
  8. [root@hadoop02 anginx]# ps -ef |grep keepalived
  9. root   15723   1 0 00:59 ?    00:00:00 /usr/sbin/keepalived -D
  10. root   15724 15723 0 00:59 ?    00:00:00 /usr/sbin/keepalived -D
  11. root   15725 15723 0 00:59 ?    00:00:00 /usr/sbin/keepalived -D
  12. root   15731 15622 0 00:59 pts/1  00:00:00 grep keepalived
  13. [root@hadoop02 anginx]#
  14. #设置开机自启动
  15. echo "/etc/init.d/keepalived start" >>/etc/rc.local
  16. #关闭keepalived服务
  17. /etc/init.d/keepalived stop
  18. #编辑keepalived配置文件
  19. vi /etc/keepalived/keepalived.conf
  20. -----------------------------------------------------------------
  21. ! Configuration File for keepalived
  22. global_defs {
  23.   notification_email {
  24.    acassen@firewall.loc
  25.    failover@firewall.loc
  26.    sysadmin@firewall.loc
  27.   }
  28.   notification_email_from Alexandre.Cassen@firewall.loc
  29.   smtp_server 192.168.200.1
  30.   smtp_connect_timeout 30
  31.   router_id lb02
  32. }
  33. vrrp_instance VI_1 {
  34.   state BACKUP
  35.   interface eth1
  36.   virtual_router_id 55
  37.   priority 100
  38.   advert_int 1
  39.   authentication {
  40.     auth_type PASS
  41.     auth_pass server123
  42.   }
  43.   virtual_ipaddress {
  44.     192.168.80.100 dev eth1 label eth1:1
  45.   }
  46. }
  47. .............................................................
复制代码
5.测试
5.1.启动主备节点的keepalived服务
  1. #在节点一执行(192.168.80.22)
  2. /etc/init.d/keepalived start
  3. -------------------------------------
  4. [root@hadoop02 anginx]# ps -ef |grep keepalived
  5. root   15788   1 0 01:09 ?    00:00:00 /usr/sbin/keepalived -D
  6. root   15790 15788 0 01:09 ?    00:00:00 /usr/sbin/keepalived -D
  7. root   15791 15788 0 01:09 ?    00:00:00 /usr/sbin/keepalived -D
  8. root   15807 15622 0 01:33 pts/1  00:00:00 grep keepalived
  9. [root@hadoop02 anginx]#
  10. #在节点二执行(192.168.80.21)
  11. /etc/init.d/keepalived start
  12. ---------------------------------------
  13. [root@hadoop01 ~]# ps -ef |grep keepalived
  14. root   11542   1 0 01:30 ?    00:00:00 /usr/sbin/keepalived -D
  15. root   11544 11542 0 01:30 ?    00:00:00 /usr/sbin/keepalived -D
  16. root   11545 11542 0 01:30 ?    00:00:00 /usr/sbin/keepalived -D
  17. root   11550 11512 0 01:33 pts/1  00:00:00 grep keepalived
  18. [root@hadoop01 ~]#
复制代码
5.2.通过虚ip访问服务
http://192.168.80.100/session-redis-demo/

5.3.克制主节点keepalived服务
  1. #在节点一执行(192.168.80.22)
  2. /etc/init.d/keepalived stop
  3. #观察备节点变化
  4. ip addr
  5. -------------------------------------------
  6. [root@hadoop01 ~]# ip addr
  7. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
  8.   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  9.   inet 127.0.0.1/8 scope host lo
  10.   inet6 ::1/128 scope host
  11.     valid_lft forever preferred_lft forever
  12. 2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  13.   link/ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff
  14.   inet 192.168.80.21/24 brd 192.168.80.255 scope global eth1
  15.   inet 192.168.80.100/32 scope global eth1:1
  16.   inet6 fe80::250:56ff:fe38:e546/64 scope link
  17.     valid_lft forever preferred_lft forever
  18. [root@hadoop01 ~]#
复制代码
5.4.继续通过虚ip访问服务
http://192.168.80.100/session-redis-demo/

6.keepalived+nginx整合
阐明:编写nginx守护脚本,如果nginx服务出现故障,则克制当前节点的keepalived服务。主动切换到备用节点。
6.1.编写nginx守护脚本
  1. vi nginx_check.sh
  2. --------------------------------------
  3. #!/bin/bash
  4. while true
  5. do
  6. if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ]
  7. then
  8.   /etc/init.d/keepalived stop
  9. fi
  10. sleep 2
  11. done
  12. #给脚本授权
  13. chmod u+x nginx_check.sh
  14. #执行脚本
  15. nohup /usr/local/develop/anginx/shell/nginx_check.sh &
复制代码
6.2.克制主节点nginx服务
  1. #停止主节点nginx服务
  2. /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop
  3. #查找进程
  4. [root@hadoop02 ~]# ps -ef |grep nginx
  5. root   15915   1 0 01:51 ?    00:00:00 /bin/bash /usr/local/develop/anginx/shell/nginx_check.sh
  6. root   16516 15753 0 01:54 pts/5  00:00:00 grep nginx
  7. [root@hadoop02 ~]#
  8. #观察备用节点变化【服务正常】
  9. ip addr
  10. --------------------------------------
  11. [root@hadoop01 shell]# ip addr
  12. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
  13.   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  14.   inet 127.0.0.1/8 scope host lo
  15.   inet6 ::1/128 scope host
  16.     valid_lft forever preferred_lft forever
  17. 2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  18.   link/ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff
  19.   inet 192.168.80.21/24 brd 192.168.80.255 scope global eth1
  20.   inet 192.168.80.100/32 scope global eth1:1
  21.   inet6 fe80::250:56ff:fe38:e546/64 scope link
  22.     valid_lft forever preferred_lft forever
  23. [root@hadoop01 shell]#
  24. #再次重新启动主节点nginx和keepalived服务
  25. /usr/local/develop/anginx/webserver/nginx/sbin/nginx
  26. /etc/init.d/keepalived start
复制代码
以上就是本文的全部内容,盼望对各人的学习有所帮助,也盼望各人多多支持草根技术分享。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作