搭建openldap的MirrorMode复制方式集群+lvs+keepalived

搭建openldap的MirrorMode复制方式集群+lvs+keepalived

                     Author:zhuhonglu

实验选择openldap的MirrorMode复制方式和lvs的DR模式
1、环境准备(cnetos7)
lvs1:192.168.248.140(主的)
lvs2: 192.168.248.141(从的)
openldap:192.168.248.132
openldap: 192.168.248.139
VIP: 192.168.248.142 (lvs产生的虚拟ip)
搭建的目的:高可用性负载均衡自动化配置
1.搭建openldap集群
1.1安装openldap
1.1.1 ldap简单介绍
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到
1.1.2 ldap安装
分别在2个机器上安装openldap 和berkeley-db的数据库
软件安装包准备:•
OpenLDAP 2.4.44: http://www.openldap.org/software/download/
• BDB: http://download.oracle.com/berkeley-db/db-5.1.29.tar.gz

  Centos7准备 

1关闭防火墙
1.本地安装为了安装方便把防火墙关闭,实际生产环境是开放端口供外部访问
systemctl stop firewalld.service

//禁止firewall开机启动
systemctl disable firewalld.service
开放端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
2.关闭selinux
/usr/sbin/setenforce 0
echo “/usr/sbin/setenforce 0” >> /etc/rc.local
在这里插入图片描述

  1. 依赖包的安装
    //涉及libtool-ltdl与libtool-ltdl-devel,如不安装,在编译时报错:configure: error: could not locate libtool ltdl.h
    yum install gcc
    在这里插入图片描述
    yum install ltdl -y
    在这里插入图片描述
    安装Berkeley DB(4.4 - 4.8 or 5.0 - 5.1 )
    解压文件tar -zxf db-5.1.29.tar.gz到usr/local/src/
    cd /usr/local/src/db-5.1.29/build_unix
    …/dist/configure --prefix=/usr/local/berkeleydb-5.1.29
    (安装到usr/local/db-5.1.29目录下 有可能configure权限不足请执行chmod a+x)
    在这里插入图片描述
    make &&make install
    在这里插入图片描述
    4.安装openldap
  2. 配置环境变量 vim /etc/profile
  3. 加入以下环境变量
    export BERKELEYDB_HOME="/usr/local/berkeleydb-5.1.29"
    export CPPFLAGS="-IBERKELEYDBHOME/include"exportLDFLAGS="LBERKELEYDB_HOME/include" export LDFLAGS="-LBERKELEYDB_HOME/lib"
    export LD_LIBRARY_PATH=“BERKELEYDBHOME/lib"exportLDAPHOME="/usr/local/openldap2.4.44"exportPATH="BERKELEYDB_HOME/lib" export LDAP_HOME="/usr/local/openldap-2.4.44" export PATH="PATH:BERKELEYDBHOME/bin:BERKELEYDB_HOME/bin:LDAP_HOME/bin:LDAPHOME/sbin:LDAP_HOME/sbin:LDAP_HOME/libexec”
    在这里插入图片描述
    source /etc/profile 查看环境变量 echo $PATH
    在这里插入图片描述
    4.cd /usr/local/src 解压tar -zxf openldap-2.4.44.tgz
  4. //保证在后面编译openldap时能找到lib和include下的库。
    [[email protected] build_unix]# cd /usr/local/src/
    [[email protected] src]# echo “/usr/local/berkeleydb-5.1.29/lib/” > /etc/ld.so.conf
    [[email protected] src]# ldconfig -v
    5./configure --prefix=/usr/local/openldap-2.4.44 --enable-syslog --enable-modules --enable-debug --enable-syncprov --with-tls CPPFLAGS=-I/usr/local/berkeleydb-5.1.29/include/ LDFLAGS=-L/usr/local/berkeleydb-5.1.29/lib/(安装到/usr/local/openldap-2.4.44)(–enable-ppolicy)
    在这里插入图片描述
    如果、在 ./configuer时出现错误提示:configure: error: could not locate libtool ltdl.h
    解决方法:安装 libtool-ltdl 及libtool-ltdl-devel包
    如果是64位系统,通过yum方式,命令如下,

