博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【2018.07.03学习笔记】【linux高级知识 18.1-18.5】
阅读量:7152 次
发布时间:2019-06-29

本文共 13747 字,大约阅读时间需要 45 分钟。

hot3.png

18.1 Linux集群介绍

linux集群功能可以分为:HA高可用、负载均衡。

高可用是:有两台机器,一台作为主用工作,一台作为冗余备份。当主用机器宕机后,冗余机器将接替,继续提供服务。

开源的高可用软件有:heartbeat、keepalived,现在基本上都使用keepalived。

负载均衡是:一台机器作为分发器,负责把用户的请求分发给后端真正的处理服务器,除了分发器之外,其他都是给用户提供服务的后端机器,后端机器至少有2台。

开源的负载均衡软件有:LVS、keepalived、haproxy、nginx等。

商业的负载均衡有:F5、Netscaler,优点是稳定,支持高并发,但是价格昂贵。

18.2 keepalived介绍

HA高可用我们重点学习keepalived。heartbeat由于在Centos6上会有一些问题,偶尔会切换不及时,已经比较少使用。

keepalived:是使用VRRP(虚拟路由冗余协议)实现的。

HA高可用:类似是多台功能相同的路由器组成的一个小组,小组中有一台master角色,N>=1个backup角色。

master会组播vrrp数据包给backup,当backup收不到master发送的数据包时,就认为master宕机了,使用backup来充当新的master(通过backup的优先级来判断哪个backup成功新的master)

keepalived包含有3个模块:1、core:核心模块,是主进程启动和维护,全局配置文件加载解析等作用。2、check:检查模块,负责健康检查。3、vrrp:实现vrrp协议的模块。

18.3/18.4/18.5 用keepalived配置高可用集群

准备两台机器:A和B。A为:master角色(128)、B为:backup角色(130)

1、为两台机器都安装上keepalived:实现高可用的工具

