Keppalived 高可用

Keppalived 高可用

keepalived
     1 要先对时间进行同步
         时间服务器:
             # yum install ntp ntpdate
             # vim /etc/ntp.conf
                 restrict 192.168.10.10 nomodify notrrap nopeer noquery   \\ 加上
                 restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap  \\ 允许192.168.10.0 网段访问
                 server 127.127.1.0                                         \\ 其他的server注释掉
                 Fudge 127.127.1.0 stratum 10         \\ 想配置本地时间服务器server 127.127.1.0 必须这样写
             # systemctl restart ntpd                  \\ 已经运行ntpd,就不能用ntpdate来更新时间了
             # ss -unl                                  \\ udp123 端口被监听
             # systemctl enable ntpd
             # ntpdate 192.168.10.10                     \\ 可在另一台机器上 同步此时间服务器的时间
         网络时间同步
             # ntpdate 0.asia.pool.ntp.org
             # hwclock                      \\ 查看硬件时间
             # hwclock -w                    \\ 将软件时间写入到硬件时间
             # hwclock -r                     \\ 读取硬件时间
             # ssh 192.168.10.11 'date'; date          \\ 对比查看两个服务器时间 是否相同
     2 各节点要能互相解析主机名: 一般建议通过hosts文件进行解析
         修改主机名:
             # hostname                        \\ 查看主机名
             # hostname teo10.10                \\ 设置主机名 临时
             # hostnamectl set-hostname Teo10.10 \\ 永久设置主机名 直接就有效
                 # vim /etc/hostname              \\ 配置文件 永久设置主机名 重启才有效  
                     teo10.10                      \\ CentOS 6 /etc/sysconfig/network
             # vim /etc/hosts                       \\ hosts文件
                 176.16.10.10  teo10.10              \\ 对方机器ip及主机名
             # systemctl restart network.service      \\ 使之生效
     3 确保iptables及selinux不会成为服务的阻碍


 keepalived 两台httpd机器做高可用 实例        \\ 首先分别安装httpd
     # yum install keepalived                \\ 两台机器都需要安装
     # vim /etc/keepalived/keepalived.conf    \\ 可直接替换使用  详细配置文件看最后详解
         :.,$s/^/#/g                           \\ 从当前行到最后一行所有行首加#注释掉 virtual_server 可以注释掉
         global_defs {                          \\ 全局定义 
             notification_email {                \\ 警告信息 发送邮件
                 root@localhost                   \\ 收件人的邮箱  定义邮件服务使用
             }
             notification_email_from teo@localhost  \\ 发件人 的邮箱
             smtp_server 127.0.0.1                   \\ 指明邮件服务器  linux默认邮件服务器
             smtp_connect_timeout 30                  \\ 链接邮件服务器超时时长
             router_id teo10.10                        \\ 定义当前物理设备的唯一标示 可以使用主机名
             vrrp_mcast_group4 224.18.0.100             \\ 组播地址 多实例时候的 每个vrrp_instance 需要专用的组播地址
         }
         vrrp_instance VI_1 {                   \\ 虚拟路由实例  VI_1 名字 第一个实例
             state MASTER                        \\ 定义自己的初始状态 MASTER 主  BACKUP 从
             interface ens33                      \\ ip配置哪块物理网卡
             virtual_router_id 51                  \\ 虚拟路由器id 同一个keepalived要一样 不同keepalived要不一样 
             priority 100                           \\ 优先级 0-255 数字越大 优先级越高    第二台可以改成99
             advert_int 1                            \\ 通告广播 每隔多少秒发送一次 默认1s
             authentication {                         \\ 认证
                 auth_type PASS                        \\ 简单认证 简单字符串
                 auth_pass 123456                       \\ 字符串为 123456
             }
             virtual_ipaddress {             \\ 虚拟ip地址 自定义就可以
                 192.168.10.80/24             \\ 可以是多个 可以是一个 会配置在ens33接口别名上 要和ip一个网段
             }
         }
     # scp keepalived.conf 192.168.10.10:/etc/keepalived/    \\ 复制配置文件到另一台主机
         router_id teo10.10       \\ 拷贝到第二台机器的 需要修改的三项
         state BACKUP              \\ 要配置抢占模式 都要配置成MASTER 根据priority判断级别
         priority 95                \\ 以上配置为抢占模式 要配置非抢占模式 state都需要设置成BACKUP并关闭VIP抢占
         nopreempt                   \\ 关闭VIP的抢占,state都为BACKUP时生效
     # vim /etc/sysconfig/keepalived          \\ keepalived 开启日志功能 两台机器都需要执行以下命令
         KEEPALIVED_OPTIONS="-D -S 3"          \\ 3 为日志级别
     # vim /etc/rsyslog.conf                    \\ 系统里为keepalived 开启日志
         local3.*     /var/log/keepalived.log    \\ 添加到最后
     # systemctl restart rsyslog.service          \\ 重启rsyslog服务
     # tail  /var/log/keepalived.log               \\ 查看 日志文件
     # systemctl restart keepalived            \\ 启动
     # ps aux | grep keepalived                 \\ 会有keepalived进程
     # ip addr list                              \\ 192.168.10.80会被配置到网卡上
     # systemctl list-unit-files | grep keep      \\ 查看是否开机启动
     # systemctl enable keepalived                 \\ 开机启动
     以上为vip和dip在同一网段 如果配置不同网段
         # cd /etc/sysconfig/network-scripts/
         # cp ifcfg-ens33 ifcfg-ens33:0
         # vim ifcfg-ens33
             BOOTPROTO="static"
             NETMASK=255.255.255.0
             GATEWAY=192.168.10.254
             DNS1=192.168.10.254
             DNS2=8.8.8.8
         # vim ifcfg-ens33:0               \\ 内网配置到此网卡
             BOOTPROTO="static"
             IPADDR=172.16.10.12            \\ 第二机器需要改
             NETMASK=255.255.255.0
             NAME=ens33:0
             DVICE=ens33:0                    \\ 删除 UUID
         # systemctl restart network.service


 注:
     1 state都为BACKUP时并开启nopreempt时 priority不生效 为非抢占模式
     2 抢夺是否成功根据priority大小判断 抢还是不抢根据nopreempt判断
     3 BACKUP时nopreempt才生效
     4 对于nginx检测 需要脚本 未做进一步验证
     5 以上已经做进一步验证 以下为lvs做高可用 为做进一步验证

