2019独角兽企业重金招聘Python工程师标准>>>
嗯这是篇有故事的博文回想起来历历在目
此次项目参与人数共计五人我荣幸担任组长项目顺利完成真心感谢大家
先分享一下九台机器项目构架图(后期有修改):
简单说明一下其中问题:
负载均衡keepalived配置文件第一次出现nginx配置错误(属于组员未理解配置需求)导致心跳测试失败
两台web服务器配置php编译时建议安装而不启动mysql原因配置时就心明眼亮啦
mysql单独服务器来跑,在配置完成后如何连接到nginx上,当然是在配置zrlog等网站配置时直接使用ip地址(数据库地址)就可以了
nfs这里问题就大了,nfs提供的是共享存储所以两台web上的数据可以直接从这里分享过去,就意味着不需要每台机器上重复安装,而是将需要的目录共享即可
准备工作:
主机名 | ip地址 | 角色 |
xm01 | 192.168.14.137 | Master LVS + Keepalived |
xm02 | 192.168.14.138 | Slave LVS + Keepalived |
vip | 192.168.14.14 | vip |
xm03 | 192.168.14.139 | Nginx server1+tomcat+jdk |
xm04 | 192.168.14.140 | Nginx server2+tomcat+jdk |
xm05 | 192.168.14.141 | zabbix |
xm06 | 192.168.14.143 | mysql master |
xm07 | 192.168.14.144 | mysql slave |
xm08 | 192.168.14.145 | NFS共享存储服务器 |
xm09 | 192.168.14.146 | NFS热备服务器 |
开干,首先关闭所有的firewalld(centos7)和selinux(iptables)
# systemctl stop firewalld# systemctl disable firewalld# iptables -F# setenforce 0 #临时关闭# vi /etc/selinux/config selinux=disabled reboot #永久关闭
xm01(Master LVS + Keepalived)192.168.14.137
[root@zhdy-01 ~]# yum install -y keepalived[root@zhdy-01 ~]# vim /etc/keepalived/keepalived.confvrrp_instance VI_1 {#备用服务器上为 BACKUPstate MASTER#绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下interface ens33virtual_router_id 51#备用服务器上为90priority 100advert_int 1authentication {auth_type PASSauth_pass zhangduanya}virtual_ipaddress {192.168.14.14}
}
virtual_server 192.168.14.14 80 {#(每隔10秒查询realserver状态)delay_loop 10#(lvs 算法)lb_algo wlc#(DR模式)lb_kind DR#(同一IP的连接60秒内被分配到同一台realserver)persistence_timeout 0#(用TCP协议检查realserver状态)protocol TCPreal_server 192.168.14.137 80 {#(权重)weight 100TCP_CHECK {#(10秒无响应超时)connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}real_server 192.168.14.138 80 {weight 100TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}
}[root@zhdy-01 ~]# echo 1 >/proc/sys/net/ipv4/ip_forward #配置完keepalived后,需要开启端口转发[root@zhdy-01 ~]# systemctl start keepalived
xm02(Slave LVS + Keepalived)192.168.14.138
[root@zhdy-01 ~]# yum install -y keepalived[root@zhdy-01 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 {#备用服务器上为 BACKUPstate BACKUP#绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下interface ens33virtual_router_id 51#备用服务器上为90priority 90advert_int 1authentication {auth_type PASSauth_pass zhangduanya}virtual_ipaddress {192.168.14.14}
}
virtual_server 192.168.14.14 80 {#(每隔10秒查询realserver状态)delay_loop 10#(lvs 算法)lb_algo wlc#(DR模式)lb_kind DR#(同一IP的连接60秒内被分配到同一台realserver)persistence_timeout 0#(用TCP协议检查realserver状态)protocol TCPreal_server 192.168.14.137 80 {#(权重)weight 100TCP_CHECK {#(10秒无响应超时)connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}real_server 192.168.14.138 80 {weight 100TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}
}[root@zhdy-01 ~]# echo 1 >/proc/sys/net/ipv4/ip_forward #配置完keepalived后,需要开启端口转发[root@zhdy-01 ~]# systemctl start keepalived
xm03(Nginx server1+tomcat+jdk)192.168.14.139
#把vip绑定到lo上
vim /usr/local/sbin/lvs_rs.sh#! /bin/bash
vip=192.168.14.14
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
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两台Real server分别执行脚本
# sh /usr/local/sbin/lvs_rs.sh
查看一下两台real server的router -n
# route -n
查看IP是否已经绑在lo卡上
# ip addr#安装nginx+php+mysql(编译使用)+tomcat+jdk
xm04(Nginx server1+tomcat+jdk)192.168.14.140
#把vip绑定到lo上
vim /usr/local/sbin/lvs_rs.sh#! /bin/bash
vip=192.168.14.14
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
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两台Real server分别执行脚本
# sh /usr/local/sbin/lvs_rs.sh
查看一下两台real server的router -n
# route -n
查看IP是否已经绑在lo卡上
# ip addr#安装nginx+php+mysql(编译使用)+tomcat+jdk
xm05(zabbix)192.168.14.141
没错zabbx需要注意的点来了,分为服务端和客户端,此处的客户端为mysql服务器和两个web服务器
然后安装到位后个性化的监控脚本这里不展示了,留下一篇来专门回忆
#下载yum源
[root@yb1 ~]# cd /usr/local/src
[root@yb1 src]#
wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
#安装yum源
[root@yb1 src]# rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
2.3 安装zabbix及其组件注意一定要安装好mysql(此过程会安装php和http服务)
[root@yb1 src]# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql#安装mysql
#下载yum源
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
#安装yum源
rpm -ivh mysql-community-release-el7-5.noarch.rpm
#安装mysql
yum install -y mysql mysql-server mysql-devel#配置mysql
#修改配置文件
vi /etc/my.cnf
#在[mysqld]下添加:
character_set_server = utf8
#重启mysql
systemctl restart mysql
#登入mysql,配置
mysql -uroot
create database zabbix character set utf8; //创建zabbix库,并设置字符集为utf-8
grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'zabbixpasswd'; //创建zabbix用户并设置密码,并登出mysql
#导入zabbix数据库
cd /usr/share/doc/zabbix-server-mysql-3.2.7
gzip -d create.sql.gz
mysql -uroot zabbix < create.sql //将数据和结构导入zabbix数据库中#配置zabbix
vim /etc/zabbix/zabbix_server.conf
DBHost=127.0.0.1
#此处写zabbix所在机器的IP(生产环境中zabbix可能单独使用一天机器)
#该IP应该和数据库授权时指定的IP一致
DBName=zabbix
DBUser=zabbix
DBPassword=zabbixpasswd#web界面配置
#放行80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#浏览器访问并配置
http://192.168.14.141/zabbix
下面整理客户端配置
#环境
zabbixagent:192.168.14.139 web服务器
zabbixagent:192.168.14.140 web服务器
zabbixagent:192.168.14.143 mysql服务器主
zabbixagent:192.168.14.144 mysql服务器从#zabbixagent安装
#下载yum源
[root@yb1 ~]# cd /usr/local/src
[root@yb1 src]# wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
#安装yum源
[root@yb1 src]# rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
#安装zabbix及其组件注意一定要安装好mysql(此过程会安装php和http服务)
[root@yb1 src]# yum install -y zabbix-agent #配置zabbix-agent
vim /etc/zabbix/zabbix_agentd.conf
#修改如下配置
Server=127.0.0.1修改为Server=192.168.14.141 //定义服务端的ip(被动模式)
ServerActive=127.0.0.1修改为ServerActive=192.168.14.141 //定义服务端的ip(主动模式)
Hostname=Zabbix server修改为Hostname=zabbix-web //这是自定义的主机名,一会还需要在web界面下设置同样的主机名
#启动zabbix客户端服务
systemctl start zabbix-agent
#加入开机启动
systemctl enable zabbix-agent#到这一步下来就是服务端的web端监控配置了,按照具体的的个性化需求配置
xm06(mysql主)192.168.14.143
xm07(mysql从)192.168.14.144
之前有总结,疑问直接摆上来,如果说mysql安装在一台独立的server,如何连接?之前都是安装在一台,如果分离那就直接使用ip地址喽(数据库主机)
这里针对zrlog来设置数据库,因为一个web上装了zrlog、discuz、WordPress三个服务,每个都要针对其设置数据库和权限
这里有个mysql+DRBD还没搞清楚让人很焦虑
xm08(NFS共享存储服务器)192.168.14.145
恩这里成短板了,也是谈问题安装不说了,nfs为什么出现,除了把相同的图片这种内容放到这台服务器上共享出去,还有个关键的地方,竟然被我忽视了,既然可以共享目录,那么zrlog和discuz这些的数据文件夹还有安装文件夹直接放到nfs上直接共享挂载,就不需要重复安装了也保证了负载均衡后数据的同步,其实同步是最关键的,第一次被分到web1上写下了一篇文章,然后数据库配置有问题就会导致下次登录被分配到web2上消失了,哈哈这可怎么行,所以就把这些全部共享出去,其他的还没想到,后面添加吧
xm09(NFS热备服务器)192.168.14.146
rsync+inotify实时同步备份数据,备份的是全构架中需要提供的所有数据,除了zabbix是自己的数据库为了安全考虑
先分享一篇文章:inotify+rsync实现实时同步部署
就先到这里了明天继续,哦对了马上过年啦,加油哈刚跟朋友聊天才明白自己的想法坚持就好