经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Nginx » 查看文章
生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)
来源:cnblogs  作者:Linux运维技术栈  时间:2024/7/1 11:29:00  对本文有异议

前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式 和 非抢占模式。这里我会一一展开说具体怎么配置
一、双节点均部署Nginx:

第一步:上传安装包到/usr/local/

第二步:安装编译依赖(使用普通用户需要家sudo)

  1. yum install gcc gcc-c++
  2. yum install zlib zlib-devel
  3. yum install pcre pcre-devel
  4. yum install openssl libssl-dev

第三步:解压,编译安装:

  1. 解压命令: sudo tar -zxvf nginx-1.24.0.tar.gz
  2. 进入nginx路径:cd nginx-1.24.0
  3. 编译安装:
  4. 命令:
  5. sudo ./configure --prefix=/etc/nginx --sbin-path=/usr/bin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_ssl_module
  6. # --with-http_ssl_module这个参数为了启用 SSL 支持。
  7. 命令:sudo make install

第四步:启动nginx
命令:sudo nginx

第五步:停止nginx
命令:sudo nginx -s stop

第六步:配置nginx开机启动

  1. sudo vim /etc/rc.d/rc.local
  2. 添加执行语句/usr/bin/nginx
  3. 退出保存
  4. 开机启动文件授权
  5. sudo chmod +x /etc/rc.d/rc.local

第六步:重载nginx
nginx -s reload
Nginx安全加固配置:在nginx.conf配置文件里加上TLSv1.2 TLSv1.3; 和隐藏版本号的部分。

  1. # 在server { }块里配置启用TLSv1.2和TLSv1.3的参数
  2. ssl_protocols TLSv1.2 TLSv1.3;
  3. # 在http { }块里配置隐藏Nginx服务器版本信息的参数
  4. server_tokens off;

二、双节点部署keepalived主备模式

第一步:上传安装包到/mpjava/

第二步:安装gcc等编译需要的软件库。(要求网络能连接外网进行更新,如果已安装,可跳过此步骤)

  1. 命令:yum -y install libnl libnl-devel
  2. 命令:yum -y install gcc gcc-c++
  3. 命令:yum -y install openssl
  4. 命令:yum -y install openssl-devel
  5. 命令:yum -y install libnl3-devel

第三步:解压,并编译安装

  1. 命令:tar -zxf keepalived-2.2.4.tar.gz
  2. 命令:cd keepalived-2.2.4
  3. 命令:./configure --prefix=/usr/local/keepalived
  4. 命令:make && make install

第四步:复制配置文件

  1. 命令:mkdir -p /etc/keepalived
  2. 命令:cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ #主配置文件
  3. 命令:cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  4. 命令:ln -s /usr/local/keepalived/sbin/keepalived /sbin/

第五步:设置开机启动
命令:chkconfig keepalived on

第六步:启动keepalived

  1. 命令:systemctl start keepalived
  2. 命令:ps -ef | grep keepalived

问题:发现未能正常启动

  1. 查看日志命令:
  2. systemctl status keepalived.service -l:查看 keepalived 服务的状态及相关日志信息
  3. journalctl -u keepalived.service -f:实时查看 keepalived 服务的日志输出
  4. tail -22f /var/log/messages | grep Keepalived:通过查看系统日志/var/log/messages中与 Keepalived 相关的内容来获取日志信息

原因:通过查询系统日志发现keepalived配置文件默认网卡名和当前服务器网卡名不一致。
解决:需要修改/etc/keepalived/keepalived.conf的网卡名,与服务器同步即可。
重启keepalived:systemctl start keepalived

第七步:新建nginx检测脚本nginxcheck.sh,并存放在指定目录,本例使用:/mpjava/nginxcheck.sh

  1. 命令:vim /mpjava/nginxcheck.sh
  2. 添加以下内容:
  3. #/bin/sh
  4. nginxPidNum=`ps -C nginx --no-header |wc -l`
  5. if [[ $nginxPidNum -eq 0 ]];
  6. then
  7. killall keepalived
  8. fi
  9. 注:需要设置nginxcheck.sh有执行权限,chmod 777 /mpjava/nginxcheck.sh