[root@nginx ~]# yum install -y keepalived已加载插件:fastestmirrorCould not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was12: Timeout on http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock: (28, 'Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds')base                                                                                                                            | 3.6 kB  00:00:00     epel/x86_64/metalink                                                                                                            | 7.9 kB  00:00:00     epel                                                                                                                            | 3.2 kB  00:00:00     extras                                                                                                                          | 3.4 kB  00:00:00     updates                                                                                                                         | 3.4 kB  00:00:00     (1/3): epel/x86_64/updateinfo                                                                                                   | 925 kB  00:00:01     (2/3): updates/7/x86_64/primary_db                                                                                              | 2.7 MB  00:00:10     (3/3): epel/x86_64/primary                                                                                                      | 3.5 MB  00:00:11     Determining fastest mirrors * base: mirror.lzu.edu.cn * epel: mirrors.ustc.edu.cn * extras: mirrors.cqu.edu.cn * updates: centos.ustc.edu.cnepel                                                                                                                                       12607/12607正在解决依赖关系--> 正在检查事务---> 软件包 keepalived.x86_64.0.1.3.5-6.el7 将被 安装--> 正在处理依赖关系 libnetsnmpmibs.so.31()(64bit),它被软件包 keepalived-1.3.5-6.el7.x86_64 需要--> 正在处理依赖关系 libnetsnmpagent.so.31()(64bit),它被软件包 keepalived-1.3.5-6.el7.x86_64 需要--> 正在处理依赖关系 libnetsnmp.so.31()(64bit),它被软件包 keepalived-1.3.5-6.el7.x86_64 需要--> 正在检查事务---> 软件包 net-snmp-agent-libs.x86_64.1.5.7.2-33.el7_5.2 将被 安装---> 软件包 net-snmp-libs.x86_64.1.5.7.2-33.el7_5.2 将被 安装--> 解决依赖关系完成依赖关系解决======================================================================================================================================================= Package                                   架构                         版本                                       源                             大小=======================================================================================================================================================正在安装: keepalived                                x86_64                       1.3.5-6.el7                                base                          329 k为依赖而安装: net-snmp-agent-libs                       x86_64                       1:5.7.2-33.el7_5.2                         updates                       705 k net-snmp-libs                             x86_64                       1:5.7.2-33.el7_5.2                         updates                       749 k事务概要=======================================================================================================================================================安装  1 软件包 (+2 依赖软件包)总下载量:1.7 M安装大小:6.0 MDownloading packages:(1/3): keepalived-1.3.5-6.el7.x86_64.rpm                                                                                        | 329 kB  00:00:01     (2/3): net-snmp-agent-libs-5.7.2-33.el7_5.2.x86_64.rpm                                                                          | 705 kB  00:00:02     (3/3): net-snmp-libs-5.7.2-33.el7_5.2.x86_64.rpm                                                                                | 749 kB  00:00:02     -------------------------------------------------------------------------------------------------------------------------------------------------------总计                                                                                                                   659 kB/s | 1.7 MB  00:00:02     Running transaction checkRunning transaction testTransaction test succeededRunning transaction  正在安装    : 1:net-snmp-libs-5.7.2-33.el7_5.2.x86_64                                                                                            1/3   正在安装    : 1:net-snmp-agent-libs-5.7.2-33.el7_5.2.x86_64                                                                                      2/3   正在安装    : keepalived-1.3.5-6.el7.x86_64                                                                                                      3/3   验证中      : 1:net-snmp-agent-libs-5.7.2-33.el7_5.2.x86_64                                                                                      1/3   验证中      : keepalived-1.3.5-6.el7.x86_64                                                                                                      2/3   验证中      : 1:net-snmp-libs-5.7.2-33.el7_5.2.x86_64                                                                                            3/3 已安装:  keepalived.x86_64 0:1.3.5-6.el7                                                                                                                      作为依赖被安装:  net-snmp-agent-libs.x86_64 1:5.7.2-33.el7_5.2                                 net-snmp-libs.x86_64 1:5.7.2-33.el7_5.2                                完毕!

2、为两台机器都安装上nginx:高可用的服务对象,可以直接yum安装用做试验。

yum install -y nginx

3、master上修改keepalived的配置文件:

[root@nginx keepalived]# vim /etc/keepalived/keepalived.confglobal_defs {   notification_email {     scause@163.com   #定义接收告警的邮箱   }   notification_email_from scause@163.com    #定义发送邮件的地址   smtp_server 127.0.0.1           #定义发邮件地址,若为127.0.0.1则使用本机自带邮件服务器进行发送   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_script chk_nginx {   #自定义检查模块名字    script "/usr/local/sbin/check_ng.sh"        #自定义脚本,监控nginx服务的脚本    interval 3            #每3秒执行一次脚本}vrrp_instance VI_1 {    state MASTER       #角色是master    interface ens33      #指定发送vrrp的网卡,针对哪个网卡监控VIP    virtual_router_id 51    priority 100         #权重,master的要比backup的权重大    advert_int 1    authentication {        auth_type PASS        auth_pass 123456   #定义验证密码    }    virtual_ipaddress {        192.168.87.100    //指定虚拟ip    }    track_script {        chk_nginx     #指定上面定义的监控模块    }}[root@nginx keepalived]# ip addr    //vip虚拟ip用ip addr才能看到,ifconfig看不到1: lo: 
mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33:
mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:7c:0b:e2 brd ff:ff:ff:ff:ff:ff inet 192.168.87.128/24 brd 192.168.87.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.87.100/32 scope global ens33 //虚拟ip已经绑定在ens33网卡上了 valid_lft forever preferred_lft forever inet6 fe80::2350:6934:56c7:a6c0/64 scope link valid_lft forever preferred_lft forever

4、编写chk_nginx.sh监控脚本:修改权限

[root@nginx keepalived]# vim /usr/local/sbin/check_ng.sh#!/bin/bash#时间变量,用于记录日志d=`date --date today +%Y%m%d_%H:%M:%S`#计算nginx进程数量n=`ps -C nginx --no-heading|wc -l`#如果进程为0,则启动nginx,并且再次检测nginx进程数量,#如果还为0,说明nginx无法启动,此时需要关闭keepalivedif [ $n -eq "0" ]; then        /etc/init.d/nginx start        n2=`ps -C nginx --no-heading|wc -l`        if [ $n2 -eq "0"  ]; then                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log                systemctl stop keepalived   //停止keepalived服务,不发送vrrp包给backup了        fifi[root@nginx keepalived]# chmod 755 /usr/local/sbin/check_ng.sh

5、开启keepalived服务:开启监控的服务对象nginx

[root@nginx keepalived]# systemctl start keepalived[root@nginx keepalived]# ps aux|grep keepalived   //查看keepalived是否启动root       1388  0.0  0.0 118652  1396 ?        Ss   20:53   0:00 /usr/sbin/keepalived -Droot       1389  0.0  0.1 122852  2392 ?        S    20:53   0:00 /usr/sbin/keepalived -Droot       1390  0.0  0.1 122852  2448 ?        S    20:53   0:00 /usr/sbin/keepalived -Droot       1396  0.0  0.0 112720   972 pts/0    S+   20:53   0:00 grep --color=auto keepalived[root@nginx keepalived]# ps aux |grep nginx  //查看nginx是否启动root        863  0.0  0.0  46040  1276 ?        Ss   20:08   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confnobody      868  0.0  0.2  48528  3912 ?        S    20:08   0:00 nginx: worker processnobody      869  0.0  0.2  48528  3912 ?        S    20:08   0:00 nginx: worker processroot        896  0.0  0.0 115432  1712 ?        S    20:08   0:00 /bin/sh /usr/local/mysql//bin/mysqld_safe --datadir=/data/mysql/ --pid-file=/data/mysql//nginx.pidmysql      1119  0.3 24.5 1300896 458628 ?      Sl   20:08   0:09 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/nginx.err --pid-file=/data/mysql//nginx.pidroot       1418  0.0  0.0 112724   972 pts/0    S+   20:53   0:00 grep --color=auto nginx

6、关闭nginx,查看是否会自动重新启动nginx服务:因为keepalived会3秒执行检查脚本,如果nginx没进程就会自动启动。

[root@nginx keepalived]# /etc/init.d/nginx stopStopping nginx (via systemctl):                            [  确定  ][root@nginx keepalived]# ps aux |grep nginx  //3秒后再ps一下,nginx又被启动了,证明keepalived生效了。root        896  0.0  0.0 115432  1712 ?        S    20:08   0:00 /bin/sh /usr/local/mysql//bin/mysqld_safe --datadir=/data/mysql/ --pid-file=/data/mysql//nginx.pidmysql      1119  0.3 24.5 1300896 458628 ?      Sl   20:08   0:09 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/nginx.err --pid-file=/data/mysql//nginx.pidroot       1567  0.0  0.0  46040  1276 ?        Ss   20:54   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confnobody     1569  0.0  0.2  48528  3912 ?        S    20:54   0:00 nginx: worker processnobody     1570  0.0  0.2  48528  3912 ?        S    20:54   0:00 nginx: worker processroot       1598  0.0  0.0 112720   972 pts/0    R+   20:55   0:00 grep --color=auto nginx

7、配置backup机器的keepalived配置文件:检查主和从上的selinux和iptables都要关闭。

