部署集群应用系统-安装笔记(1+X云计算题)

部署集群应用系统-安装笔记(1+X云计算题)

嚯嚯嚯www 29 2022-08-26

部署集群应用系统-安装笔记(1+X云计算题)

这套系统,网页源码,软件包均来自1+x云计算
实验拓扑:
05191-t9tiu57d3gn.png
本次实验大部分部署将用Ansible playbook脚本方式部署,脚本为个人尝试编写,有待改进的地方还有很多。
主要是我比较懒….懒得一台一台敲,大部分就一起用ansible做掉了
29105-4q6v7gw4ewv.png
实验依旧在Openstack云平台上完成,创建十台CentOS7.2实例,配置规划好浮动IP,确保网络通畅。

系统环境配置

既然使用ansible,那么提前copy好主机的ssh密钥,规划好Hosts主机组,以下是我个人做实验的规划
96990-21vcfms61kl.png

实验的主机有十台,所以用ansible批量去解决一些基础配置,
包括关闭防火墙和selinux啊(我这里实例镜像已经预先将这些关掉了,但可以写进脚本),
主机名的配置,
Hosts文件的配置

yum源文件的配置我采用分发copy文件的方式
06133-jmetohx58o8.png

所有系统的yum源我配置为openstack上的ftp目录下
35588-14je0f3hlyz.png

运行脚本完成所有基础配置
[root@server ansible]# ansible-playbook sys_setup.yml
97369-uh5v8cktmh.png

  1. Zookeeper & Kafka 集群部署
    =========================

Zookeeper和kafka集群的配置,单独写在了前两篇文档中,我就bu多做赘述了,
直接下楼冲杯咖啡,回来就完事

#运行部署脚本
[root@server ansible]# ansible-playbook zookeeper.yml
#测试服务:执行查询zookeeper状态
[root@server ansible]# ansible zookeepers -m shell -a '/usr/local/zookeeper/bin/zkServer.sh status'

脚本内容
63370-04m0spe56adp.png
测试
53210-7zzfh53u08o.png

#运行部署kafka脚本
[root@server ansible]# ansible-playbook kafka.yml
#测试服务:查看9092端口监听
[root@server ansible]# ansible zookeepers -m shell -a 'ss -ntlp|grep 9092'

脚本内容
23807-ugwqvz6crs.png
测试
28742-9fj9skp2zxv.png

  1. Mariadb数据库主从部署
    =================

数据库的部署,这里也整理成了脚本

#运行部署脚本
[root@server ansible]# ansible-playbook mariadb_setup.yml
#测试服务:查询从节点状态
[root@server ansible]# ansible db_slave -m shell -a 'mysql -uroot -p123456 -e"show slave status\G"'

脚本内容
93011-2zj0xzxsajq.png
测试:slave的运行状态都为yes
01433-8op75oqcm5f.png

在提供的gpmall软件包中,有gpmall.sql数据库文件
96406-9nxzjl1hj4b.png

登录数据库节点(主从数据同步了,在任意节点都可)

#创建数据库gpmall,执行导入数据
create database gpmall;
use gpmall;
source gpmall.sql;

71629-xy1hitmi7k.png

  1. Mycay读写分离部署
    ==============

之前做mycat的时候写的是shell脚本安装配置,因为mycat只做一台部署,这次稍作修改同样用shell脚本
**注意:**mycat服务器上的/etc/hosts文件配置是否正确,配置文件中读写数据库ip地址是否正确
Shell脚本,安装步骤可以在前面的文章看到
86684-1doberpzsc4.png

在本次实验中/usr/local/mycat/conf/schema.xml文件需要修改
schema name为"gpmall",
checkSQLschema为"false",
dataNode中使用的database设置为"gpmall"

#/usr/local/mycat/conf/schema.xml修改如下
<schema name="gpmall" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
……..
<dataNode name="dn1" dataHost="localhost1" database="gpmall" />

34515-ubhlxkle1e.png

#/usr/local/mycat/conf/server.xml修改如下
……<property name="schemas">gpmall</property>…..

50002-6xclq977skj.png
yml脚本如下,内容全写在shell脚本里了,直接copy运行就可以
06393-tylnovx3hch.png

