天天看点

Haproxy+Keepalived集群实例配置

操作系统: redhat 6.5 x64,本文采用rpm方式安装haproxy,keepalived。   

app1: 192.168.0.24    

app1: 192.168.0.25    

vip : 192.168.0.26

http1:192.168.0.24:8080  主机配置lap环境。   

http2:192.168.0.25:8080  主机配置lap环境。

实现一个vip出现,出例采用vip地址是192.168.0.26。

说明:rhel/centos/oel6.x安装版本中已经集成了keepalive-1.2.7,以及haproxy软件包经过安装没有问题。   

在app1,app2两个节点上直接采用rpm包安装。

1

2

3

4

5

6

7

8

9

10

<code># rpm -ivh keepalived-1.2.7-3.el6.x86_64.rpm net-snmp-utils-5.5-49.el6.x86_64.rpm net-snmp-libs-5.5-49.el6.x86_64.rpm lm_sensors-3.1.1-17.el6.x86_64.rpm lm_sensors-</code>

<code>devel-3.1.1-17.el6.x86_64.rpm lm_sensors-libs-3.1.1-17.el6.x86_64.rpm    </code>

<code>preparing...                </code><code>########################################### [100%]    </code>

<code>   </code><code>1:lm_sensors-libs        </code><code>########################################### [ 17%]    </code>

<code>   </code><code>2:net-snmp-libs          </code><code>########################################### [ 33%]    </code>

<code>   </code><code>3:keepalived             </code><code>########################################### [ 50%]    </code>

<code>   </code><code>4:net-snmp-utils         </code><code>########################################### [ 67%]    </code>

<code>   </code><code>5:lm_sensors             </code><code>########################################### [ 83%]    </code>

<code>   </code><code>6:lm_sensors-devel       </code><code>########################################### [100%]    </code>

<code>#</code>

1) 在app1 节点一上配置文件

说明: 修改配置文件, 绑定的网卡是eth0,从机就是优先级与本机ip不一样外,其它都是一样,相比之前的示例增加了监控脚本。

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

<code># vi /etc/keepalived/keepalived.conf  </code>

<code>! configuration file </code><code>for</code> <code>keepalived    </code>

<code>global_defs {    </code>

<code>   </code><code>notification_email {    </code>

<code>     </code><code>[email protected]    </code>

<code>   </code><code>}    </code>

<code>   </code><code>notification_email_from [email protected]    </code>

<code>   </code><code>smtp_server 127.0.0.1    </code>

<code>   </code><code>smtp_connect_timeout 30    </code>

<code>   </code><code>router_id lvs_devel    </code>

<code>}</code>

<code>vrrp_script chk_haproxy {   </code>

<code>    </code><code>script </code><code>"killall -0 haproxy"</code>    

<code>    </code><code>interval 1    </code>

<code>    </code><code>weight -2    </code>

<code>vrrp_instance vi_1 {   </code>

<code>    </code><code>state master     </code>

<code>    </code><code>interface eth0    </code>

<code>    </code><code>virtual_router_id 51    </code>

<code>    </code><code>mcast_src_ip 192.168.0.24  </code>

<code>    </code><code>priority 100      </code>

<code>    </code><code>advert_int 1    </code>

<code>    </code><code>authentication {    </code>

<code>        </code><code>auth_type pass    </code>

<code>        </code><code>auth_pass 876543    </code>

<code>    </code><code>}    </code>

<code>    </code><code>virtual_ipaddress {    </code>

<code>        </code><code>192.168.0.26</code><code>/24</code> <code>dev eth0 label eth0:1    </code>

<code>    </code><code>track_interface {    </code>

<code>        </code><code>eth0    </code>

<code>    </code><code>track_script {    </code>

<code>        </code><code>chk_haproxy    </code>

2) 在app2节点二上配置文件

<code>    </code><code>script </code><code>"killall -0 haproxy"</code>     

<code>    </code><code>interval 1     </code>

<code>    </code><code>weight -2  </code>

<code>    </code><code>mcast_src_ip 192.168.0.25    </code>

<code>    </code><code>priority 99  </code>

<code>        </code><code>192.168.0.26</code><code>/24</code>  <code>dev eth0 label eth0:1    </code>

1) 启动服务并加为开机启动:

<code>service keepalived start    </code>

<code>chkconfig keepalived on</code>

2) 测试并观察vip漂移情况

(1) vip地址切换观察

说明:两种方式切换vip, 一个是关闭haproxy代理服务,一个是关闭相关节点的keepalived服务。

<code>[root@app1 /]</code><code># service keepalived start    </code>

<code>starting keepalived: [ ok ]</code>

<code>[root@app1 keepalived]</code><code># ip a   </code>

<code>1: lo: &lt;loopback,up,lower_up&gt; mtu 16436 qdisc noqueue state unknown     </code>

<code>    </code><code>link</code><code>/loopback</code> <code>00:00:00:00:00:00 brd 00:00:00:00:00:00    </code>

<code>    </code><code>inet 127.0.0.1</code><code>/8</code> <code>scope host lo    </code>

<code>    </code><code>inet6 ::1</code><code>/128</code> <code>scope host     </code>

<code>       </code><code>valid_lft forever preferred_lft forever    </code>

<code>2: eth0: &lt;broadcast,multicast,up,lower_up&gt; mtu 1500 qdisc pfifo_fast state up qlen 1000    </code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:4c:39:43 brd ff:ff:ff:ff:ff:ff    </code>

<code>    </code><code>inet 192.168.0.24</code><code>/24</code> <code>brd 192.168.0.255 scope global eth0    </code>

<code>    </code><code>inet 192.168.0.26</code><code>/24</code> <code>scope global secondary eth0:1    </code>

<code>    </code><code>inet6 fe80::20c:29ff:fe4c:3943</code><code>/64</code> <code>scope link     </code>

<code>[root@app1 keepalived]</code><code>#</code>

<code>[root@app2 keepalived]</code><code># ip a    </code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:cf:05:99 brd ff:ff:ff:ff:ff:ff    </code>

<code>    </code><code>inet 192.168.0.25</code><code>/24</code> <code>brd 192.168.0.255 scope global eth0    </code>

<code>    </code><code>inet6 fe80::20c:29ff:fecf:599</code><code>/64</code> <code>scope link     </code>

<code>[root@app2 keepalived]</code><code>#</code>

<code>注:可以关闭keepalived服务,以及关闭haproxy服务,通过</code><code>tail</code> <code>-f </code><code>/var/log/messages</code><code>观察vip移动情况。</code>

<code>jan 11 12:54:19 app2 keepalived_vrrp[26911]: vrrp_instance(vi_1) received higher prio advert   </code>

<code>jan 11 12:54:19 app2 keepalived_vrrp[26911]: vrrp_instance(vi_1) entering backup state    </code>

<code>jan 11 12:54:19 app2 keepalived_vrrp[26911]: vrrp_instance(vi_1) removing protocol vips.    </code>

<code>jan 11 12:54:19 app2 keepalived_healthcheckers[26910]: netlink reflector reports ip 192.168.0.26 removed</code>

app1, app2配置操作

# vi /etc/sysctl.conf    

net.ipv4.ip_nonlocal_bind = 1    

# sysctl -p

# rpm -ivh haproxy-1.4.24-2.el6.x86_64.rpm

1)app1上创建配置文件

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

<code># vi /usr/local/haproxy/conf/haproxy.cfg</code>

<code>global   </code>

<code>      </code><code>log  127.0.0.1   local0     </code>

<code>      </code><code>maxconn     4000     </code>

<code>      </code><code>chroot      </code><code>/var/lib/haproxy</code>    

<code>      </code><code>pidfile     </code><code>/var/run/haproxy</code><code>.pid    </code>

<code>      </code><code>user        haproxy    </code>

<code>      </code><code>group       haproxy    </code>

<code>      </code><code>daemon    </code>

<code>      </code><code>nbproc 1  </code>

<code>      </code><code>stats socket </code><code>/var/lib/haproxy/stats</code>

<code>defaults   </code>

<code>      </code><code>log       global       </code>

<code>      </code><code>mode      http   </code>

<code>      </code><code>option    httplog   </code>

<code>      </code><code>option    dontlognull     </code>

<code>      </code><code>option    redispatch   </code>

<code>      </code><code>option    httpclose     </code>

<code>      </code><code>option    forwardfor     </code>

<code>      </code><code>retries   3              </code>

<code>      </code><code>maxconn   2000     </code>

<code>      </code><code>contimeout  5000   </code>

<code>      </code><code>clitimeout  50000     </code>

<code>      </code><code>srvtimeout  50000     </code>

<code>      </code><code>timeout check   1s  </code>

<code>      </code><code>timeout http-request    10s     </code>

<code>      </code><code>timeout queue           1m  </code>

<code>      </code><code>timeout connect         10s     </code>

<code>      </code><code>timeout client          1m  </code>

<code>      </code><code>timeout server          1m  </code>

<code>      </code><code>timeout http-keep-alive 10s</code>

<code>listen stats   </code>

<code>      </code><code>mode http    </code>

<code>      </code><code>bind 0.0.0.0:91  </code>

<code>      </code><code>stats </code><code>enable</code>     

<code>      </code><code>stats uri </code><code>/admin</code>     

<code>      </code><code>stats realm </code><code>"admin console"</code>     

<code>      </code><code>stats auth admin:123456     </code>

<code>      </code><code>stats hide-version     </code>

<code>      </code><code>stats refresh 10s     </code>

<code>      </code><code>stats admin </code><code>if</code> <code>true</code>

<code>frontend web_proxy    </code>

<code>      </code><code>bind *:80    </code>

<code>      </code><code>acl url_dynamic path_end -i .php    </code>

<code>      </code><code>use_backend phpserver </code><code>if</code> <code>url_dynamic     </code>

<code>      </code><code>default_backend webservers</code>

<code>backend webservers   </code>

<code>      </code><code>balance roundrobin    </code>

<code>      </code><code>option httpchk get </code><code>/test</code><code>.html http</code><code>/1</code><code>.0\r\nhost:192.168.0.26     </code>

<code>      </code><code>server node01 192.168.0.24:8080 weight 3 check inter 2000 rise 2 fall 1     </code>

<code>      </code><code>server node02 192.168.0.25:8080 weight 3 check inter 2000 rise 2 fall 1</code>

<code>backend phpserver   </code>

<code>      </code><code>option httpchk get </code><code>/test</code><code>.php     </code>

<code>      </code><code>server node01 192.168.0.24:8080 weight 3 check inter 2000 rise 2 fall 1</code>

2)app2上创建配置文件

<code>      </code><code>maxconn 4000     </code>

<code>      </code><code>option httpchk get </code><code>/test</code><code>.html     </code>

说明:两节点互为主备模式,均优化将本机的节点应用做为主节点,也可以为负载均衡模式, 主例也配置了一个动静分离的模式。

Haproxy+Keepalived集群实例配置

haproxy日志配置,否则默认是不记haproxy日志的,注意与rhel/centos5.x版本的区别。

<code># vi /etc/rsyslog.conf</code>

<code>$modload imudp   </code>

<code>$udpserverrun 514    </code>

<code>$udpserveraddress 127.0.0.1    </code>

<code>local0.* </code><code>/var/log/haproxy</code><code>.log     </code>

<code>*.info;mail.none;authpriv.none;</code><code>cron</code><code>.none;local0.none </code><code>/var/log/messages</code>

<code>说明: 第五行是去掉在</code><code>/var/log/message</code><code>再记录haproxy.log日志的功能的。  </code>

<code>直接手动执行   </code>

<code>service rsyslog restart</code>

注:redhat/centos6.x 默认haproxy服务运行采用haproxy用户,rpm包安装haproxy,系统已自动配置日录文件轮询功能。

1,是否有多vip地址,如果有的话,需要配置多个vrrp_instance实例,双机互备。   

2,监控脚本,用于监控nginx,或haproxy代理服务器的存活状态,用于切换vip地址。    

3,两种方式切换vip,一个是关闭代理服务,一个是关闭相关节点的keepalived服务器。

继续阅读