yum install libtool-ltdl.x86_64 libtool-ltdl-devel.x86_64

  1. make depend
    在这里插入图片描述
  2. make
  3. make install
    在这里插入图片描述
  4. 执行 cd libexec
    ./slapd -d 256
    在这里插入图片描述
    修改配置
    进入安装目录:cd /usr/local/openldap-2.4.44/
  5. 修改密码 slappassed
    在这里插入图片描述
  6. 修改slapd.conf
    在这里插入图片描述
    7 添加ldif文件配置组织,用户,条目
    1.1.3 openldap集群搭建
  7. mirrormode”的复制方法说明(主主模式)
    LDAP同步
    OpenLDAP的2.4引入了被称为“mirrormode”的复制方法,这使您可以使用自己已有的syncrepl协议同步多台服务器之间的数据。以前(<=2.3的OpenLDAP)只允许你做主从式的复制,其中slave是只读的,不能修改。显然,这存在一些局限性,如果master(或OpenLDAP-ish中的“provider”)死了,那么你的用户无法做任何修改,直到master恢复。使用MirrorMode,您可以创建一个“N-way Multi-Master”的拓扑结构,允许所有服务器进行读/写,并立即复制到其它机器。
    即使其中一台服务器死了,为了使用户能够持续访问LDAP,我们需要一种方法来保持数据包流动,并自动故障转移到辅助服务器。 Linux有一个叫做“Heartbeat”的包,具有这种功能。如果你熟悉Cisco的HSRP或开源的VRRP,它们的工作方式相同。服务器A被分配一个IP地址(例如10.0.0.1 ),服务器B被分配一个不同的地址(例如10.0.0.2 ) 。Heartbeat被配置以提供第三个IP地址( 10.0.0.3 ),将始终在两者之间保持可用。在master服务器上,以太网别名以虚拟IP地址创建。定期心跳( keep-alive包)被发送到其他服务器,表示“我还活着! ” 。如果这些消息消失(当服务器死机等) 时,辅助主机会注意到无法更新,并自动对自身创建一个类似的别名接口并分配虚拟IP地址。这种方法允许给你的客户端提供一台连接的主机,但是它实际上可在多个机器之间无缝切换。
    2.修改配置文件
    1在192.168.248.132这台机器上面slapd.conf的配置文件
    注意替换下文件里面

syncrepl rid=001
provider=ldap://192.168.248.139:389(这个是你对应的那台机器)
type=refreshAndPersist
retry=“5 5 300 +”
searchbase=“dc=example,dc=com”
attrs=",+"
#bindmethod=sasl
binddn=“cn=ldap1,ou=hosts,dc=example,dc=com”
1在192.168.248.139这台机器上面slapd.conf的配置文件
配置都一样 只要替换下
syncrepl rid=001
provider=ldap://192.168.248.132:389(这个是你对应的那台机器)
type=refreshAndPersist
retry=“5 5 300 +”
searchbase=“dc=example,dc=com”
attrs="
,+"
#bindmethod=sasl
binddn=“cn=ldap1,ou=hosts,dc=example,dc=com”
在2台机器上面分别启动openldap
在这里插入图片描述
集群配置基本完成测试下:
在这个工具下面一台服务器上添加一条数据 对应着另一台也会多一条
在这里插入图片描述
1.14 lvs+keepalived的搭建
1 lvs+keepalived说明(采用的dr模式有兴趣的可以采用下nat,tun模式)
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 用现在的观点来看就是个4层(传输层tcp/udp)的负责均衡器。 它是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
类似于LVS、Nginx、HAproxy的基于Linux的开源的负载均衡策略。
另一种负载均衡的方式是通过软件:比较常见的有LVS、Nginx、HAproxy等,其中LVS是建立在四层协议上面的,而另外Nginx和HAproxy是建立在七层协议之上的,下面分别介绍关于
Nginx的特点是:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx能支持http和Email,这样就在适用范围上面小很多;
8、不支持Session的保持、对Big request header的支持不是很好,另外默认的只有Round-robin和IP-hash两种负载均衡算法。
HAProxy的特点是:
1、HAProxy是工作在网络7层之上。
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡
2.lvs+keepalived 安装
Lvs1服务器 192.168.248.140
Lvs1服务器 192.168.248.141
虚拟ip 192.168.248.142
2台机器上操作都是一致的 只不过要修改下配置文件
我采用的是最简单安装模式(也可以用下载jar来安装)
安装ipvsadm keepalived
yum -y install ipvsadm keepalived
设置ipv4的ip为1
echo ‘net.ipv4.ip_forward = 1’ >> /etc/sysctl.conf
配置生效
sysctl –p
新建文件
touch /etc/sysconfig/ipvsadm
启用ipvsadm
systemctl start ipvsadm
开机启动ipvsadm
systemctl enable ipvsadm
剪切一个备份配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org
配置keepalived.conf
vi /etc/keepalived/keepalived.conf
配置文件简单说明:更多配置可以百度
! Configuration File for keepalived

