架构源于实践(基础框架搭建篇)

越是迷茫的时候,就越要去学习

本文是原创持续连载发布,这篇是SpringMVC + dubbo +zookeeper + oracle 单机版初级架构,这是基本系统雏形。以下文章顺序是按本人实施顺序来的。本人会尽可能不断去完善细节点,提高系统可行性及实用性。从前端的选择、系统中单点问题、发布及部署、数据缓存及数据库优化等问题着手考虑。如有文中有书写或部署问题,请留言指导修正,互相交流,共同进步,本人QQ:417213902。

本文系统架构图


image.png
安装软件 版本
linux虚拟机 CentOS-6.5-x86_64-bin-DVD1.iso

tomcat | apache-tomcat-8.5.23.tar.gz
zookeeper | zookeeper-3.4.10.tar.gz
oracle | linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
nginx | nginx/1.12.2

本人gitbub地址(含版本1.0的code 及 software)
https://github.com/huang7230468/ArchModel_1

一、项目运行环境安装

1.1 java运行环境

1.1.1 JDK1.8安装

  • 第一步,上传,解压
    # tar –zxvf jdk-8u112-linux-x64.tar.gz
  • 第二步,修改环境变量,在文末增加以下内容,保存生效
    # vi /etc/profile
JAVA_HOME=/opt/soft/jdk1.8.0_112
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EXPORT JAVA_HOME
EXPORT PATH
EXPORT CLASSPATH

# source /etc/profile

  • 第三步,测试
    # java -version
image.png

1.2 项目容器

1.2.1 tomcat8安装

  • 第一步,上传,解压
    # tar –zxvf apache-tomcat-8.5.23.tar.gz
  • 第二步,测试
    # cd /opt/soft/apache-tomcat-8.5.23/bin
    # sh startup.sh
    # ps -ef | grep tomcat
    image.png

    启动成功,访问http://www.192.168.1.110:8080/
    若访问不通,则尝试检查服务器的防火墙
    # service iptables status

1.3 zookeeper分布式应用程序协调服务

1.3.1 zookeeper 安装

  • 第一步,上传,解压
    # tar –zxvf zookeeper-3.4.10.tar.gz
  • 第二步,修改配置文件,复制一份zoo_sample.cfg,同时命名为zoo.cfg
    # cd /opt/soft/zookeeper-3.4.10/conf
    # cp zoo_sample.cfg zoo.cfg 配置文件详解,请查阅相关文档
  • 第三步,启动
    # cd /opt/soft/zookeeper-3.4.10/bin
    # sh zkServer.sh start
    # ps -ef | grep zookeeper
image.png

表示成功

image.png

若后期出现这个问题,请到dataDir (zoo.cfg)中将 进程文件删除就好了,出现这个问题是因为上一次非正常关闭程序

二、数据库--Oracle 模块

2.1 Oracle静默安装

  • 第一步,创建所需的操作系统组和用户
    # groupadd oinstall
    # groupadd dba
    # useradd -g oinstall -G dba oracle
    # passwd oracle
  • 第二步,修改Linux服务器内核参数
    在/sbin/sysctl.conf 文件中,使用文本编辑器或vi命令增加或修改以下参数

    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = 2097152
    kernel.shmmax = 536870912
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 9000 65500
    net.core.rmem_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048576

修改后,使设置生效
# /sbin/sysctl –p

若出现报错 则执行以下命令 </br>
# modprobe bridge // 加载bridge模块
# lsmod | grep bridge //查看模块加载

  • 第三步,修改系统用户限制
    在/etc/security/limits.conf 文件中,使用文本编辑器或vi命令增加或修改以下参数
    oracle soft nproc 2047
    oracle hard nproc 16384
    oracle soft nofile 1024
    oracle hard nofile 65536
    oracle soft stack 10240

在/etc/pam.d/login 文件中,使用文本编辑器或vi命令增加或修改以下内容

    session required /lib/security/pam_limits.so
    session required pam_limits.so

在/etc/profile 文件中,使用文本编辑器或vi命令增加或修改以下内容

    if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
    else
    ulimit -u 16384 -n 65536
    fi
    fi