[root@lgs keepalived]# vim keepalived.confglobal_defs {   notification_email {     scause@163.com   }   notification_email_from scause@163.com   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id LVS_DEVEL}  vrrp_script chk_nginx {    script "/usr/local/sbin/check_ng.sh"   //监控nginx服务的脚本    interval 3}   vrrp_instance VI_1 {    state BACKUP   //backup角色    interface ens33   //指定    virtual_router_id 51   //虚拟路由id,与master必须一样    priority 90   //权重比master小    advert_int 1    authentication {        auth_type PASS        auth_pass 123456    }       virtual_ipaddress {        192.168.87.100   //虚拟ip    }           track_script {        chk_nginx   //指定监控模块    }}

8、定义监控脚本:并改文件权限

[root@lgs keepalived]# vim /usr/local/sbin/check_ng.sh#时间变量,用于记录日志d=`date --date today +%Y%m%d_%H:%M:%S`#计算nginx进程数量n=`ps -C nginx --no-heading|wc -l`#如果进程为0,则启动nginx,并且再次检测nginx进程数量,#如果还为0,说明nginx无法启动,此时需要关闭keepalivedif [ $n -eq "0" ]; then        systemctl start nginx        n2=`ps -C nginx --no-heading|wc -l`        if [ $n2 -eq "0"  ]; then                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log                systemctl stop keepalived        fifi[root@lgs keepalived]# chmod 755 /usr/local/sbin/check_ng.sh

9、启动keepalived服务:

[root@lgs keepalived]# systemctl start keepalived[root@lgs keepalived]# ps aux|grep keepalivedroot       1522  0.0  0.0 118608  1384 ?        Ss   21:12   0:00 /usr/sbin/keepalived -Droot       1523  0.4  0.1 127468  3296 ?        S    21:12   0:00 /usr/sbin/keepalived -Droot       1524  0.1  0.1 127408  2820 ?        S    21:12   0:00 /usr/sbin/keepalived -Droot       1556  0.0  0.0 112676   988 pts/0    R+   21:12   0:00 grep --color=auto keepalived[root@lgs keepalived]# ps aux|grep nginxroot        906  0.0  0.0  20504   628 ?        Ss   20:08   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confnobody      910  0.0  0.1  22948  3468 ?        S    20:08   0:00 nginx: worker processnobody      911  0.0  0.1  22948  3220 ?        S    20:08   0:00 nginx: worker processroot       1598  0.0  0.0 112676   988 pts/0    R+   21:12   0:00 grep --color=auto nginx

10、验证高可用是否生效:

1、单独访问master:192.168.87.128的nginx页面,显示:"This is HA master !"

2、单独访问backup:192.168.87.130的nginx页面,显示:This is HA backup !

3、访问VIP:192.168.87.100,默认是访问到master上,显示:This is master!

4、把master的keepalived关闭,模拟master宕机[root@nginx conf]# systemctl stop keepalived
5、master宕机后,访问VIP:192.168.87.100,则backup接替了原来的master。成为新的master,显示:This is HA backup !

转载于:https://my.oschina.net/u/3804114/blog/1839648

你可能感兴趣的文章
IOS--UIActivityIndicatorView的使用方法详细
查看>>
Linux共享内存(二)
查看>>
linux网络流量实时监控工具之iptraf
查看>>
linux命令
查看>>
从简单类型到复杂类型的参数传递用例,以及传递简单string类型的解决办法
查看>>
递归函数时间复杂度分析
查看>>
ostringstream的使用方法
查看>>
Xcode把应用程序打包成ipa
查看>>
使用oschina的git服务器
查看>>
Unity插件之NGUI学习(6)—— 关于Widget怎样加入触发事件(触发OnClick)
查看>>
laravel里面的一些变量
查看>>
Oracle用户、权限、角色管理
查看>>
AutoMapper使用手册(一)
查看>>
基本类型赋值转换规则表
查看>>
hackerrank-knapsack
查看>>
SessionFactory的创建和Session的获得
查看>>
Hybrid框架UI重构之路:四、分而治之
查看>>
iOS项目的目录结构(Cocoa China)
查看>>
取消word中所有超链接
查看>>
javascript:addEventListener
查看>>