设为首页 收藏本站
查看: 1771|回复: 1

[经验分享] Puppet模块(八):keepalived模块

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-3-24 08:59:51 | 显示全部楼层 |阅读模式
一、模块说明

    keepalived是为了实现nginx的高可用性,在安装了nginx的两台机子上分别部署keepalived-master和keepalived-slave,会给两台机子的eth0增加两个虚拟ip(10.188.1.51,10.188.1.52),将网站域名的DNS指向这两个VIP,或者是出口路由器端口映射向这两个VIP
    当任一台机子故障或chk_nginx.sh检测到其主机上的nginx故障时,VIP都会自动漫游到另一台正常的机子,可以扩展到更多台机子。

二、目录结构

    wKioL1byNueDpvs8AAAQJfOdaXU391.jpg
三、代码展示
1、files目录
    chk_nginx.sh     #检查nginx服务状态的脚本

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
# check nginx server status
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
/usr/sbin/nginx
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi



    keepalived-1.2.7.tar.gz     #安装包下载 http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

2、manifests目录
    init.pp

1
2
3
class keepalived {
    include keepalived::install,keepalived::config,keepalived::service
}



    install.pp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class keepalived::install {
  Exec{  path => ['/usr/bin','/usr/sbin','/bin'] }
  package { ['openssl-devel','popt-devel']:
     ensure => installed,
     before => Exec['install'],
  }
  file { '/etc/keepalived':
      ensure  => directory,
  }
  file { 'keepalived':
      name    => '/usr/local/src/keepalived-1.2.7.tar.gz',
      ensure  => file,
      source  => 'puppet:///modules/keepalived/keepalived-1.2.7.tar.gz',
      owner   => root,
      group   => root,
      mode    => '0640',
      require => Package[['openssl-devel','popt-devel']],
  }
  exec { 'tar':
      command     => 'tar -zxf keepalived-1.2.7.tar.gz',
      cwd         => '/usr/local/src',
      refreshonly => true,
      subscribe   => File['keepalived'],
      before      => Exec['install'],
  }
  exec { 'install':
      command     => '/bin/bash configure && make && make install',
      cwd         => '/usr/local/src/keepalived-1.2.7',
      creates     => '/usr/local/sbin/keepalived',
  }
}



    config.pp    # $keepalived_conf参数可在foreamen的主机属性里设置,或节点site.pp里设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class keepalived::config {  
    case $keepalived_conf  {
        master: {
            file { '/etc/keepalived/keepalived.conf':
                ensure  => file,
                owner   => root,
                group   => root,
                mode    => 400,
                content => template("keepalived/keepalived-master.conf.erb"),
                notify  => Class['keepalived::service'],
                require => Class['keepalived::install'],
            }
        }
        slave: {
            file { '/etc/keepalived/keepalived.conf':
                ensure  => file,
                owner   => root,
                group   => root,
                mode    => 400,
                content => template("keepalived/keepalived-slave.conf.erb"),
                notify  => Class['keepalived::service'],
                require => Class['keepalived::install'],
            }  
        }
    }
    file { "/usr/sbin/keepalived":
        ensure  => link,
        target  => "/usr/local/sbin/keepalived",
        owner   => root,
        group   => root,
        mode    => 755,
        require => Class['keepalived::install'],
    }
    file { "/etc/rc.d/init.d/keepalived":
        ensure  => link,
        target  => "/usr/local/etc/rc.d/init.d/keepalived",
        owner   => root,
        group   => root,
        mode    => 755,
        require => Class['keepalived::install'],
    }
    file { "/etc/sysconfig/keepalived":
        ensure  => link,
        target  => "/usr/local/etc/sysconfig/keepalived",
        owner   => root,
        group   => root,
        mode    => 755,
        require => Class['keepalived::install'],
    }
    file { '/usr/local/nginx':
        ensure  => directory,
        before  => File['/usr/local/nginx/chk_nginx.sh'],
    }
    file { '/usr/local/nginx/chk_nginx.sh':
        ensure  => file,
        owner   => root,
        group   => root,
        mode    => 755,
        source  => "puppet:///modules/keepalived/chk_nginx.sh",
        require => Class['keepalived::install'],
    }
}



    service.pp
1
2
3
4
5
6
7
8
9
class keepalived::service {
    service { 'keepalived':
        ensure     => 'running',
        enable     => 'true',
        hasrestart => 'true',
        hasstatus  => 'true',
        require    => Class["keepalived::install"],
    }
}



3、templates目录

    keepalived-master.conf.erb    #根据情况修改邮箱、密码、IP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
! Configuration File for keepalived
global_defs {
notification_email {
        yourmail@ewin.com
   }
   notification_email_from keepalived@ewin.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/nginx/chk_nginx.sh"
    interval 2
    weight 2
}
track_script {
    chk_nginx
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass mypassword
    }
    virtual_ipaddress {
        10.188.1.51
    }
}
vrrp_instance VI_2 {
    state BECKUP
    interface eth0
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass mypassword
    }
    virtual_ipaddress {
        10.188.1.52
    }
}




    keepalived-slave.conf.erb   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
! Configuration File for keepalived
global_defs {
notification_email {
        yourmail@ewin.com
   }
   notification_email_from keepalived@ewin.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/nginx/chk_nginx.sh"
    interval 2
    weight 2
}
track_script {
    chk_nginx
}
vrrp_instance VI_1 {
    state BECKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass mypassword
    }
    virtual_ipaddress {
        10.188.1.51
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass mypassword
    }
    virtual_ipaddress {
        10.188.1.52
    }
}




四、Foreman配置
    导入模块

wKiom1byPeix-SojAABGG3huUn4223.jpg
    我这里在配置-配置组中将nginx和keepalived放在了一个组里,然后编辑主机,给其分配该组:

wKioL1byP4KienedAAB6wLBuQrw345.jpg
    给主机添加一个参数,指定其使用哪个配置文件:

wKioL1byQHejcML3AABtd4KkDl0173.jpg
    搜索添加了模块的nginx主机,手动运行Puppet:

wKiom1byP5WS1kArAABvYXShJ4E126.jpg

五、查看结果

    在客户端主机上查看VIP
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@com-nginx-master-33 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 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: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
   link/ether 72:cc:7f:ea:b9:97 brd ff:ff:ff:ff:ff:ff
   inet 10.188.1.32/8 brd 10.255.255.255 scope global eth0
   inet 10.188.1.51/32 scope global eth0
   inet 10.188.1.52/32 scope global eth0
   inet6 fe80::70cc:7fff:feea:b997/64 scope link
      valid_lft forever preferred_lft forever



    可以看到eth0接口上多了两个VIP,接下来可以实验停止某台nginx或关机,观察VIP的变化。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-194972-1-1.html 上篇帖子: Puppet模块(七):nginx模块 下篇帖子: Puppet模块(九):redis模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表