第八步:按下例分别修改主、备服务器/etc/keepalived/keepalived.conf
声明:这里的ip为虚假ip,只是举例说明
主节点:

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. acassen@firewall.loc
  5. failover@firewall.loc
  6. sysadmin@firewall.loc
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc
  9. smtp_server 10.0.0.1 #配置当前网关
  10. smtp_connect_timeout 30
  11. router_id LVS_DEVEL
  12. vrrp_skip_check_adv_addr
  13. vrrp_strict
  14. vrrp_garp_interval 0
  15. vrrp_gna_interval 0
  16. }
  17. vrrp_script chk_nginx {
  18. script "/mpjava/nginxcheck.sh" #脚本位置
  19. interval 2 #检测时间间隔
  20. weight 2 #权重2
  21. }
  22. vrrp_instance VI_1 {
  23. state BACKUP #主节点如果写BACKUP,和配置下面的nopreempt参数就为 非抢占模式;如果写MASTER,删除nopreempt参数,则为 抢占模式
  24. nopreempt #非抢占模式参数
  25. interface enp4s3
  26. virtual_router_id 69 #不能使用同网段已使用的ip地址;同一个VRRP实例中每个节点的虚拟路由ID必须相同
  27. priority 100 #不管是否开启抢占模式,主节点的优先级必须高于 从节点
  28. advert_int 1
  29. authentication {
  30. auth_type PASS
  31. auth_pass 1111
  32. }
  33. track_script { #以脚本为监控chk_http_port是前面填写的
  34. chk_nginx
  35. }
  36. virtual_ipaddress {
  37. 10.0.0.10 #vip
  38. }
  39. }