keepalived 配置文件详解
     # vim /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      \\ 指明邮件服务器  linux默认邮件服务器
            smtp_connect_timeout 30         \\ 链接邮件服务器超时时长
            router_id LVS_DEVEL              \\ 定义当前物理设备的唯一标示 可以使用主机名
            vrrp_mcast_group4 224.18.0.100    \\ 组播地址  ??? 多实例时候的 每个vrrp_instance 需要专用的组播地址
            vrrp_skip_check_adv_addr           \\ 以下四项 暂时没用 可加注释
            vrrp_strict
            vrrp_garp_interval 0
            vrrp_gna_interval 0
         }
         vrrp_script chk_mt {                      \\ 自定义脚本 在此目录下 touch down 文件 可使 权重-2 手动降低权限
             script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"   \\ 手动 调度 使地址到备用服务器上  未成功
             interval 1
             weight -2
         }
         vrrp_instance VI_1 {        \\ 虚拟路由实例  VI_1 名字 第一个实例
             state MASTER             \\ 定义自己的初始状态 MASTER 主  BACKUP 从
             interface eth0            \\ ip配置哪块物理网卡
             virtual_router_id 51       \\ 虚拟路由器id 同一个keepalived要一样 不同keepalived要不一样 
             priority 100                \\ 优先级 0-255 数字越大 优先级越高    第二台可以改成99
             advert_int 1                 \\ 通告广播 每隔多少秒发送一次 默认1s
             authentication {              \\ 认证
                 auth_type PASS             \\ 简单认证 简单字符串
                 auth_pass 1111              \\ 字符串为 1111
             }
             virtual_ipaddress {               \\ 虚拟ip地址 自定义就可以
                 192.168.200.16                 \\ 可以是多个 可以是一个
                 192.168.200.17
                 192.168.200.18
             }
             track_script {                         \\ 调用 自定义 脚本
                 chk_mt
             }
             notify_master "/etc/keepalived/notify.sh master"   \\ 调用自定义 邮件脚本 发邮件 notify.sh
             notify_backup "/etc/keepalived/notify.sh backup"
             notify_fault "/etc/keepalived/notify.sh fault"
         }
         virtual_server 192.168.200.100 443 {  \\ lvs服务器vip 地址
             delay_loop 6                       \\ 检查失败时 转几圈
             lb_algo rr                          \\ lvs 方式
             lb_kind NAT                          \\ lvs 模式 还可以为DR
             persistence_timeout 50                \\ 保持连接
             protocol TCP
             sorry_server 127.0.0.1 80           \\ 定义 sorry_server 当所有real_server都挂掉时 提示页面 
             real_server 192.168.201.100 443 {    \\ 对第一个real_server做健康状态检查                 
                 weight 1                          \\ 权重
                 SSL_GET {                          \\ 请求的方式 还有 SSL_GET TCP_CHECK 检查是否可以使用
                     url {                           \\ 请求的url
                       path /                         \\ 根 请求的是主页
                       status_code 200                 \\ 状态码为 200
                     }
                     url {
                       path /mrtg/
                       digest 9b3a0c85a887a256d6939da88aabd8cd
                     }
                     connect_timeout 3
                     nb_get_retry 3
                     delay_before_retry 3
                 }
             }
             real_server 192.168.10.100 80 {  \\ 第二个real_server
                 weight 2
                     TCP_CHECK {         \\ 如果使用TCP_CHECK 只需指明超时即可 其他不用 但是精度不如HTTP_GET
                         connect_timeout 3         
                     }
             }
         }