global_defs {
#发生错误的时候发送邮件提醒
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#监控多个网段的实例那个配置我没加
vrrp_instance VI_1 {
state MASTER指定那个为master,另外一台为backup
interface ens33 设置实例绑定的网卡(这个不能错很重要)
virtual_router_id 51 #VPID标记
priority 100 优先级,高优先级竞选为master
advert_int 1 #检查间隔,默认1秒
authentication {
auth_type PASS#认证方式
auth_pass 1111#认证密码
}
virtual_ipaddress {
192.168.248.142 #设置虚拟vip
}
}
virtual_server 192.168.248.142 389{
delay_loop 6#健康检查时间间隔
lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #负载均衡转发规则NAT|DR|RUN
nat_mask 255.255.255.0#网关
persistence_timeout 50 #会话保持时间
protocol TCP#使用的协议

real_server 192.168.248.139 389 {
    weight 1	默认为1,0为失效
    HTTP_GET {
        connect_timeout 3连接超时时间
        nb_get_retry 3#重连次数
        delay_before_retry 3#重连间隔时间
		#connect_port 389 健康检查的端口的端口        }
}

real_server 192.168.248.132 389{
    weight 1
    HTTP_GET {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
}

}
systemctl start keepalived
systemctl enable keepalived
这个就安装好了:
执行这个命令
ipvsadm –ln
在这里插入图片描述
绑定虚拟ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
在这里插入图片描述
要去虚拟机里面去进行 ifdown ens33 断开网络
在进行ifup ens33 连接网络 开始生效
Ping 192.168.248.142
在这里插入图片描述
要去虚拟机里面去进行 ifdown ens33 断开网络
在进行ifup ens33 连接网络 开始生效
Ping 192.168.248.142
在这里插入图片描述
自己电脑访问不到这个ip 虚拟机可以访问 那么添加getway
ifconfig ens33:0 192.168.248.142 netmask 255.255.255.255
在这里插入图片描述
真正访问的服务器配置
绑定虚拟ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
在这里插入图片描述
客户端配置脚本 a.sh
新建脚本
touch 、etc/init-d/a.sh
在这里插入图片描述
Vim a.sh
在这里插入图片描述
VIP=192.168.248.142
RIP2=192.168.248.132
RIP1=192.168.248.139
/etc/rc.d/init.d/functions

case “$1” in
start)
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:389 -s rr
/sbin/ipvsadm -a -t $VIP:389 -r $RIP1:389 -g
/sbin/ipvsadm -a -t $VIP:389 -r $RIP2:389 -g
/sbin/ipvsadm
echo “RealServer Start OK”
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $VIP >/dev/null 2>&1
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce
echo “RealServer Stoped”
;;
*)
echo “Usage: $0 {start|stop}”
exit 1
esac

exit 0
启动配置脚本
Sh a.sh start
启动会报错说没有权限/etc/rc.d/init.d/functions
执行chrown 775 /etc/rc.d/init.d/functions
把应用都启动了使用
利用工具测试下:
工具是否能链接:
在这里插入图片描述
新加一条数据
在这里插入图片描述
139这台也会多条数据
在这里插入图片描述