从节点:

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. acassen@firewall.loc
  5. failover@firewall.loc
  6. sysadmin@firewall.loc
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc
  9. smtp_server 10.0.0.1 #配置当前网关
  10. smtp_connect_timeout 30
  11. router_id LVS_DEVEL
  12. vrrp_skip_check_adv_addr
  13. vrrp_strict
  14. vrrp_garp_interval 0
  15. vrrp_gna_interval 0
  16. }
  17. vrrp_script chk_nginx {
  18. script "/mpjava/nginxcheck.sh" #脚本位置
  19. interval 2 #检测时间间隔
  20. weight 2 #权重2
  21. }
  22. vrrp_instance VI_1 {
  23. state BACKUP #不管是抢占模式否,从节点设置为backup
  24. nopreempt #非抢占模式参数,如果不开启该模式,需要删除
  25. interface eth0
  26. virtual_router_id 69 #不能使用同网段已使用的ip地址;同一个VRRP实例中每个节点的虚拟路由ID必须相同
  27. priority 99
  28. advert_int 1
  29. authentication {
  30. auth_type PASS
  31. auth_pass 1111
  32. }
  33. track_script { #以脚本为监控chk_http_port是前面填写的
  34. chk_nginx
  35. }
  36. virtual_ipaddress {
  37. 10.0.0.10 #VIP
  38. }
  39. }`

第九步:验证
由于涉及公司内网ip,验证结果不方便展示,我这里口述方法:

  1. 抢占模式:启动两个节点的nginxkeepalived,当主节点的keepalived关了后,VIP会漂移到从节点上,当主节点启动后,此时VIP会漂移回主节点;
  2. 非抢占模式:启动两个节点的nginxkeepalived,当主节点的keepalived关了后,VIP会漂移到从节点上,此时再将主节点启动后,VIP不会漂移回主节点;
  3. (以上验证方法用命令ip a实时查看网卡的VIP地址的漂移节奏)

高可用集群中的不抢占功能。在一个HA集群中,如果主节点死机了,备用节点会进行接管,主节点再次正常启动后一般会自动接管服务。对于实时性和稳定性要求不高的业务系统来说,这种来回切换的操作还是可以接受的。而对于稳定性和实时性要求很高的业务系统来说,不建议来回切换,毕竟服务的切换存在一定的风险和不稳定性

三、Keepalived主主模式

第一步:按下例分别修改主、主服务器/etc/keepalived/keepalived.conf
声明:这里的ip为虚假ip,只是举例说明
主节点1:

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. acassen@firewall.loc
  5. failover@firewall.loc
  6. sysadmin@firewall.loc
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc
  9. smtp_server 10.0.0.1 #配置当前网关
  10. smtp_connect_timeout 30
  11. router_id LVS_DEVEL
  12. vrrp_skip_check_adv_addr
  13. vrrp_strict
  14. vrrp_garp_interval 0
  15. vrrp_gna_interval 0
  16. }
  17. vrrp_script chk_nginx {
  18. script "/mpjava/nginxcheck.sh" #脚本位置
  19. interval 2 #检测时间间隔
  20. weight 2 #权重2
  21. }
  22. vrrp_instance VI_1 {
  23. state MASTER #主节点为MASTER
  24. interface enp4s3
  25. virtual_router_id 69 #不能使用同网段已使用的ip地址;同一个VRRP实例中每个节点的虚拟路由ID必须相同
  26. priority 100 #MASTER节点必须高于BACKUP节点
  27. advert_int 1
  28. authentication {
  29. auth_type PASS
  30. auth_pass 1111
  31. }
  32. track_script { #以脚本为监控chk_http_port是前面填写的
  33. chk_nginx
  34. }
  35. virtual_ipaddress {
  36. 10.0.0.8 #vip1
  37. }
  38. }
  39. vrrp_instance VI_2 {
  40. state BACKUP #该节点设置为backup
  41. interface eth0
  42. virtual_router_id 70 # 同一个VRRP实例中每个节点的虚拟路由ID必须相同
  43. priority 90 # MASTER节点必须高于BACKUP节点
  44. advert_int 1
  45. authentication {
  46. auth_type PASS
  47. auth_pass 1111
  48. }
  49. virtual_ipaddress {
  50. 10.0.0.9 #vip2
  51. }
  52. }

主节点2:

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. acassen@firewall.loc
  5. failover@firewall.loc
  6. sysadmin@firewall.loc
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc
  9. smtp_server 10.0.0.1 #配置当前网关
  10. smtp_connect_timeout 30
  11. router_id LVS_DEVEL
  12. vrrp_skip_check_adv_addr
  13. vrrp_strict
  14. vrrp_garp_interval 0
  15. vrrp_gna_interval 0
  16. }
  17. vrrp_script chk_nginx {
  18. script "/mpjava/nginxcheck.sh" #脚本位置
  19. interval 2 #检测时间间隔
  20. weight 2 #权重2
  21. }
  22. vrrp_instance VI_1 {
  23. state BACKUP #不管是抢占模式否,从节点设置为backup
  24. nopreempt #非抢占模式参数,如果不开启该模式,需要删除
  25. interface eth0
  26. virtual_router_id 69 #不能使用同网段已使用的ip地址;同一个VRRP实例中每个节点的虚拟路由ID必须相同
  27. priority 99 #MASTER节点必须高于BACKUP节点
  28. advert_int 1
  29. authentication {
  30. auth_type PASS
  31. auth_pass 1111
  32. }
  33. track_script { #以脚本为监控chk_http_port是前面填写的
  34. chk_nginx
  35. }
  36. virtual_ipaddress {
  37. 10.0.0.8 #vip1
  38. }
  39. }`
  40. vrrp_instance VI_2 {
  41. state MASTER #该节点设置为MASTER
  42. interface eth0
  43. virtual_router_id 70 #同一个VRRP实例中每个节点的虚拟路由ID必须相同
  44. priority 100 #MASTER节点的优先级必须高于BACKUP节点
  45. advert_int 1
  46. authentication {
  47. auth_type PASS
  48. auth_pass 1111
  49. }
  50. virtual_ipaddress {
  51. 10.0.0.9 #vip2
  52. }
  53. }

第二步:验证
由于涉及公司内网ip,验证结果不方便展示,我这里口述方法:

  1. 启动两个主节点的nginxkeepalived,将nginx中配置的域名解析到这两个VIP地址上,浏览器访问正常。此时关闭其中一个主节点的keepalivedVIP会漂移到另外一台主节点服务器上。
  2. (以上验证方法用命令ip a实时查看网卡的VIP地址的漂移节奏)

在keepalived的主备模式中,当主节点正常的时候,备节点永远处于闲置状态,不会接受web请求,这样就会浪费一半的资源。根据自身业务和资源等综合来选择模式。

原文链接:https://www.cnblogs.com/zhoutuo/p/18276183

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号