lvs+ldirectord+corosync+pacemaker+httpd实现高可用负载均衡
实验要求
1、 lvs+ ldirectord负载均衡
2、 corosync+pacemaker高可用lvs
实验环境:
实验拓扑:
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.htmlweb.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.htmlweb.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.htmlweb.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.htmlweb.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
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
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
crm(live)configure# verify #语法检查
crm(live)configure#commit #提交保存
crm(live)configure#cd
crm(live)# status #状态查看
node2:
[root@node2 ~]# crm node standby (手动离线节点2) #online (上线) #即手动离线node2后服务自动漂移至node1节点之上;
测试:
至此实验完成。本实验只为简单介绍其配置方式,文中指令诸多解释将在随后博客之中发布;
若实验中真有问题欢迎指正;