期中架构项目
一、 项目背景
随着互联网的发展,互联网规模越来越大、服务的架构越来越复杂多样,对运维工程师的需求也是会越来越急迫,对人正在从事或者即将从事运维行业的人们来说,是一个很好的消息。
自然而然地运维工程师需求量也会很大,而且是随着运维工作的积累,越来越值钱。一个优秀的运维工程师,有强烈的责任心和主动性,对自己的所负责工作有owner意识,并且能自我驱动不断学习与成长。
而且能够承担较大工作压力,有独立较强的分析解决问题的能力。在工作当中胆大心细,并且还要具备探索创新的精神。目前所有岗位要求,都要会精通shell/Python/Perl等至少其中1种语言,并且精通Linux命令。
所以说,这就是运维行业的优势,我们还等什么呢?
二、架构
http://processon.com/diagraming/605ade737d9c08555e528b70
三、相关的实现工具
主机 | 内网IP | 外网IP | 项目与服务 |
---|---|---|---|
web01 | 172.16.1.7 | textpattern,decmsv6 | |
web02 | 172.16.1.8 | ||
web03 | 172.16.1.9 | ||
backup | 172.16.1.41 | rsync备份服务器 | |
nfs | 172.16.1.31 | nfs、sersync实时共享服务器 | |
lb01 | 172.16.1.5 | 负载均衡,keepalived,cacahe缓存 | |
lb02 | 172.16.1.6 | ||
db01 | 172.16.1.51 | 数据库管理,redis | |
prometheus | 172.16.1.71 | 192.168.15.71 | 普罗米修斯监控 |
openvpn | 172.16.1.125 | OPENVPN内部共享数据 |
四、实现的效果
五、优化内容
1、时间服务器
2、除了基础的备份还需要备份配置文件,脚本文件,定时任务等等。
3、数据库的读写分离,以及负载均衡调度。
4、授权目录或文件权最小化原则。
5、同步教据需要限速,提高用户体验。
6、加速缓存Php 、mysql ,残小后端压力。
7、防劫持使用https加密方式。
8、Nginz. 、php细部优化
9、nfs单台故障用ceph代替
10、横向扩展服务器
项目设计:
通过ansible一键部署DedeCMSV6、textpattern项目,首先我们都是通过openvpn实现内部机器共享上网,其中所用到的服务有基础的LNMP架构,随web服务端是数据增大,其web端承受的压力势必增加,抗容灾压力也大,所以我们做了一个负载均衡+keepalived的架构。
所有的数据都会放在数据库里,向后可以做数据库的主从复制。(MAH高可用)
一些重要数据我们需要保存,所以又增加了nfs共享数据,实现动静分离,数据共享,sersync+rsync实时备份实现了全网数据共享,然后通过prometheus监控数据与状态。
六、剧本编写
1.前言
# 1.免密
root@openvpn ~]# ssh-keygen
[root@openvpn ~]# cat ssh-jump.sh
#!/bin/
for i in 'web01' 'web02' 'web03' 'lb01' 'lb02' 'db01' 'nfs' 'backup' 'prometheus'
do
expect -c "
spawn ssh-copy-id -i root@$i
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password\" {send \"123\r\";exp_continue}
}
"
done
# 2.配置本地hosts
[root@m01 roles]# vim /etc/hosts
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
172.16.1.31 nfs
172.16.1.41 backup
172.16.1.51 db01
172.16.1.71 prometheus
[root@openvpn ~]# cat hosts.sh
#!/bin/
for i in 'web01' 'web02' 'web03' 'lb01' 'lb02' 'db01' 'nfs' 'backup' 'prometheus'
do
scp -r /etc/hosts root@$i:/etc/hosts
done
# 3.分别执行脚本
[root@openvpn ~]# ./hosts.sh
[root@openvpn ~]# ./ssh-jump.sh
2.配置主机清单
[root@openvpn ~]# cat /etc/ansible/hosts
[web_group]
web01
web02
web03
[nfs_group]
nfs
[slb]
lb01
lb02
[db]
db01
[backup_group]
backup
[prometheus_group]
prometheus ansible_ssh_pass='123'
[rmon_group:children]
web_group
slb
3.创建所有目录
[root@openvpn project]# mkdir /project/ #剧本存放的目录
[root@openvpn project]# mkdir /project/roles
[root@openvpn project]# touch /project/site.yml # lnmp目录
[root@openvpn project]# touch /project/rmon.yml # 监控目录
[root@openvpn project]# ll
total 4
drwxr-xr-x 15 root root 187 Jun 4 10:18 roles
-rw-r--r-- 1 root root 534 Jun 4 11:31 site.yml
-rw-r--r-- 1 root root 365 Jun 4 21:57 site.yml
[root@m01 roles]# ansible-galaxy init nginx # 依次创建以下目录
- Role nginx was created successfully
[root@m01 roles]# ll
drwxr-xr-x 10 root root 4096 May 26 23:11 base
drwxr-xr-x 10 root root 4096 Jun 2 18:08 blog
drwxr-xr-x 10 root root 4096 Jun 3 20:45 database
drwxr-xr-x 10 root root 4096 Jun 2 21:24 keepalived
drwxr-xr-x 10 root root 4096 May 25 23:56 mysqld
drwxr-xr-x 10 root root 4096 Jun 3 20:36 nfs
drwxr-xr-x 10 root root 4096 May 27 00:21 nginx
drwxr-xr-x 10 root root 4096 May 25 23:56 php
drwxr-xr-x 10 root root 4096 Jun 4 09:14 prometheus
drwxr-xr-x 10 root root 4096 Jun 4 21:13 prometheus-db
drwxr-xr-x 10 root root 4096 Jun 4 17:39 prometheus-web
drwxr-xr-x 10 root root 4096 May 29 15:53 rsync
drwxr-xr-x 10 root root 4096 May 27 21:44 slb
drwxr-xr-x 10 root root 4096 Jun 3 21:34 web-nfs
4.剧本依次编写
一、优化部分
# 剧本准备文件
[root@m01 files]# pwd
/project/roles/base/files
[root@m01 files]# ll
total 12
-rw-r--r-- 1 root root 2523 May 26 23:13 CentOS-Base.repo
-rw-r--r-- 1 root root 664 May 26 23:13 epel.repo
-rw-r--r-- 1 root root 473 May 26 23:13 sysctl.conf
[root@m01 files]# cat sysctl.conf # 内核优化
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_forward = 1
# 优化剧本编写
[root@openvpn tasks]# cat ../defaults/main.yml # 变量
USER_NAME: www
GROUP_NAME: www
UID: 666
GID: 666
[root@openvpn base]# cat tasks/main.yml
- name: stop selinux
selinux:
state: disabled
- name: stop firewalld
systemd:
name: firewalld
state: stopped
- name: config yum CentOS.repo
copy:
src: CentOS-Base.repo
dest: /etc/yum.repos.d/
- name: config yum epel.repo
copy:
src: epel.repo
dest: /etc/yum.repos.d/
- name: config sysctl.conf
copy:
src: sysctl.conf
dest: /etc/
notify: restart_sysctl
- name: create www group
group:
name: "{
{ USER_NAME }}"
gid: "{
{ UID }}"
- name: create www user
user:
name: "{
{ USER_NAME }}"
group: "{
{ GROUP_NAME }}"
uid: "{
{ UID}}"
- name: install ntpdate server
yum:
name: ntpdate
state: present
- name: ntpdate.aliyun.com
shell: "ntpdate ntp.aliyun.com"
二、web集群安装nginx和php
# web_group机器安装nginx准备文件
[root@m01 files]# pwd
/project/roles/nginx/files
[root@m01 files]# ll
total 8
-rw-r--r-- 1 root root 720 May 26 23:31 nginx.conf # 改成 user=www
-rw-r--r-- 1 root root 378 May 26 23:29 nginx.repo
# web_group机器安装nginx剧本编写
[root@openvpn ngin