lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡


 

实验要求

1、  lvs+ ldirectord负载均衡

2、  corosync+pacemaker高可用lvs

 

实验环境:

实验拓扑:

lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡_第1张图片

ip网络地址规划

1、  node1:lvs :172.16.76.10  (corosync+pacmaker)

2、  node2:lvs :172.16.76.20  (corosync+pacmaker)

3、  node3:172.16.76.30  Httpd

4、  node4:172.16.76.40  Httpd

 

实验前提:

1、  关闭iptables及selinux

2、  服务器时间同步ntpdate

3、  基于主机名互相通信、ssh的互信通信(可选)

 

注释:实验所有rpm包所有已上传至51cto资料链接地址如下:

         http://down.51cto.com/data/2287593

 

 

 

基础配置

         node1:        

[root@node1 ~]#grep-i -C 10 "ipvs" /boot/config-3.10.0-327.el7.x86_64 #查看是否加载ipvs
[root@node1 ~]#yuminstall ipvsadm  ldirectord –y
[root@node1~]#yum install corosync pacemaker  httpd  –y
[root@node1 ~]#yum install./pssh-2.3.1-4.2.x86_64.rpm crmsh-2.1.4-1.1.x86_64.rpm \ python-pssh-2.3.1-4.2.x86_64.rpm
root@node1~]# cd /var/www/html/
[root@node1 html]# vim index.html 

web.server:Test

[root@node1html]# systemctl  restart httpd.service


          node2:

[root@node2 ~]#grep-i -C 10 "ipvs" /boot/config-3.10.0-327.el7.x86_64 #查看是否加载ipvs
[root@node2 ~]#yuminstall ipvsadm  ldirectord –y
[root@node2~]#yum install corosync pacemaker  httpd  –y
[root@node2 ~]#yum install./pssh-2.3.1-4.2.x86_64.rpm crmsh-2.1.4-1.1.x86_64.rpm \ python-pssh-2.3.1-4.2.x86_64.rpm
[root@node2~]# cd /var/www/html/
[root@node2 html]# vim index.html 

web.server:Test

[root@node2html]# systemctl  restart httpd.service

 

          node3        

[root@node3~]#yum install httpd -y
[root@node3~]# cd /var/www/html/
[root@node3 html]# vim index.html 

web.server:172.16.76.30:Test

[root@node3html]# systemctl  restart httpd.service

      

         node4        

[root@node4~]#yum install httpd  –y
[root@node4~]# cd /var/www/html/
[root@node4 html]# vim index.html 

web.server:172.16.76.30:Test

[root@node4 html]# systemctl restart httpd.service


  

ldirectord配置        

         node1

[root@node1 ~]#ssh-keygen-t rsa
[root@node1 ~]#ssh-copy-id -i.ssh/id_rsa.pub  172.16.76.20
[root@node1~]# cd /etc/ha.d/
[[email protected]]# cat ldirectord.cf
checktimeout=3 #检测超时
checkinterval=1 #检测间隔
#fallback=127.0.0.1:80  
#fallback6=[::1]:80
autoreload=yes   自动载入
logfile="/var/log/ldirectord.log"  日志输出
#logfile="local0" 
#emailalert="[email protected]"
#emailalertfreq=3600 
#emailalertstatus=all
quiescent=no
 
# Sample for an http virtual service
virtual=172.16.76.100:80   #虚拟ip
    real=172.16.76.30:80 gate  #DR模式 realserver
    real=172.16.76.40:80 gate
    fallback=127.0.0.1:80 gate   #备份server (sorroy server)
    service=http #协议
    scheduler=rr #轮询
    #persistent=600
    #netmask=255.255.255.255
    protocol=tcp
    checktype=negotiate  协商
    checkport=80 检测端口
   request="index.html"  检测请求url
    receive="Test"   请求页面包含信息
[root@node1~]# systemctl restart ldirectord.service

lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡_第2张图片


         node2:

[root@node2 ~]#ssh-keygen-t rsa  #密钥
[root@node2 ~]#ssh-copy-id -i.ssh/id_rsa.pub  172.16.76.10
[root@node2~]#scp 172.16.76.10/etc/ha.d/ldirectord.cf /etc/ha.d/
[root@node2~]# systemctl restart ldirectord.service

lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡_第3张图片

 

 

