如果转发请注明出处,谢谢
前言
由于设备有限,所以只能用自己的笔记本搭建环境,以下为搭建中遇到的问题和步骤,鸣谢给予帮助的三个朋友。文章由于是自己的理解总结,所有有错误之处欢迎大家指出。
本机配置:
系统: windows 7
内存: 12G
文档中的需要的安装包,请到 http://pan.baidu.com/s/1ntzPLBb 下载,下载码:58zf
一.硬件设备
虚拟机:VMware® Workstation 10.0.0 build-1295980
LVS: Red HatEnterprise Linux Server release 6.5 (Santiago)
DB1: CentOSrelease 6.4 (Final)
DB2: CentOSrelease 6.4 (Final)
这里安装虚拟机的步骤我就不复述了,在装好了三台虚拟机之后,先进行DB服务的安装,这个顺序没有规定,可以现装LVS。
二.安装DB服务器(mariadb+galera)
以下内容为网上找的参考,原出处为:http://634871.blog.51cto.com/624871/1350082?utm_source=tuicool,但其中有些问题,本文档中会对应做出修改
1. 环境描述
DB1_IP:192.168.5.132
DB2_IP:192.168.5.130
(如果不知道自己的IP,可用ip a查看)
2. 配置mariadb的yum源(以下内容两台服务器都需要同样的操作)
<1>. 先将要下载的源信息写入,执行命令: vim /etc/yum.repos.d/mariadb.repo
写入以下内容:
# yum源的内容如下:
[mariadb]
name = MariaDB
baseurl =http://yum.mariadb.org/5.5/rhel6-amd64
enabled = 1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
<2>. 编辑完文件,执行命令: yum makecache
(
yum makecache 是 将服务器上的软件包信息 现在本地缓存,以提高 搜索 安装软件的速度)
3. 安装 MariaDB-Galera-server galera MariaDB-client
执行命令:yum -y install MariaDB-Galera-server galeraMariaDB-client
注:由于下载的链接是国外的,速度很慢,会有下载失败报错的情况,如果出现该情况,请重新执行该命令,之后最后全部下载完成,下载完成后会自动安装,最后出现complete的结束语。
4. 编辑每台机器的hosts文件,添加如下内容
编辑每台机器的hosts文件,执行命令: vim /etc/hosts, 地址为搭建db服务器的地址,请修改成自己的IP。
192.168.5.132 node1
192.168.5.130 node2
# 启动测试一下,执行命令:/etc/init.d/mysql start
Starting MySQL.... SUCCESS!
如果有success表示成功启动,执行命令: chkconfigmysql on可以开机自动启动mysql。
5. 设置MariaDB的root密码,并做安全加固
<1>. 执行命令:/usr/bin/mysql_secure_installation,执行之后会询问让你设置数据库root密码,以及是否删除远程用户等信息,如果不懂的话,可以复制下来百度翻译下,对于数据库的影响不大。
<2>. # 登陆数据库,授权用于集群同步的用户和密码
执行命令: mysql -uroot–pkongzhong(用法为mysql –u 用户–p密码,注意密码与p之间没有空格)
mysql> GRANTUSAGE ON *.* to sst@'%' IDENTIFIED BY 'sstpass123';
mysql> GRANTALL PRIVILEGES on *.* to sst@'%';
mysql> FLUSHPRIVILEGES;
mysql> quit
<3>.创建并配置wsrep.cnf文件
[root@node1 /]# cp /usr/share/mysql/wsrep.cnf /etc/my.cnf.d/
[root@node1 /]# vim /etc/my.cnf.d/wsrep.cnf
# 只需要修改如下4行:
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.5.130:4567,192.168.5.132:4567"
wsrep_sst_auth=sst:sstpass123
wsrep_sst_method=rsync
6. 确认本机防火墙上开放了所需TCP 3306和TCP 4567的端口[也可以关闭防火墙]
<1. > 设置允许访问的端口
[root@node1 /]#iptables -A INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT
[root@node1/]# iptables -A INPUT -i eth0 -p tcp--dport 4567 -j ACCEPT
# 启动mariadb,查看3306和4567端口是否被监听
[root@client137~]# /etc/init.d/mysql restart
[root@client137~]# netstat -tulpn |grep -e 4567 -e 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 32363/mysqld
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 32363/mysqld
<2>. 如果执行命令/etc/init.d/mysqlrestart,显示数据库启动失败,请执行命令:vi /etc/sysconfig/selinux 修改为disabled
<3>. Linux下查看、关闭及开启防火墙命令:
1)永久性生效,重启后不会复原
开启: chkconfig iptables on 关闭: chkconfigiptables off
2)即时生效,重启后复原
开启: service iptables start 关闭: service iptablesstop
额外讲解:SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。Disabled就不用说了,permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用。Enforcing就是你违反了策略,你就无法继续操作下去。如果要修改成disabled,需要重启才能生效。
<4>. 如果还没有启动成功,那继续执行以下操作,执行命令: cd /var/lib/mysql , 进到mysql的目录,
将文件删除,删除 galera集群状态的缓存文件 mysql.sock就是连接数据库的socket文件 每次开启服务就会产生 但假如说服务停止了也在 就不正常 必须删了 再开服务 才对的
rm -f mysql.sock
rm -f galera.cache
<5>. 删除后,查看mysql数据库状态,杀掉启动的进程
service mysql status
pkill -9 mysqld
pkill -9 mysql
pkill -9 MariaDB
<6>. 设置防火墙
iptables –L
命令 -L, --list
说明 列出某规则链中的所有规则。
iptables –F
命令 -F, --flush
说明 删除某规则链(这里是INPUT规则链)中的所有规则。
service iptablessave
保存防火墙设置
service mysqlstart
如果还启动失败的话,启动数据库集群,在执行命令:
/etc/init.d/mysqlbootstrap
<6>. 服务启动成功后,在db1上建立数据库,db2查看,如果有同步表明设置成功。
有关mysql的命令:
mysql–u root –proot
建立数据库 createdatabase testdb;
查看数据库 showdatabases;
推荐用客户端Navicat工具
就此Mariadb+galera数据库集群搭建完毕
三. 搭建LVS(基于ipvsadm+keepalive)
1. IPVS安装
<1>.命令检查kernel是否已经支持LVS的ipvs模块:
执行命令:modprobe -l|grep ipvs
如果有类似上面的输出,表明系统内核已经默认支持了IPVS模块。接着就可以安装IPVS管理软件了。
<2>. 安装IPVS
tar zxvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make
make install
<3>.如果出现报错,检查环境:
ip_vs.h:15:29: error: netlink/netlink.h: Nosuch file or directory
ip_vs.h:16:31: error: netlink/genl/genl.h:No such file or directory
ip_vs.h:17:31: error: netlink/genl/ctrl.h:No such file or directory
………报错信息很多就不一一粘贴了
执行命令:
rpm -qa | greppopt
popt-1.13-7.el6.x86_64
popt-devel-1.13-7.el6.x86_64
rpm -qa | greplibnl
libnl-1.1-14.el6.x86_64
libnl-devel-1.1-14.el6.x86_64
执行这两条命令之后,会有对应的查询结果,我当时的环境没有popt-devel-1.13-7.el6.x86_64和libnl-devel-1.1-14.el6.x86_64,并且libnl的版本不对,因此重新下载对应的两个包,注意,devel的包的版本号一定要跟你自己的查询结果一样,否则还是会报错,安装时会告诉你需要依赖。如果你执行命令后,每个命令都有两个就没问题了,不用下载安装了。
<4>.重新进行make,还会出现错误,但是相比之前少了很多。
需要安装popt-static
popt-static-1.13-7.el6.x86_64.rpm
rpm -ivhpopt-static-1.13-7.el6.x86_64.rpm
安装完成后使用命令ipvsadm,检查安装是否成功。
2. Keepalive安装
1. tar -xvf keepalived-1.2.12.tar.gz
2. ./configure
3. make
4. make install
5. cp/usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
6. cp/usr/local/etc/sysconfig/keepalived /etc/sysconfig/
7. mkdir/etc/keepalived
8. cp/usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
9. cp/usr/local/sbin/keepalived /usr/sbin/
配置keepalived开机启动
chkconfigkeepalived on
3. 配置keepalive
<1>. vim/etc/keepalived/keepalived.conf
只需要修改部分内容:
router_id LVS_MASTER #备节点 修改为LVS_SLAVE,如果没有备机,可以不用修改
模块vrrp_instance VI_1中
virtual_ipaddress{
192.168.5.140 #该地址是你需要对外映射的虚地址,需要修改
}
例如:
修改了虚地址的话,下面的默认的虚地址模块对应也要修改,例如:
virtual_server 192.168.5.140 3306,完了将你自己的数据库实地址,配置在real_server里,其他没用的可以删除,文件默认有三个虚拟地址,如果用不到,可以删除。
<2>. 启动keepalive:
/etc/init.d/keepalived start
/etc/init.d/keepalived restart 设置成自启动:
vim /etc/rc.local //里面添加/etc/init.d/keepalived restart /etc/lvsdr.sh start
<3>. 查看,执行命令:ipvsadm –ln
<4>. 开启转发,执行命令:echo"1" >/proc/sys/net/ipv4/ip_forward,此语句,如果网卡重启,或者服务器重启,需要重新执行。
<5>. LVS端配置完成后,切换到DB服务器上,当前目录下,执行命令: vi lvs.sh(目录根据自己喜好可以随便,不一定是当前目录,文件名也可以自己定义),编辑以下内容:(该文件网盘中也有,切记把LVS_VIP地址改成LVS的虚地址)
#!/bin/bash
# description: Config realserver
LVS_VIP=192.168.5.140
/etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $LVS_VIP netmask255.255.255.255 broadcast $LVS_VIP
/sbin/route add -host $LVS_VIP devlo: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
echo "RealServer Vipadded:$LVS_VIP !"
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $LVS_VIP >/dev/null2>&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 Vipremoved:$LVS_VIP !"
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep$LVS_VIP`
isrothere=`netstat -rn | grep"lo:0" | grep $LVS_VIP`
if [ ! "$islothere" -o !"isrothere" ];
then # Either the route or the lo:0device # not found.
echo "Your LVS-DR VIP:$LVS_VIP isOFF,the LVS-Server can't find you,please reset your VIP!"
else
echo "Your LVS-DR VIP:$LVS_VIP isON,real server running!"
fi
;;
*)
echo "Usage: $0{start|stop|status}"
exit 1
esac
exit 0
<6>. 编辑保存后,执行命令: chmod +xlvs.sh 修改权限,完了根据文件目录,执行命令: /lvs.sh start (记得要跟全路径,用法有start stop status三种),成功启动后,显示如下:
执行命令:ip a,查看是否存在你LVS的虚地址,如果有了,就可以进行对lvs的虚地址发送请求了,赶紧快去试试吧。
四.相关问题和配置
1. 由于lvs.sh 需要每次重启后都要执行一遍,因此可以放在启动项里,具体操作如下:
执行命令: echo "/lvs.sh start" >> /etc/rc.local ,注意要lvs.sh全路径
2. 每次数据库服务器重启之后,也需要重新把数据库集群启动,执行:/etc/init.d/mysql bootstrap 即可
3. 每次lvs服务器启动,或者网卡重启,需要重新执行:echo "1" >/proc/sys/net/ipv4/ip_forward
4. 查看服务端口是否启动监听状态,可执行命令:netstat -ntlp