#运行部署脚本

[root@server ansible]# ansible-playbook mycat_setup.yml
#测试服务:mysql客户端登录查询mycay服务器,如图一台为W写入,一台为R读取
[root@server ansible]# mysql -uroot -p123456 -P9066 -h192.168.100.7 -e'show @@datasource;'

80886-x22c57o7o5j.png

  1. Redis服务配置
    ============

yml脚本如下
10165-rrty4e6bykf.png

#运行部署脚本
[root@server ansible]# ansible-playbook redis_setup.yml
#测试服务:查询6379端口是否正常监听
[root@server ansible]# ansible redis -m shell -a 'ss -ntlp|grep 6379'

34580-dhnnxdcrqod.png

  1. Jar后端包部署
    ==========

软件包中的四个jar文件为后端运行包,需要在jar1,jar2两台服务器上同时部署后端包
00565-xoya9xm0qk.png

yml脚本如下
67413-696kbwjac4m.png
这里特别要注意的是,两台jar服务器上的hosts映射文件需要写成如下固定格式名称,如xx.mall
因此脚本又写了再从本地分发提前写好的jar_hosts文件到/etc/hosts
03055-3hsmx8g7e77.png

#运行部署脚本
[root@server ansible]# ansible-playbook jar_setup.yml
#测试安装:查询服务器的端口监听8082,8081
[root@server ansible]# ansible jars -m shell -a 'ss -ntlp|grep 8081 && ss -ntlp|grep 8082'

32629-2wloqsbaeh5.png
若启动有问题,建议开启输出一个包一个包的去执行

nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &
nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
  1. Nginx服务器配置
    =============

最后一台nginx为前端网页服务器,基本的系统环境已经第一步通过脚本搞定了,
这里就直接上手敲命令配置了

#安装nginx服务
[root@192 ~]# yum -y install nginx
#清空nginx默认网页,将软件包中的dist文件夹下所有内容移动到目录下
[root@192 ~]# rm -rf /usr/share/nginx/html/*
[root@192 ~]# cp -r dist/* /usr/share/nginx/html/

#修改nginx的配置文件
[root@192 ~]# vim /etc/nginx/conf.d/default.conf

43649-8yuv2g9jiq3.png

#在顶部添加以下负载均衡配置,server后的ip替换为自己的两台jar的ip地址
upstream myuser {
    server 192.168.100.11:8082;
    server 192.168.100.12:8082;
    ip_hash;
}
upstream myshopping{
    server 192.168.100.11:8081;
    server 192.168.100.12:8081;
    ip_hash;
}
upstream mycashier{
    server 192.168.100.11:8083;
    server 192.168.100.12:8083;
    ip_hash;
}

63906-u88d9mhcsvd.png

#在server{..}段配置中添加以下内容,为访问后端jar服务器做代理
    location /user {
        proxy_pass http://myuser;
}
    location /shopping {
        proxy_pass http://myshopping;
}
    location /cashier {
        proxy_pass http://mycashier;
}

56984-4cmwmlia2uw.png

配置完成后重启nginx服务,查看80端口是否正常监听

[root@192 ~]# systemctl restart nginx
[root@192 ~]# ss -ntlp
State       Recv-Q Send-Q                                              Local Address:Port                                                Peer Address:Port 
LISTEN      0      128                                                             *:80                                                             *:*      users:(("nginx",22946,6),("nginx",22944,6))

23082-kaa4471yrbb.png

访问测试

打开浏览器访问nginx的ip地址
访问商场首页如图
95555-v1iprdhlvj.png

点击右上角即可登录,测试用户test\test
58095-vww7bono5nh.png

可以在网站中查看商品详情
85586-5vwjkqahtkl.png

点击立即下点可进入下单页面
59354-oedf29511h.png

部署集群应用系统到此结束
原本是可以将所有都写在yml中,但是我想一个一个服务的分开写下次再做的时候更加明了

tmd十台机子有点烦人的呢,虽然我大部分操作都自动化部署了
没有什么比做完实验直接全选删除云主鸡更爽的事情了
76072-n71bcekzl6.png

[1]: