微服务部署(一)架构简介

摘要:
简介金财项目是一个微服务架构。每个功能模块都是单独部署的服务。有20种服务:AUTH、CUSTOMER、EHALL、CONFIG、EUREKA、GATEWAY、GATEWWAY-UI、GENERATOR、JCCOLLEGE、NOTIFY、ORDER、PAY、PRODUCT、REPORT、SECURITY、SYSTEM、STORE、TASK、WECHAT、WECHAT-AUTH。整个系统的服务正在增加。
简介

金财项目是微服务构架,每个功能模块都是一个单独部署的服务,现有20个服务:AUTH、CUSTOMER、EHALL、CONFIG、EUREKA、GATEWAY、GATEWAY-UI、GENERATOR、JCCOLLEGE、NOTIFY、ORDER、PAY、PRODUCT、REPORT、SECURITY、SYSTEM、STORE、TASK、WECHAT、WECHAT-AUTH,整个系统服务,在不断增加中。

系统架构图

微服务部署(一)架构简介第1张

 逻辑图:

微服务部署(一)架构简介第2张

微服务部署(一)架构简介第3张

环境准备

操作系统:Centos 7.2 x64

应用环境:openresty-1.11.2.2(Nginx)、Mysql5.6.27、RabbitMQ3.6.9、JDK1.8.112、Redis3.2.5、svn1.6.11

环境部署

openresty安装

安装前准备:

  1. yum install pcre pcre-devel openssl openssl-devel gcc gcc-c++ zlib zlib-devel postgresql-devel

下载openresty:

  1. wget -P /usr/local/src http://192.168.200.141:8557/install/openresty-1.11.2.2.tar.gz

解压openresty:

  1. cd /usr/local/src
  2. tar zxf openresty-1.11.2.2.tar.gz

编译安装:

  1. ./configure --prefix=/usr/local/openresty
  2. --with-luajit
  3. --with-http_iconv_module
  4. --with-http_postgres_module
  5. --with-http_stub_status_module
  6. --with-stream
  7. --with-stream_ssl_module
  8. make&&make install

nginx配置:

  1. vim /usr/local/openresty/nginx/conf/nginx.conf
  2. #打开nginx配置文件,在http区域添加 include /usr/local/openresty/nginx/conf/vhost/*.conf;

mysql安装

安装前准备:

  1. yum -y install gcc gcc-c++ autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* cmake

下载mysql:

  1. wget -P /usr/local/src http://192.168.200.141:8557/install/mysql-5.6.27.tar.gz

解压mysql:

  1. cd /usr/local/src
  2. tar zxf mysql-5.6.27.tar.gz

编译安装:

  1. cd mysql-5.6.27
  2. cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
  3. make && make install

创建mysql账号:

  1. useradd mysql -s /bin/nologin

mysql安装目录授权:

  1. chown -R mysql.mysql /usr/local/mysql
  2. chown -R mysql.mysql /data/mysql/

初始化mysqlDB:

  1. /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/--datadir=/data/mysql/

设置系统服务开机启动:

  1. cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
  2. cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
  3. chkconfig --add mysql && chkconfig mysql on
  4. service mysql start

添加PATH环境变量:

  1. echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
  2. source /etc/profile

授权mysql用户并授权远程登录:

mysql> create user 'dev'@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on dev.* to 'dev'@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

修改root密码并授权远程登录:

mysql> set password=password("2222!@#");
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'%' identified by '2222veewap!@#';
Query OK, 0 rows affected (0.00 sec)


安装JDK

下载JDK至/usr/local/src:

  1. wget -P /usr/local/src http://192.168.200.141:8557/install/jdk-8u112-linux-x64.tar.gz

解压JDK:

  1. cd /usr/local/src
  2. tar zxf jdk-8u112-linux-x64.tar.gz
  3. mv jdk1.8.0_112 ../jdk

设置JDK环境变量:

  1. cat >>/etc/profile <<'EOF'
  2. export JAVA_HOME=/usr/local/jdk
  3. export CLASSPATH=$JAVA_HOME/lib
  4. export JRE_HOME=$JAVA_HOME/jre
  5. export PATH=$JAVA_HOME/bin:$PATH
  6. EOF

JDK环境变量生效:

  1. source /etc/profile

PS: http://192.168.200.141:8557/install/jdk-8u112-linux-x64.tar.gz此jdk包已经优化过,详情请看“微服务部署(五)JDK优化”

安装redis

安装前准备:

  1. yum -y install gcc

下载redis:

  1. wget -P /usr/local/src http://192.168.200.141:8557/install/redis-3.2.5.tar.gz

解压Rdedis:

  1. cd /usr/local/src
  2. tar zxf redis-3.2.5.tar.gz

编译安装redis:

  1. cd redis-3.2.5
  2. make MALLOC=libc
  3. cd src/
  4. make PREFIX=/usr/local/redis install

redis配置文件与命令路径:

  1. mkdir /etc/redis/
  2. cp redis.conf /etc/redis/
  3. cd /usr/local/redis/bin/
  4. cp redis-benchmark redis-cli redis-server /usr/bin/

redis以守护进程的方式运行:

  1. daemonize yes #修改配置文件daemonize参数

redis密码认证配置:

  1. #requirepass foobared

去掉行前的注释,并修改密码为所需的密码,保存文件

  1. requirepass mypasswd

redis内网访问配置:

  1. bind 192.168.1.101#IP为实际环境内网IP

启动redis:

  1. redis-server /etc/redis/redis.conf
  2. 关闭redis,但是由于上面设置了密码,必须要认证成功后才能关闭     ,更新启动时最好手动关闭,不要kill 掉,以免造成数据丢失 

    1. [root@VM_2_13_centos ~]# redis-cli shutdown
    2. (error) NOAUTH Authentication required.
    3. [root@VM_2_13_centos ~]# redis-cli -a qcloud@2018 shutdown
    4. [root@VM_2_13_centos ~]#
    5. [root@VM_2_13_centos ~]# ps -ef | grep redis
    6. root      6144  5406  0 21:54 pts/0    00:00:00 grep --color=auto redis

安装svn

svn配合configServer使用,用于存放、同步金财系统服务配置文件,配置文件放在trunk目录下

使用yum安装:

  1. yum - y install subversion

创建版本库目录:

  1. mkdir /data/svn #根据实际情况创建目录
  2. svnserve -d -r /data/svn #启动svn
  3. ···
  4. 创建版本库:
  5. ```shell
  6. svnadmin create /data/svn/config

SVN用户密码配置:

  1. cd /data/svn/config/conf
  2. vim svnserve.conf

去掉password-db和authz-db前面的#号
微服务部署(一)架构简介第4张

  1. vim passwd

在[users]段下
账户 = 密码 格式配置svn用户
微服务部署(一)架构简介第5张

svn权限配置:

  1. vim authz

[/]为访问路径,这里表示根目录
r为读权限,w为写权限
微服务部署(一)架构简介第6张

安装svn客户端tortoisesvn (windows)

  1. 下载地址,根据操作系统选择:
    1. https://tortoisesvn.net/downloads.html
  2. 桌面右键选择svn checkout:
    url of repository为svn路径,如svn://IP:PORT/config
    checkout directory为保存svn数据的目录
    svn checkout
  3. 成功checkout后,进入目录创建trunk目录,把各项服务配置文件放入trunk目录
  4. 使用tortoisesvn增加trunk目录及配置文件,并提交:
    a. 右键点击trunk目录选择tortoiseSVN->add
    b. 右键点击trunk目录点击SVN commit

安装RabbitMQ

安装前准备:

  1. yum -y install erlang socat

下载RabbitMQ至/usr/local/src:

  1. wget -P /usr/local/src http://192.168.200.141:8557/install/rabbitmq-server-3.6.9-1.el6.noarch.rpm

rpm安装RabbitMQ:

  1. cd /usr/local/src
  2. rpm -ivh rabbitmq-server-3.6.9-1.el6.noarch.rpm

启动RabbitMQ:

  1. service rabbitmq-server start

创建RabbitMQ用户&&赋予用户administrator角色:

  1. rabbitmqctl add_user admin password
  2. rabbitmqctl set_user_tags admin administrator

删除多余用户:

  1. rabbitmqctl list_users #列出所有用户
  2. rabbitmqctl delete_user username #删除创建之外的用户

列出虚拟主机:
微服务部署(一)架构简介第8张

对账号进行vhost授权:

    1. rabbitmqctl set_permissions -p / admin '.*''.*''.*

      端口

      SELinux和与其机制类似的系统可能会阻止RabbtMQ绑定相应端口,所以安装完之后需要确保一下端口可以打开:

      • 4369,epmd(Erlang Port Mapper Daemon),是Erlang的端口/结点名称映射程序,用来跟踪节点名称监听地址,在集群中起到一个类似DNS的作用。
      • 5672, 5671, AMQP 0-9-1 和 1.0 客户端端口,used by AMQP 0-9-1 and 1.0 clients without and with TLS(Transport Layer Security)
      • 25672,Erlang distribution,和4369配合
      • 15672,HTTP_API端口,管理员用户才能访问,用于管理RbbitMQ,需要启用management插件,rabbitmq-plugins enable rabbitmq_management,访问http://server-name:15672/
      • 61613, 61614,当STOMP插件启用的时候打开,作为STOMP客户端端口(根据是否使用TLS选择)
      • 1883, 8883,当MQTT插件启用的时候打开,作为MQTT客户端端口(根据是否使用TLS选择)
      • 15674,基于WebSocket的STOMP客户端端口(当插件Web STOMP启用的时候打开)
      • 15675,基于WebSocket的MQTT客户端端口(当插件Web MQTT启用的时候打开)

      参考

      Installing on RPM-based Linux(Port Access)
      RabbitMQ~开篇与环境部署

      用户权限管理

      RabbitMQ有一个默认的用户"guest",密码也是"guest",这个用户默认只能通过本机访问,eg:http://localhost:15672/,在通过http访问之前记得启用management插件:

      $rabbitmq-plugins enable rabbitmq_management

      要让其他机器可以访问,需要创建一个新用户,为其分配权限。用户权限可以通过rabbitmqctl执行相关命令来维护,rabbitmqctl是管理rabbitmq的命令行管理工具,下面介绍相关的命令:

      用户管理

      • list_users,用户列表
      • add_user {username} {password},添加用户
      • delete_user {username},删除用户
      • change_password {username} {newpassword},修改密码
      • clear_password {username},删除密码,密码删除后就不能访问了。This user now cannot log in with a password (but may be able to through e.g. SASL EXTERNAL if configured)
      • authenticate_user {username} {password},用户认证
      • set_user_tags {username} {tag ...},为用户设置角色,tag可以是0个、一个、或多个,eg:rabbitmqctl set_user_tags chris administrator,设置为管理员;rabbitmqctl set_user_tags chris,清除chris与角色的关联。
      #用户列表查看
      $sudo rabbitmqctl list_users
      Listing users
      guest   [administrator]
      #添加用户
      $sudo rabbitmqctl add_user chris 123
      Creating user "chris"
      #为用户分配权限
      $sudo rabbitmqctl set_user_tags chris administrator
      Setting tags for user "chris" to [administrator]
      #然后就可以通过http://host:15672 登录management界面管理rabbitmq了,但此时用户chris还没有访问队列资源的权限

      权限管理

      RabbitMQ客户端连接到一个服务端的时候,在它的操作指令中指定了一个虚拟主机。服务端首先检查是否有访问该虚拟主机的权限,没有权限的会拒绝连接。

      对于exchanges和queues等资源,位于某个虚拟主机内;不同虚拟主机内即便名称相同也代表不同的资源。当特定操作在资源上执行时第二级访问控制开始生效。

      RabbitMQ在某个资源上区分了配置、写和读操作。配置操作创建或者销毁资源,或者更改资源的行为。写操作将消息注入进资源之中。读操作从资源中获取消息。

      要执行特定操作用户必须授予合适的权限。

      下面介绍相关命令:

      • list_vhosts [vhostinfoitem ...],获取vhosts列表
      • add_vhost {vhost}, eg:rabbitmqctl add_vhost test
      • delete_vhost {vhost}
      • set_permissions [-p vhost] {user} {conf} {write} {read},给用户分在对应的vhost上分配相应的权限。eg:rabbitmqctl set_permissions -p /myvhost chris "^chris-.*" ".*" ".*",这条指令,给用户chris在myvhost分配了权限,权限包括:以"chris-"开头的全部资源的配置权限,和所有资源的读写权限
      • clear_permissions [-p vhost] {username},清除权限
      • list_permissions [-p vhost],vhost权限分配列表
      • list_user_permissions {username},user权限列表
      $sudo rabbitmqctl set_permissions -p / chris ".*" ".*" ".*"
      Setting permissions for user "chris" in vhost "/"
      #此时用户chris才有访问队列资源的权限
后端部署

创建统一APP服务根目录:

  1. mkdir /data/services -p
  2. mkdir /data/logs

创建服务目录,所有服务目录均放在/data/services目录下,如:ehallServer为ehall服务的目录,bin为启动脚本的目录,lib为jar包存放目录,日志根据启动脚本放在logs目录或/data/logs下

  1. cd /data/services
  2. mkdir ehallServer/bin -p
  3. mkdir ehallServer/lib -p
  4. mkdir ehallServer/logs -p

在/data/services目录下,下载app环境变量脚本setEnv.sh,根据实际情况修改FTCSP_EUREKA_SERVER_URL和FTCSP_CONFIG_SERVER_URL的访问路径

  1. cd /data/services
  2. wget http://192.168.200.141:8557/script/setEnv.sh

setenv.sh


安装各项服务

根据上文创建服务目录,并下载相应的app服务,下载地址:

  1. http://192.168.200.141:8557/program

启动脚本的下载地址,若没有安装玖维监控则删除start.sh脚本中的MONITOR_PATH和-javaagent:$MONITOR_PATH:

  1. wget http://192.168.200.141:8557/script/start.sh

start.sh

start.sh

启动app服务:

  1. /data/services/服务目录名/bin/start.sh

免责声明:文章转载自《微服务部署(一)架构简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇文件的软链接、硬链接的区别TensorFlow 编程基础下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于mariadb远程连接授权的设置

1.首先配置允许访问的用户,采用授权的方式给用户权限 1 GRANTALLPRIVILEGESON*.* TO'root'@'%'IDENTIFIED BY'123456'WITHGRANTOPTION; 说明:root是登陆数据库的用户,123456是登陆数据库的密码,*就是意味着任何来源任何主机反正就是权限很大的样子。 2.最后配置好权限之后...

Python 连接redis密码中特殊字符问题

连接方法: self.pool = redis.ConnectionPool.from_url(self.redis_url)opredis = redis.Redis(connection_pool=self.pool)redis_url = 'redis://:cot$#D4^&1234@172.31.26.174:6379/0' 直接连red...

MySQL中的数据类型的长度范围和显示宽度(转)

长度范围是随数据类型就已经是固定的值,而显示宽度与长度范围无关。 以下是每个整数类型的存储和范围(来自MySQL手册) 类型 字节 最小值 最大值 (带符号的/无符号的) (带符号的/无符号的) TINYINT 1 -128 127 0 255 SMALLINT 2 -32768 32767 0 65535 MEDI...

SSRF漏洞利用之Redis大神赐予shell

    0x00实验环境 1、centos靶机(IP为:192.168.11.205,桥接模式) 2、kali黑客攻击主机(IP为:192.168.172.129,NAT模式) 0x01实验原理  这段payload的作用我们先说明一下,其作用是在靶机的/var/spool/cron临时目录下,利用ssrf漏洞写入黑客的redis数据库的操作,这样,黑客可...

.net 分布式架构之分布式锁实现

分布式锁 经常用于在解决分布式环境下的业务一致性和协调分布式环境。 实际业务场景中,比如说解决并发一瞬间的重复下单,重复确认收货,重复发现金券等。 使用分布式锁的场景一般不能太多。 开源地址:http://git.oschina.net/chejiangyi/XXF.BaseService.DistributedLock 开源相关群: .net 开源基础服...

MySQL导入、导出、数据库定时备份

  本篇使用的MySQL版本是5.7.30,注意不同版本之间可能会有差异。   一、导出操作   1、查找mysqldump命令位置 which mysqldump   2、mysqldump导出示例   用户名和密码分别是root和123456;导出远程库,使用-h+IP和-port+端口,如下所示。后面的命令默认导出本地库。 /usr/bin/mysq...