集群架构和自签证书
Posted syy1757528181
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集群架构和自签证书相关的知识,希望对你有一定的参考价值。
环境准备
主机名 | 角色 | 外网IP | 内网IP | 安装服务 |
---|---|---|---|---|
lb01 | 负载均衡 | 10.0.0.51 | 172.16.1.51 | nginx |
web01 | web服务器 | 10.0.0.7 | 172.16.1.7 | nginx php nfs-utils wordpress wecenter phpmyadmin |
web02 | web服务器 | 10.0.0.8 | 172.16.1.8 | nginx php nfs-utils wordpress wecenter phpmyadmin |
web03 | web服务器 | 10.0.0.9 | 172.16.1.9 | nginx php nfs-utils wordpress wecenter phpmyadmin |
nfs | 共享存储 | 10.0.0.31 | 172.16.1.31 | nfs-utils sersync |
db01 | 数据库 | 10.0.0.51 | 172.16.1.51 | mariadb-server |
backup | 备份服务器 | 10.0.0.41 | 172.16.1.41 | rsync |
安装相关服务
1.将做好的rpm包使用rz命令上传
mkdir nginx_php && cd nginx_php && tar xf ../nginx_php.tar.gz
2.
代理机 负载均衡机 安装nginx
[root@lb01 ~]# yum -y localinstall nginx*
服务器安装nginx php nfs-utils
[root@web01 ~]# yum remove -y php-mysql-5.4 php php-fpm php-common && yum localinstall -y *.rpm
[root@web01 ~]# yum install -y nfs-utils
[root@web02 ~]# yum remove -y php-mysql-5.4 php php-fpm php-common && yum localinstall -y *.rpm
[root@web02 ~]# yum install -y nfs-utils
[root@web03 ~]# yum remove -y php-mysql-5.4 php php-fpm php-common && yum localinstall -y *.rpm
[root@web03 ~]# yum install -y nfs-utils
共享存储机安装nfs
[root@nfs ~]# yum install -y nfs-utils
数据库机安装mariadb
[root@db01 ~]# yum install -y mariadb-server
3.启动并加入开机自启动
[root@lb01 ~]# systemctl start nginx
[root@web01 ~]# systemctl start nginx php-fpm nfs (可以一起启动)
[root@web02 ~]# systemctl start nginx php-fpm nfs
[root@web03 ~]# systemctl start nginx php-fpm nfs
[root@nfs ~]# systemctl start nfs
[root@db01 ~]# systemctl start mariadb
[root@lb01 ~]# systemctl enable nginx
[root@web01 ~]# systemctl enable nginx php-fpm nfs (一个一个启动)
[root@web02 ~]# systemctl enable nginx php-fpm nfs
[root@web03 ~]# systemctl enable nginx php-fpm nfs
[root@nfs ~]# systemctl enable nfs
[root@db01 ~]# systemctl enable mariadb
4.创建www用户
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
5.web01 web02修改nginx和PHP的默认用户
sed -i ‘/^user/c user www;‘ /etc/nginx/nginx.conf
sed -i ‘/^user/c user = www‘ /etc/php-fpm.d/www.conf
sed -i ‘/^group/c group = www‘ /etc/php-fpm.d/www.conf
6.重载nginx配置文件
nginx -sreload && systemctl restart php-fpm.service
web服务器安装wordpress 和WeCenter和phpmyadmin服务
需要先做好数据库
部署web01
服务器web01 web02执行以下操作,server是通用的
1.手写server语句‘模板‘
vim /etc/nginx/conf.d/wp.conf
server {
listen 80;
server_name cs.wp.com;
root /code/wordpress;
index info.php index.php;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2.重载nginx服务
nginx -sreload
3.下载安装包
wp: mkdir /code -p && cd /code && wget http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz
zh: mkdir /code -p && cd /code && wget http://test.driverzeng.com/Nginx_Code/WeCenter_3-2-1.zip
pm: mkdir /code -p && cd /code && wget http://test.driverzeng.com/Nginx_Code/phpMyAdmin-4.9.0.1-all-languages.zip
4.安装服务
tar xf wordpress-5.0.3-zh_CN.tar.gz && rm -rf wordpress-5.0.3-zh_CN.tar.gz
zh: unzip WeCenter_3-2-1.zip && rm -rf WeCenter_3-2-1.zip __MACOSX/ && mv WeCenter_3-2-1 WeCenter
pm: : unzip phpMyAdmin-4.9.0.1-all-languages.zip && rm -rf phpMyAdmin-4.9.0.1-all-languages.zip && mv phpMyAdmin-4.9.0.1-all-languages pm
5.授权
chown -R www.www /code
部署数据库
1.给root一个密码
[root@db01 ~]# mysqladmin -uroot password ‘1‘
2.连接数据库
[root@db01 ~]# mysql -uroot -p1
3.创建用户
MariaDB [(none)]> grant all on *.* to ty@‘%‘ identified by ‘1‘;
4.创建数据库
MariaDB [(none)]> create database wp;
MariaDB [(none)]> create database zh;
5.重启数据库
systemctl restart mariadb
#phpmyadmin只是管理数据库的工具,不需要创建数据库
phpmyadmin可以直接连接数据库,不需要外网(???)
navicat需要连接外网才能连接数据库
#域名解析
10.0.0.7 cs.wp.com
#浏览器访问
cs.wp.com
部署负载均衡
可以做upstream连接池,减少.conf中的重复
负载均衡机lb01 执行以下操作
1.手写server语句
vim /etc/nginx/conf.d/wp_zh.conf
upstream backend {
server 10.0.0.7;
server 10.0.0.8;
server 10.0.0.9;
}
server {
listen 80;
server_name cs.wp.com cs.zh.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name cs.wp.com cs.zh.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://backend;
proxy_set_header Host $http_host;
include proxy_params;
}
}
2.写入include文件
vim /etc/nginx/proxy_params
# 客户端的请求头部信息,带着域名来找我,我也带着域名去找下一级(代理机或者代理服务器)
proxy_set_header Host $host;
# 显示客户端的真实ip(和代理的所有IP)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 60s;
#nginx代理等待后端服务器的响应时间
proxy_read_timeout 60s;
#后端服务器数据回传给nginx代理超时时间
proxy_send_timeout 60s;
#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
proxy_buffering on;
#设置nginx代理保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffer_size 8k;
#proxy_buffers 缓冲区
proxy_buffers 8 4k;
#proxy_buffers 8 8k;
#使用http 1.1协议版本
proxy_http_version 1.1;
#错误页面重定向
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
3.告诉PHP,与lb交流使用https协议(#web部署)
echo ‘fastcgi_param https on;‘ >> /etc/nginx/fastcgi_params
4.重载nginx配置文件
nginx -sreload
生成证书
把证书部署在lb
#创建存放ssl证书的路径,位置随意
[root@web03 ~]# mkdir -p /etc/nginx/ssl_key_zh && cd /etc/nginx/ssl_key_wp
[root@web03 ssl_key]# openssl genrsa -idea -out $(date +%Y%m%d).key 2048
[root@web03 ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout /etc/nginx/ssl_key_zh/$(date +%Y%m%d).key -out /etc/nginx/ssl_key_zh/$(date +%Y%m%d).crt
域名解析
10.0.0.5 cs.wp.com cs.zh.com cs.pm.com
#浏览器访问,建立wp zh pm与数据库的连接
cs.wp.com
cs.zh.com
cs.pm.com
部署web02,web03
1.web01打包安装过的服务
cd / && tar zcf code_conf.tgz code etc/nginx/conf.d
2.使用scp或者rsync传过去
rsync -avz code_conf.tgz 10.0.0.8:/
rsync -avz code_conf.tgz 10.0.0.9:/
3.web02等服务器解压
cd / && tar xf code_conf.tgz
cd / && tar xf code_conf.tgz
4.重载nginx配置文件#
nginx -sreload
nginx -sreload
部署nfs服务端和客户端
先做好web01,再纵向拷贝,避免出现重复注册数据表
# 1.编辑nfs配置文件
[root@nfs ~]# vim /etc/exports
/wp_data 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
/zh_data 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
# 2.创建共享目录
[root@nfs ~]# mkdir /wp_data /zh_data
# 3.没有上传过图片,直接创建uploads目录,上传过图片,先把数据拷贝到nfs中
[root@web01 ~]# mkdir /code/wordpress/wp-content/uploads -p
[root@web01 ~]# mkdir /code/WeCenter/uploads/ -p
#为了使用rsync,授权(空目录报错不用管)
chmod -R 777 /code
#给创建的目录授权
chown -R www.www /code
[root@web01 ~]# rsync -avz /code/wordpress/wp-content/uploads/* root@172.16.1.31:/wp_data
[root@web01 ~]# rsync -avz /code/WeCenter/uploads/* root@172.16.1.31:/wp_data
########## 先登录导入数据库, 再rsync服务和配置文件过去(部署web02),因为wordpress不能用相同的数据库注册######
# 5.授权
[root@nfs ~]# chown -R www.www /wp_data/ /zh_data/
# 6.挂载(挂载最好放最后)
[root@web01 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads/
[root@web02 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads/
[root@web03 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads/
[root@web01 ~]# mount -t nfs 172.16.1.31:/zh_data /code/WeCenter/uploads/
[root@web02 ~]# mount -t nfs 172.16.1.31:/zh_data /code/WeCenter/uploads/
[root@web03 ~]# mount -t nfs 172.16.1.31:/zh_data /code/WeCenter/uploads/
umount /code/wordpress/wp-content/uploads
umount /code/WeCenter/uploads
NFS服务器部署sersync
# 0.安装sersync的依赖包
[root@nfs ~]# yum install -y rsync inotify-tools
# 1.下载sersync
[root@nfs ~]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
# 2.解压sersync
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
# 3.移动并改名
[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync
# 4.修改配置文件
[root@nfs ~]# vim /usr/local/sersync/confxml.xml
<!-- #修改后的配置文件 -->
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*).svn"></exclude>
<exclude expression="(.*).gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify> # 1.全部改成true
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
<!-- #客户端需要监控的目录 -->
<localpath watch="/wp_date"> #2. 改成nfs服务端要推送的那个目录
<!-- rsync服务端的IP 和 name:模块 -->
<remote ip="10.0.0.41" name="backupmk"/> #3. 备份服务器的外网IP和模块名
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<!-- rsync命令执行的参数 -->
<commonParams params="-az"/> # 4.改成 -az
<!-- #rsync认证start="true" users="rsync指定的匿名用户" passwordfile="指定一个密码文件的位置权限必须600" --> #5.下行的false改成true,匿名用户bck,密码文件
<auth start="true" users="bck" passwordfile="/etc/rsync.passwd"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/> #不使用ssh通道(类似于rsync的daemon模式),不使用874端口,不设置超时时间
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*).php"/>
<include expression="(.*).sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
# 5.创建客户端的密码文件,只写密码,不需要指定虚拟用户
[root@nfs /usr/local/sersync]# echo 123 > /etc/rsync.passwd
# 6.授权密码文件权限为600
[root@nfs ~]# chmod 600 /etc/rsync.passwd
# 7.启动服务
[root@nfs ~]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml
export PATH="/usr/local/sersync/sersync2:$PATH"
rsync服务器部署rsync
1.rsync服务器下载rsync
[root@web01 ~]# yum install -y rsync
2.修改配置文件
[root@web01 ~]# vim /etc/rsyncd.conf #先删除,再拷贝
#################################### 服务相关配置 ###########################
uid = www
#指定rsync进程启动的用户(打工的),和传送文件的用户---------useradd
gid = www
#指定rsync进程启动的组
port = 873
#指定rsync使用的监听端口(默认873端口,可以改)
fake super = yes
#无需让rsync以root身份运行,允许接收文件的 完整属性(属主属组不变)
use chroot = no
#禁锢指定的目录(只能推到指定的目录,不紧固的话随便推)
max connections = 200
#最大连接数(同时连接的主机数,减少服务端负载)
timeout = 600
#超时时间
ignore errors
#忽略报错
read only = false
#不只读(可读可写)
list = false
#不允许别人查看模块名
#################################### 命令相关配置 ###########################
auth users = bck
#传输文件的用户(相当于密码,没有实际意义),客户端认证1
secrets file = /etc/rsync.passwd
#传输用户文件的密码文件,vim或echo/600,客户端认证2
log file = /var/log/rsyncd.log
#日志文件,使用了rsync之后才会生成
[backupmk]
#模块名,可以随便改,小心大写字母,空格,数字,多模块对应多主机(随便推?),客户端认证3
comment = welcome to oldboyedu backup!
#注释(废物)
path = /backup
#备份的目录-------mkdir/权限属主属组,,客户端认证4
3.根据配置文件的内容,创建出来需要的用户,目录,密码文件
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M #配置文件指定了www用户
[root@web01 ~]# mkdir /backup
[root@web01 ~]# chown www.www /backup/ #配置文件指定了rsync用户
[root@web01 ~]# echo bck:123 >/etc/rsync.passwd (虚拟用户名:密码,必须要做)
#修改传输文件的密码文件的权限
[root@web01 ~]# chmod 600 /etc/rsync.passwd
4.启动服务,并且加入开机自启
[root@web01 ~]# systemctl enable rsyncd
[root@web01 ~]# systemctl start rsyncd
以上是关于集群架构和自签证书的主要内容,如果未能解决你的问题,请参考以下文章