使设置生效
# source /etc/profile

  • 第四步,创建安装目录(目录可按需修改)
    # mkdir -p /u01/app/
    # chown -R oracle:oinstall /u01
    # chown -R oracle:oinstall /u01/app/
    # chmod -R 775 /u01/app/
  • 第五步,创建/etc/oraInst.loc文件
    nventory_loc=/u01/app/oracle/oraInventory
    inst_group=oinstall

更改文件的权限
# chown oracle:oinstall /etc/oraInst.loc
# chmod 664 /etc/oraInst.loc

  • 第五步,设置oracle环境变量
    # su - oracle
    # vi ~/.bash_profile
    增加以下内容
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_SID=orcl

使设置生效
# source /home/oracle/.bash_profile
以上安装oracle的基本配置好了,下面开始安装

  • 第六步,解压oracle安装文件,并符合相应配置文件
    用oracle用户,将安装文件上传到/home/oracle 目录下,解压
    # unzip linux.x64_11gR2_database_1of2.zip
    # unzip linux.x64_11gR2_database_2of2.zip
    自动解压到当前目录下的database下,并复制出.rsp文件以备用
    # mkdir etc
    # cp /home/oracle/database/response/
    /home/oracle/etc/
    # su - root
    # chmod 700 /home/oracle/etc/*.rsp
  • 第七步,修改配置静默安装的初始化文件
    # su - oracle
    修改安装Oracle软件的响应文件
    # vi /home/oracle/etc/db_install.rsp
    oracle.install.option=INSTALL_DB_SWONLY //29 行 安装类型
    ORACLE_HOSTNAME=WD_SERVER //37 行 主机名称(自己对应的主机名称,可利用hostname查看)
    UNIX_GROUP_NAME=oinstall //42 行 安装组
    INVENTORY_LOCATION=/u01/app/oraInventory //47 行 INVENTORY目录 必须在ORACLE_BASE路径以外
    SELECTED_LANGUAGES=en,zh_CN,zh_TW //78 行 选择语言
    ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 //83 行 oracle_home
    ORACLE_BASE=/u01/app/oracle //88 行 oracle_base
    oracle.install.db.InstallEdition=EE //99 行 oracle版本
    oracle.install.db.isCustomInstall=true //108行 自定义安装
    oracle.install.db.DBA_GROUP=dba //142行 dba用户组
    oracle.install.db.OPER_GROUP=oinstall //147行 oper用户组
    oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //160行 数据库类型
    oracle.install.db.config.starterdb.globalDBName=orcl //165行 globalDBName
    oracle.install.db.config.starterdb.SID=orcl //170行 SID
    oracle.install.db.config.starterdb.memoryLimit=512 //192行 自动管理内存的最小内存(M)(200行)
    oracle.install.db.config.starterdb.password.ALL=oracle //233行 设定所有数据库用户使用同一个密码
    DECLINE_SECURITY_UPDATES=true //385行 设置安全更新

开始以静默方式执行刚刚配置的db_install.rsp
# cd /home/oracle/database
# ./runInstaller -silent -force -responseFile home/oracle/etc/db_install.rsp
稍等。。。。。。。
出现 Successfully Setup Software. 成功

使用root用户执行root.sh
# su - root
sh /u01/app/oracle/product/11.2.0/db_1/root.sh
# su - oracle
# vi ~/.bash_profile

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export LIBPATH=${CLASSPATH}:$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export ORACLE_OWNER=oracle
export SPFILE_PATH=$ORACLE_HOME/dbs
export ORA_NLS10=$ORACLE_HOME/nls/data
export DISPLAY=127.0.0.1:0.0

使设置生效
# source /home/oracle/.bash_profile
到此,可以尝试启动oracle
启动监听
# lsnrctl status
# sqlplus / as sysdba
修改下oracle默认配置,可不操作

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database flashback on; (如果要启用数据库闪回功能则执行)
SQL> alter database open;
SQL> execute utl_recomp.recomp_serial(); (重新编译所有可能失效对象)
SQL> alter system archive log current; (手工归档测试)

以下以脚本模式创建表空间及用户
# vi createuser.sql

