Keepalivaed +Nginx proxy 高可用架构方案与实施过程细节
1.开源产品介绍
1)CMS介绍
官方网站http://www.dedecms.com/,是一个网站应用系统构建平台,也是一个强大的网站内容管理系统,既可以用来构建复杂的体系的企业信息门户或者电子商务网站平台,也可以管理简单内容发布网站,能最大限度的去自由发挥网站的设计天才,更轻松的驾驭管理您的网站而不需要非常专业的网站技术,例如www.51.cto.com就是dedeCMS修改而成的。
2)discuz论坛介绍
官网:http://www.discuz.net
Crossday Discuz! Board (简称Discuz!)全球成熟度最高,覆盖率最大的论坛软件系统之一,10年8月23日腾讯收购它。
3)wordpress博客介绍
WordPress是一种PHP语言和MySQl数据库开发的开源,免费的blog(博客,网站)引xing,用户可以在支持PHP和mysql数据库的服务器上建立自己的Blog。
2.详细思路说明
1.架构图
2.数据流说明
1,用户通过INTERNET访问到web服务器www.king.com/blog.king.com/bbs.kingcom域名,
2,用户更新帖子,发布博客等,将数据写入到数据库(MySQL)
3,用户上传图片,将通过web服务器把数据上传到NFS存储上,而不是保留在web服务器本地
4,所有的数据最终都备份到备份的服务器上。
5,NFS存储兼职分发的服务器,会把需要的分发文件批量分发到其他网内节点服务器。
3.生产环境搭建需求
1,软件需求
Linux | CentOS 6.5 32bit/64bit |
Apache | 2.2.22 |
MySQL | 5.5 |
PHP | 5.3 |
2,ip地址需求
内网 | 外网 | |
web | ||
MySQl | ||
NFS | ||
rsync |
3,服务器需求
web | A | |
mysql | B | 1 |
NFS | C | |
rsync | D | |
分发服务器 | C |
4,架构需求
1,配置web服务器A,搭建LAMP环境,设置是哪个虚拟主机,虚拟主机分别是www.king.com,blog.king.com,bbs.kingcom。
2,虚拟主机站点目录结构要求
1 [root@king] # tree /data/ 2 /data/ 3 `--www 4 |--www 5 |--blog 6 |--bbs
3,搭建专用的数据库服务器B,存储web服务器上的cms,bbs,blog等动态数据,
4,搭建NFS共享共存服务器C,存储web服务器上的cms,bbs,blog资源数据,如图片,附件,头像等。(注意:NFS共享存储服务器只存放对用户来说上传的资源数据)
5,搭建备份服务器D,用来备份web,mysql,及NFS存储上的数据
6,NFS存储服务器上有写入的数据时,要实时将NFS上的图片,附件等同步到rsync服务的热备服务器D(当NFS存储宕机,可以手动切换,使得D服务器继续替代NFS提供服务)
7,web服务器每天晚上00点备份程序目录及访问日志,并推送到热备份服务器(Web服务器本地保留7天的数据,备份服务器上保留3个月数据副本)
8,MySQl服务器每天晚上00.30备份数据库,并推送到热备份服务器(数据库本地保留7天的数据,备份服务器上保留3个月数据副本)
9,NFS存储C兼职分发服务器,会把需要的分发的文件批量分发到其他网内节点,如;A.D
10,所有服务配置定时时间同步,这里会遭遇到问题,所有内网服务器(10.0.10.0/24)必须通过web server上网,当然你也可以配置 ntp server。
所用到技术: Linux ,apache,PHP ,ssh key ,NFS ,rsync,sersync,crontab,shell。
所用到的硬件配置
4.部署前系统检测
1,查看硬件产品名称
1 [root@sersync_server]# dmidecode|grep "Product Name" 2 Product Name :PowerEdge R710 3 Product Name :OVWNIR
2,查看CPU型号
1 [root@sercync_server ~]# grep name /proc/cpuinfo 2 modelname : Intel(R) Xeon(R) CPU E5606 @ 2.13GHZ
3,查看CPU个数
1 [root@sercync_server ~]# grep "physical id" /proc/cpuinfo 2 physical id : 1
4,查看内存信息
1 [root@sercync_server ~]# grep MemTotal /proc/meminfo 2 MemToal: 403356 kB
5,查看系统版本
1 [root@sercync_server ~]# cat /etc/redhat-release 2 CentOS release 6.5(Fina) 3 [root@sercync_server ~]#uname -r 4 2.6.18-308.el5 5 [root@sercync_server ~]#uname -m 6 x86_64
6,关闭防火墙
1 [root@sercync_server ~]# chkconfig iptables off 2 [root@sercync_server ~]# /etc/init.d/iptables stop 3 Flushing firewall reles [OK] 4 Setting chains to policy ACCEPT :filter [OK] 5 Unloading iptables modules [OK]
7,关闭selinux
1 [root@sercync_server ~]#sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 2 [root@sercync_server ~]# grep SELINUX /etc/selinux/config 3 #SELINUX= can take one of these three values; 4 # enforcing -SELinux security policy is enforced. 5 # permissive -SELinux prints warnings instead of enforcing. 6 # disabled -SELinux is fully disabled. 7 SELINUX=disabled 8 [root@sercync_server ~]#setenforce 0 9 [root@sercync_server ~]#getenforce 10 Permissive
8,添加一个用户
1 [root@sercync_server ~]#useradd king 2 [root@sercync_server ~]#id king 3 uid=500(king) gid=500(king) groups=500(king) context=root:system:unconfined:SystemLow-SystemHigh 4 [root@sercync_server ~]#
9,更改配置的yum源(aliyun)
1 [root@sercync_server ~]#cd /etc/yum.repos.d/ 2 [root@sercync_server ~]#/bin/mv CentOS-Base.repo CentOS-Base.repo.ori #这是对系统自带的源做个备份 3 [root@sercync_server ~]#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 4 [root@sercync_server ~]#
5.系统调优
1,清理开机自启动的服务
1 [root@sercync_server ~]#for service in 'chkconfig --list|grep 3:on'|sed 's/0:off.*//g';do chkconfig --level 3 $service off;done 2 [root@sercync_server ~]#for service in crond network syslog sshd;do chkconfig --level -$service on;done 3 [root@sercync_server ~]#chkconfig --list |grep 3:on 4 cond 0:off 1:off 3:on 4:on 5:on 6:off 5 network 0:off 1:off 3:on 4:on 5:on 6:off 6 sshd 0:off 1:off 3:on 4:on 5:on 6:off 7 syslog 0:off 1:off 3:on 4:on 5:on 6:off
2,更改ssh登陆配置
1 [root@sercync_server ~]#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori #更改配置前进行备份。 2 [root@sercync_server ~]#vim /etc/ssh/sshd_config 3 ####by king#2018-10-14## 4 Port 112 #ssh连接默认的端口,默认端口为22 5 PermitRootLogin no #禁止root远程登陆 6 PermitEmptyPasswords no #禁止空密码登陆 7 UseDNS no #不适用DNS 8 ####by king#2018-10-14##
用脚本来实现
1 [root@sercync_server ~]#\cp /etc/ssh/sshd_config /etc/ssh/sshd_config.`date+%Y-%m-%d_%H-%M-%S` 2 sed -i 's%#Port 22%Port 112%' /etc/ssh/sshd_config 3 sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config 4 sed -i 's%#PermitEmptyPasswordsyes%PermitEmptyPasswords no%' /etc/ssh/sshd_config 5 sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config
3,将king普通用户加入到sudo管理
1 [root@sercync_server ~]#visudo #相当于编辑/etc/sudoer 2 #User privilege specification 3 root ALL=(ALL)ALL 4 king ALL=(ALL)ALL #这样表示king可以拥有完全的系统管理权限,
4,修改中文显示
1 [root@sercync_server ~]#echo 'LANG="zh_CN.GB18030"'>/etc/sysconfig/il8n 2 source /etc/sysconfig/il8n #使修改的生效
5,服务器时间同步
1 [root@sercync_server ~]#echo '*/5* * * * /usr/sbin/ntpdatetime.windows.com>dev/null2>&1'>>/var/spool/cron/root
#相当于执行crontab -e 然后加入内容为*/5* * * * /usr/sbin/ntpdatetime.windows.com>dev/null2>&1退出保存
6,定时清理优化的任务
#find /var/spool/clientmqueue/ -type f -mtime +30/xargs rm -f
7,加大服务器文件描述符
1 [root@sercync_server ~]#echo'* - nofile 2048' >>/etc/security/limits.conf #注意这里需要重登陆才生效 2 [root@sercync_server ~]#tail -1 /etc/security/limits.conf 3 * - nofile 2048 4 [root@sercync_server ~]#limit -n 5 2048
8,简单的优化
1 [root@sercync_server ~]#cp /etc/sysctl.conf /etc/sysctl.conf.`data+%Y-%m-%d_%H-%M-%S` 2 [root@sercync_server ~]#cat >>/etc/sysctl.conf<<EOF 3 net.ipv4 tcp_timestamp =0 4 net.ipv4 tcp_synack_retries =2 5 net.ipv4 tcp_syn_retries =2 6 net.ipv4 tcp_mem =120000 120000 120000 7 net.ipv4 tcp_max_orphans =3276800 8 net.core.rmem_default =8388608 9 net.core.wmem_default =8388608 10 net.core.rmem_max=16777216 11 net.core.wmem_max=16777216 12 net.ipv4.tcp_rmem=4096 87380 16777216 13 net.ipv4.tcp_wmem=4096 65536 16777216 14 net.core.netdev_max_backlog = 30000 15 net.core.somaxconn = 32768 16 net.ipv4.tcp_syncookies = 1 17 net.ipv4.tcp_tw_reuse = 1 18 net.ipv4.tcp_tw_recycle = 1 19 net.ipv4.tcp_fin_timeout = 1 20 net.ipv4.tcp_keepalive_time = 1200 21 net.ipv4.tcp_max_syn_backlog = 65536 22 net.ipv4.ip_local_port_range = 1024 65536 23 EOF
6.系统安装
1,批量创建用户king{1..10}
[root@sercync_server ~]#echo king{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1 ; pass=$((RANDOM+1000)); echo "$pass"|passwd --stdin \1; echo -e "\1 \t `echo "$pass"`">>/tmp/king.log#g'|bash
2,安装MySQL
首先我们应该分析那台服务器需要安装mysql,Apache承担web服务,MySQL承担数据存储,所以这俩台服务器应该安装MySQl,安装MySQL:点我,注意,这里Apache只需要make install 就可以了。
3,配置rsync,ssh_key,expect
首席我们还是应该分析那台服务器需要安装rsync,NFS是分发服务器并兼职分发,所以我们应该在NFS服务器上安装rsync,安装ssh_key,这里我们是把公钥id_rsa.pub分发到你的Apache服务器,和MySQL服务器,和热备份服务器,因为ssh_key分发的时候会向你要yes ,和密码所以我们用expect来分发。
1 [root@rsync_server ~] yum install -y expect #安装expect
Keepalivaed +Nginx proxy Loading。。。待更新。。