簡介
金財項目是微服務構架,每個功能模塊都是一個單獨部署的服務,現有20個服務:AUTH、CUSTOMER、EHALL、CONFIG、EUREKA、GATEWAY、GATEWAY-UI、GENERATOR、JCCOLLEGE、NOTIFY、ORDER、PAY、PRODUCT、REPORT、SECURITY、SYSTEM、STORE、TASK、WECHAT、WECHAT-AUTH,整個系統服務,在不斷增加中。
系統架構圖
邏輯圖:
環境准備
操作系統: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安裝
安裝前准備:
yum install pcre pcre-devel openssl openssl-devel gcc gcc-c++ zlib zlib-devel postgresql-devel
下載openresty:
wget -P /usr/local/src http://192.168.200.141:8557/install/openresty-1.11.2.2.tar.gz
解壓openresty:
cd /usr/local/src
tar zxf openresty-1.11.2.2.tar.gz
編譯安裝:
./configure --prefix=/usr/local/openresty \
--with-luajit \
--with-http_iconv_module \
--with-http_postgres_module \
--with-http_stub_status_module \
--with-stream \
--with-stream_ssl_module \
make&&make install
nginx配置:
vim /usr/local/openresty/nginx/conf/nginx.conf
#打開nginx配置文件,在http區域添加 include /usr/local/openresty/nginx/conf/vhost/*.conf;
mysql安裝
安裝前准備:
yum -y install gcc gcc-c++ autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* cmake
下載mysql:
wget -P /usr/local/src http://192.168.200.141:8557/install/mysql-5.6.27.tar.gz
解壓mysql:
cd /usr/local/src
tar zxf mysql-5.6.27.tar.gz
編譯安裝:
cd mysql-5.6.27
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
make && make install
創建mysql賬號:
useradd mysql -s /bin/nologin
mysql安裝目錄授權:
chown -R mysql.mysql /usr/local/mysql
chown -R mysql.mysql /data/mysql/
初始化mysqlDB:
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/
設置系統服務開機啟動:
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
chkconfig --add mysql && chkconfig mysql on
service mysql start
添加PATH環境變量:
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
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:
wget -P /usr/local/src http://192.168.200.141:8557/install/jdk-8u112-linux-x64.tar.gz
解壓JDK:
cd /usr/local/src
tar zxf jdk-8u112-linux-x64.tar.gz
mv jdk1.8.0_112 ../jdk
設置JDK環境變量:
cat >> /etc/profile << 'EOF'
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=$JAVA_HOME/lib
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
EOF
JDK環境變量生效:
source /etc/profile
PS: http://192.168.200.141:8557/install/jdk-8u112-linux-x64.tar.gz此jdk包已經優化過,詳情請看“微服務部署(五)JDK優化”
安裝redis
安裝前准備:
yum -y install gcc
下載redis:
wget -P /usr/local/src http://192.168.200.141:8557/install/redis-3.2.5.tar.gz
解壓Rdedis:
cd /usr/local/src
tar zxf redis-3.2.5.tar.gz
編譯安裝redis:
cd redis-3.2.5
make MALLOC=libc
cd src/
make PREFIX=/usr/local/redis install
redis配置文件與命令路徑:
mkdir /etc/redis/
cp redis.conf /etc/redis/
cd /usr/local/redis/bin/
cp redis-benchmark redis-cli redis-server /usr/bin/
redis以守護進程的方式運行:
daemonize yes #修改配置文件daemonize參數
redis密碼認證配置:
#requirepass foobared
去掉行前的注釋,並修改密碼為所需的密碼,保存文件
requirepass mypasswd
redis內網訪問配置:
bind 192.168.1.101 #IP為實際環境內網IP
啟動redis:
redis-server /etc/redis/redis.conf
-
關閉redis,但是由於上面設置了密碼,必須要認證成功后才能關閉 ,更新啟動時最好手動關閉,不要kill 掉,以免造成數據丟失
- [root@VM_2_13_centos ~]# redis-cli shutdown
- (error) NOAUTH Authentication required.
- [root@VM_2_13_centos ~]# redis-cli -a qcloud@2018 shutdown
- [root@VM_2_13_centos ~]#
- [root@VM_2_13_centos ~]# ps -ef | grep redis
- root 6144 5406 0 21:54 pts/0 00:00:00 grep --color=auto redis
安裝svn
svn配合configServer使用,用於存放、同步金財系統服務配置文件,配置文件放在trunk目錄下
使用yum安裝:
yum - y install subversion
創建版本庫目錄:
mkdir /data/svn #根據實際情況創建目錄
svnserve -d -r /data/svn #啟動svn
···
創建版本庫:
```shell
svnadmin create /data/svn/config
SVN用戶密碼配置:
cd /data/svn/config/conf
vim svnserve.conf
去掉password-db和authz-db前面的#號
vim passwd
在[users]段下
賬戶 = 密碼 格式配置svn用戶
svn權限配置:
vim authz
[/]為訪問路徑,這里表示根目錄
r為讀權限,w為寫權限
安裝svn客戶端tortoisesvn (windows)
- 下載地址,根據操作系統選擇:
https://tortoisesvn.net/downloads.html
- 桌面右鍵選擇svn checkout:
url of repository為svn路徑,如svn://IP:PORT/config
checkout directory為保存svn數據的目錄 - 成功checkout后,進入目錄創建trunk目錄,把各項服務配置文件放入trunk目錄
- 使用tortoisesvn增加trunk目錄及配置文件,並提交:
a. 右鍵點擊trunk目錄選擇tortoiseSVN->add
b. 右鍵點擊trunk目錄點擊SVN commit
安裝RabbitMQ
安裝前准備:
yum -y install erlang socat
下載RabbitMQ至/usr/local/src:
wget -P /usr/local/src http://192.168.200.141:8557/install/rabbitmq-server-3.6.9-1.el6.noarch.rpm
rpm安裝RabbitMQ:
cd /usr/local/src
rpm -ivh rabbitmq-server-3.6.9-1.el6.noarch.rpm
啟動RabbitMQ:
service rabbitmq-server start
創建RabbitMQ用戶&&賦予用戶administrator角色:
rabbitmqctl add_user admin password
rabbitmqctl set_user_tags admin administrator
刪除多余用戶:
rabbitmqctl list_users #列出所有用戶
rabbitmqctl delete_user username #刪除創建之外的用戶
列出虛擬主機:
對賬號進行vhost授權:
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服務根目錄:
mkdir /data/services -p
mkdir /data/logs
創建服務目錄,所有服務目錄均放在/data/services目錄下,如:ehallServer為ehall服務的目錄,bin為啟動腳本的目錄,lib為jar包存放目錄,日志根據啟動腳本放在logs目錄或/data/logs下
cd /data/services
mkdir ehallServer/bin -p
mkdir ehallServer/lib -p
mkdir ehallServer/logs -p
在/data/services目錄下,下載app環境變量腳本setEnv.sh,根據實際情況修改FTCSP_EUREKA_SERVER_URL和FTCSP_CONFIG_SERVER_URL的訪問路徑
cd /data/services
wget http://192.168.200.141:8557/script/setEnv.sh
安裝各項服務
根據上文創建服務目錄,並下載相應的app服務,下載地址:
http://192.168.200.141:8557/program
啟動腳本的下載地址,若沒有安裝玖維監控則刪除start.sh腳本中的MONITOR_PATH和-javaagent:$MONITOR_PATH:
wget http://192.168.200.141:8557/script/start.sh
啟動app服務:
/data/services/服務目錄名/bin/start.sh