微服務部署(一)架構簡介

簡介

金財項目是微服務構架,每一個功能模塊都是一個單獨部署的服務,現有20個服務:AUTH、CUSTOMER、EHALL、CONFIG、EUREKA、GATEWAY、GATEWAY-UI、GENERATOR、JCCOLLEGE、NOTIFY、ORDER、PAY、PRODUCT、REPORT、SECURITY、SYSTEM、STORE、TASK、WECHAT、WECHAT-AUTH,整個系統服務,在不斷增長中。css

系統架構圖

金財系統架構圖

環境準備

操做系統:Centos 7.2 x64html

應用環境:openresty-1.11.2.2(Nginx)、Mysql5.6.2七、RabbitMQ3.6.九、JDK1.8.1十二、Redis3.2.五、svn1.6.11java

環境部署

openresty安裝

安裝前準備:mysql

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

下載openresty:linux

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

解壓openresty:nginx

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

編譯安裝:redis

  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配置:sql

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

mysql安裝

安裝前準備:shell

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

下載mysql:apache

  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前面的#號

  1. vim passwd

在[users]段下
帳戶 = 密碼 格式配置svn用戶

svn權限配置:

  1. vim authz

[/]爲訪問路徑,這裏表示根目錄
r爲讀權限,w爲寫權限

安裝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 #刪除建立以外的用戶

列出虛擬主機:

對帳號進行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
相關文章
相關標籤/搜索