Corosync配置

         node1

        

 [root@node1~]# systemctl stop ldirectord.service
[root@node1 ~]# systemctl enable directord.service
[root@node1 ~]# systemctl enable httpd.service
[root@node1 ~]# cd /etc/corosync/
[root@node1 ~]# vim corosync.conf
totem {
         version: 2  #版本
         crypto_cipher: aes128  #加密
         crypto_hash: md5  
         interface {
                   ringnumber:0  环0
                   bindnetaddr:172.16.0.0   绑定网络
                   mcastaddr:239.255.101.11  #组播传递ip
                   mcastport:5405  #组播传递端口
                   ttl: 1
}
}
logging {
         fileline: off
         to_stderr: no
         to_logfile: yes
         logfile:/var/log/cluster/corosync.log
         to_syslog: no
         debug: off
         timestamp: on
         logger_subsys {
         subsys: QUORUM
         debug: off
}
}
quorum {
         provider:corosync_votequorum
         two_nodes: on
}
         nodelist {     节点列表
                   node {
                            ring0_addr:172.16.76.10
                            nodeid:1
}
                   node {
                            ring0_addr:172.16.76.20
                            nodeid:2
}
}
[root@node1corosync]# corosync-keygen #生成多播信息密码
[root@node1corosync]#scp authkey corosync.conf 172.16.76.20:/etc/corocync/
[root@node1 ~]#systemctl restart corosync.service
[root@node1 ~]#systemctl restart pacemaker.service


 #注生成密钥时需要用到 /dev/random  一共需要1024位的长度

     # 生成后的密钥文件会在配置文件目录下自行生成一个authkey文件;

         #/dev/random是 Linux系统下的随机数生成器,它会从当前系统的内存中一个叫熵池的地址空间中根据系统中断来生成随机数,加密程序或密钥生成程序会用到大量的随机数,就会出现随机数不够用的情况,random 的特性就是一旦熵池中的随机数被取空,会阻塞当前系统进程等待产生中断会继续生成随机数;

    #由于此处会用到1024位长度的密钥,可能会存在熵池中的随机数不够用的情况,就会一直阻塞在生成密钥的阶段,两种解决办法:

      1、手动在键盘上输入大量字符,产生系统中断(产生中断较慢,不建议使用)       

      2、通过互联网或FTP服务器下载较大的文件(产生中断较快,建议使用)

        

node2

[root@node2 ~]#systemctl stop ldirectord.service
[root@node2 ~]# systemctl enable directord.service
[root@node2 ~]# systemctl enable httpd.service
[root@node2 ~]#systemctl restart corosync.service
[root@node2~]# systemctl restart pacemaker.service


  

Crm

[root@node1 ~]# crm
crm(live)# configure
crm(live)configure# primitive vipocf:heartbeat:IPaddr params ip="172.16.76.100" #资源vip
crm(live)configure# primitive  lvs_direcror systemd:ldirectord  #添加资源ldirectord 
crm(live)configure# primitive sorry_httpd systemd:httpd #添加资源httpd
crm(live)configure# group lvs_dir viplvs_direcror sorry_httpd #组约束
crm(live)configure# show  查看配置
node 1: node1 \
     attributes standby=on
node 2: node2 \
     attributes standby=off
primitive lvs_direcror systemd:ldirectord
primitive sorry_httpd systemd:httpd
primitive vip IPaddr \
     params ip=172.16.76.100
group lvs_dir vip lvs_direcror sorry_httpd
property cib-bootstrap-options: \
     have-watchdog=false \
     dc-version=1.1.13-10.el7-44eb2dd\
     cluster-infrastructure=corosync\
     stonith-enabled=false

lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡_第4张图片

    crm(live)configure# verify   #语法检查

    crm(live)configure#commit    #提交保存

    crm(live)configure#cd

    crm(live)# status   #状态查看

lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡_第5张图片


 

node2:

[root@node2 ~]# crm node standby (手动离线节点2) #online (上线) #即手动离线node2后服务自动漂移至node1节点之上;

lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡_第6张图片


  

 测试:


wKiom1ikYjLA2caCAABl6Z8lHzE853.jpg

lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡_第7张图片


至此实验完成。本实验只为简单介绍其配置方式,文中指令诸多解释将在随后博客之中发布;

若实验中真有问题欢迎指正;