keepalived 为 lvs 做高可用            \\ 两个director为dr模式做keepalived   两个 real server 
     real server:                      \\ 未做进一步验证
         # yum install httpd
         # echo "RS1 11111111111111" > /var/www/html/index.html
         # systemctl restart httpd
         # systemctl enabled httpd
         # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore          \\ 临时有效 重启会失效
         # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
         # echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
         # echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
         # sysctl -p
         # vim /etc/sysctl.conf                                       \\ 写入内核 使之永久有效
             net.ipv4.conf.all.arp_ignore = 1
             net.ipv4.conf.all.arp_announce = 2
             net.ipv4.conf.ens33.arp_ignore = 1
             net.ipv4.conf.ens33.arp_announce = 2
         # ifconfig lo:0 192.168.10.100/32 broadcast 192.168.10.100    \\ 临时 改变网卡设置 重启会失效
         # cd /etc/sysconfig/network-scripts/                           \\ 修改 配置文件 使之永久有效
         # cp ifcfg-lo{,:0}
         # vim ifcfg-lo:0
             DEVICE=lo:0
             IPADDR=192.168.10.100
             NETMASK=255.255.255.255
             BROADCAST=192.168.10.100
             ONBOOT=yes
             NAME=loopback:0
         # systemctl restart network.service
         # ip addr list
         # route add -host 192.168.10.100 dev lo:0      \\ 添加主机路由 临时有效
         # vim /etc/sysconfig/static-routes              \\ 使路由永久有效  没有此文件的话 新建
             any host 192.168.10.100 dev lo:0             \\ 添加主机路由
         # route -n
     Director:
         # ip addr add 192.168.10.100/32 dev ens33           \\ 以下十条命令可不用写 仅做测试使用
         # ip addr list
         # route add -host 192.168.10.100 dev ens33
         # yum install ipvsadm
         # ipvsadm -A -t 192.168.10.100:80 -s rr
         # ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.14 -g
         # ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.15 -g
         # ipvsadm -L -n                                \\ 做测试 是否成功  其实用不上ipvsadm的  包卸载的都可以
         # ipvsadm -C                                    \\ 清空ipvs规则 以上做只为测试是否成功
         # ip addr del 192.168.10.100/32 dev ens33        \\ 删除地址
         # vim /etc/sysconfig/static-routes                \\ 使路由永久有效  没有此文件的话 新建
             any host 192.168.10.100 dev ens33              \\ 添加主机路由
         # yum install httpd                                 \\ 做 sorry server 使用
         # echo "Sorry, sorry server111111111111111111111" > /var/www/html/index.html
         # systemctl restart httpd
         # openssl rand -hex 6                    \\ 可生成随机数用于 auth_pass 
         # vim /etc/keepalived/keepalived.conf        \\ 修改以下选项
             root@localhost
             notification_email_from kaadmin@localhost
             smtp_server 127.0.0.1
             router_id teo10.10
             #   vrrp_skip_check_adv_addr                \\ 加注释 暂时没用
             #   vrrp_strict
             #   vrrp_garp_interval 0
             #   vrrp_gna_interval 0
             interface ens33
             192.168.10.100/32
             virtual_server 192.168.10.100 80 {
                 lb_algo rr                          \\ lvs 方式
                 lb_kind DR                           \\ lvs 模式
                 sorry_server 127.0.0.1 80             \\ 定义 sorry_server 当所有real_server都挂掉时 提示页面 
                 real_server 192.168.10.14 80 {         \\ 对第一个real_server做健康状态检查
                     HTTP_GET {                          \\ 请求的方式 还有 SSL_GET 
                         url {                            \\ 请求的url
                           path /                          \\ 根 请求的是主页
                           status_code 200                  \\ 状态码为 200
                         }
                     }
                 }
                 real_server 192.168.10.15 80 {         \\ 在配置第二个real_server
             }


 lvs nat 模式下 需要配 同步组  没有做实验


 手动 调度 使地址到备用服务器上           \\ 未能实现切换 需检查配置
     # vim /etc/sysconfig/keepalived       \\ 两台机器同时修改配置文件
         vrrp_script chk_teo {              \\ 自定义脚本  名字 
             script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"  \\ 检查是否有down文件  
             interval 2                      \\ 每隔2秒做检查 如果有 返回1 继续执行代码 如果没有返回0 退出
             weight -20                       \\ 权重 减去20
         vrrp_instance VI_1 {
             track_script {
             chk_teo
             }
         }


Teo

You must be logged in to post a comment