define data_tablespace_postfix="_data"
define data_file_postfix="_data.dbf"
define tmp_tablespace_postfix="_temp"
define tmp_file_postfix="_temp.dbf"
create tablespace &2&data_tablespace_postfix logging datafile '&3/&2&data_file_postfix' size 20480m;
create temporary tablespace &2&tmp_tablespace_postfix tempfile '&3/&2&tmp_file_postfix' size 4096m;
create user &2 identified by &4 default tablespace &2&data_tablespace_postfix  temporary tablespace &2&tmp_tablespace_postfix;
grant create session ,create any table ,create any view ,create any index,create any procedure ,create any trigger,create any sequence ,alter any table ,alter any procedure,alter any trigger,alter any sequence,select any table ,drop any table ,drop any view ,drop any trigger ,drop any sequence,drop any index,drop any procedure ,insert any table, update any table ,delete any table, unlimited tablespace  to &2;

脚本说明:
&2 : 数据库用户
&3 :表空间路径
&4 :用户密码

# sqlplus / as sysdba
SQL>@createuser.sql
到此为止,数据库的安装及用户创建已经完成,后续还会补充其他数据库方面知识,如双机热备等

三、项目部署

开发环境是在idea中进行,可将github中代码检出,搭建起来,打包发布,此处代码略过。

四、Nginx模块

4.1 nginx搭建

CentOS6.5下配置yum安装Nginx。

  • 第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo
    # cd /etc/yum.repos.d/
    # vim nginx.repo
    填写如下内容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

保存,则会产生一个 /etc/yum.repos.d/nginx.repo 文件

  • 第二步,执行yum命令安装nginx
    # yum install nginx -y (加-y后自动选择所要安装包名)
    默认安装路径到 /etc/nginx 下
    安装完成后,可以直接启动 nginx
  • 第三步,启动nginx,并加载到开机自动启动服务列表中
    # chkconfig --add /etc/init.d/nginx (先将nginx服务加入chkconfig管理列表)
    # service nginx start (启动nginx服务)
    # service nginx stop (停止nginx服务)
  • 第四步,访问,出现以下表示成功,nginx默认端口是80


    image.png

未解决的问题
1、使用yum 安装时,想指定安装目录,网上使用这个,但未成功
#yum --installroot=/opt/soft/nginx install nginx -y

4.2 nginx配置负载均衡服务器

  • 第一步,新建自己的nginx配置文件
    # vim app.conf
    内容如下
upstream ant.dubbo.com{                            # 配置负载均衡
    server  192.168.1.112:8080;      #服务器地址
}

server{
    listen 80;                                        #端口监听
    server_name ant.dubbo.com;
    charset utf-8;
     location / {                            #匹配所有
         #root /www;
         #index index.html index.htm;
         #proxy_pass http://ant.dubbo.com;
         #proxy_pass http://192.168.1.112:8080/;
         #proxy_redirect default ;
     }
     location /dubbo-web/ {
        # proxy_pass http://192.168.1.112:8080/dubbo-web/;
        proxy_pass http://ant.dubbo.com;    # 采用负载均衡,http:// + upstream 名称
        #proxy_redirect default ;
        proxy_set_header Host $host:$server_port;              
        proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     }
     location /a/{
             #proxy_pass http://192.168.1.112:8080/dubbo-web/;
        proxy_pass http://ant.dubbo.com;
                #proxy_redirect off;
                proxy_set_header Host $host:$server_port;
                proxy_set_header X-Real-IP $remote_addr;     
                proxy_set_header X-Forwarded-For  ;                 
               $proxy_add_x_forwarded_for;
         }
          location ~ ^/(WEB-INF)/ { #禁止访问WEB-INF目录
                deny all;
            }
}
  • 第二步,在nginx.conf 配置文件中把app.conf 引用进来
    直接在http 内,增加以下语句,当然如果你的文档未放在conf.d下,需要
    再此处配置;
    include /etc/nginx/conf.d/*.conf;
    在当前配置文件中可以修改指定nginx的访问日志 access.log 和 error.log
    文件位置
  • 第三步, 重启nginx
    # service nginx restart
    地址栏访问 http://192.168.1.110/dubbo-web/index?name=1,出现以下字样,表示nginx跳转成功
image.png

未完待续。。。
预告,下一版, 『使用Jenkins配置Git+Maven的自动化构建』

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容