本文档使用了三个虚拟机,对应部署模式如下图(NFS服务和NGINX在同一台虚拟机):
防火墙、开端口等按需开放。
开放端口命令示例:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=6379/tcp
mkdir -p /usr/java
用 xftp 将 jdk-8u202-linux-x64.tar.gz 上传至 /root 目录
tar -zxvf jdk-8u202-linux-x64.tar.gz
mv -f jdk1.8.0_202 /usr/java
vim /etc/profile
修改/etc/profile文件,添加JAVA_HOME、PATH、CLASSPATH三个变量,并用export输出三个变量。
按i键进入编辑模式,在文件末尾添加:
JAVA_HOME=/usr/java/jdk1.8.0_202
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
使 profile 文件立即生效
source /etc/profile
java -version
javac -version
yum -y install make gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel libtool
mkdir -p /app
cd /app
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -zxvf nginx-1.20.2.tar.gz
解压完成后,将文件夹重命名为nginx
mv nginx-1.20.2 nginx
cd nginx
./configure --prefix=/app/nginx --with-http_stub_status_module --with-http_ssl_module
#–prefix指定的是Nginx的安装目录位置
make && make install
/usr/sbin/groupadd nginx
/usr/sbin/useradd -g nginx nginx
此处需要注意:
nginx用户需要有nginx目录下的读写权限,建议执行以下下语句:
# 路径根据安装路径填写
chown -R nginx:nginx /app/nginx
ls -l /app/nginx
此部署方案使用两个节点的 ESB 集群。 也就是说,两个 ESB 节点被配置为高可用性和可伸缩性服务请求。 如下图所示,集群中的产品节点前面有一个外部第三方负载均衡器,该负载均衡器以循环方式将请求路由到两个节点。
注意,两个 ESB 节点被配置为众所周知的成员。 始终建议将集群的所有节点都设为知名成员。
在使用 Hazelcast 为集群配置 WSO2 产品时,需要在配置中使用特定的 IP 地址,而不是 localhost。
在上图中,第一个 ESB 节点的 IP 为 192.168.100.115,第二个 ESB 节点的 IP 为 192.168.100.105。
如果想在使用同一服务器的开发环境中测试集群,需要对 ESB 节点之一进行端口偏移。请按照以下步骤操作:
<Ports>
...
<Offset>5Offset>
...
Ports>
负载均衡器自动在多个 WSO2 产品实例之间分配传入流量。 它能够在集群中实现更高级别的容错,并提供分配流量所需的负载平衡。
配置负载均衡器时请注意以下问题:
推荐使用 NGINX Plus 作为负载均衡器的选择。
按照以下步骤将 NGINX 社区版本 1.20.2 配置为负载均衡器。
在 nginx/conf 目录下创建一个名为 ei.http.conf 的 VHos t文件,添加如下配置。这将 NGINX 配置为通过 HTTP 8280 端口使用 http://192.168.100.129:8280/ URL 将 HTTP 请求定向到两个 ESB 节点(192.168.100.115 和 192.168.100.105)。
vim /app/nginx/conf/ei.http.conf
upstream worker_ng {
server 192.168.100.115:8280 weight=10;
server 192.168.100.105:8280 weight=10;
}
server {
listen 8280;
server_name 192.168.100.129;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_read_timeout 5m;
proxy_send_timeout 5m;
proxy_pass http://worker_ng;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
在 nginx/conf 目录中创建一个 VHost 文件(ei.https.conf), 将 NGINX 配置为通过 HTTPS 8243 端口使用 https://192.168.100.129:8243/ URL 将 HTTPS 请求定向到两个 ESB 节点(192.168.100.115 和 192.168.100.105)。
vim /app/nginx/conf/ei.https.conf
upstream ssl_worker_ng {
server 192.168.100.115:8243 weight=10;
server 192.168.100.105:8243 weight=10;
ip_hash;
}
server {
listen 8243 ssl;
server_name 192.168.100.129;
# 自签证书
ssl_certificate /app/nginx/ssl/server.crt;
ssl_certificate_key /app/nginx/ssl/server.key;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_read_timeout 5m;
proxy_send_timeout 5m;
proxy_pass https://ssl_worker_ng;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
配置 NGINX 以通过 HTTPS 9443 端口以 https://192.168.100.129:9443/carbon 访问管理控制台。 为此,请在 nginx/conf 目录创建一个 VHost 文件 ( ui.ei.https.conf ),并将以下配置添加到其中。
Nginx 社区版和 NGINX Plus
vim /app/nginx/conf/ui.ei.https.conf
upstream ssl_mgt_ng {
server 192.168.100.115:9443 weight=10;
server 192.168.100.105:9443 weight=10;
ip_hash;
}
server {
listen 9443 ssl;
server_name 192.168.100.129;
ssl_certificate /app/nginx/ssl/server.crt;
ssl_certificate_key /app/nginx/ssl/server.key;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_read_timeout 5m;
proxy_send_timeout 5m;
proxy_pass https://ssl_mgt_ng;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
error_log logs/error.log ;
access_log logs/access.log;
}
创建密钥时输入 ei.wso2.com 作为通用名称(非公网域名需要添加hosts映射,否则使用 IP )。
签发本地ssl证书示例:
mkdir -p /app/nginx/ssl
cd /app/nginx/ssl
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
在 node03 和 node04 执行以下命令将证书添加到
scp -r 192.168.100.129:/app/nginx/ssl/server.crt /app/server.crt
keytool -import -trustcacerts -alias server -file /app/server.crt -keystore /app/wso2ei-6.7.0-SNAPSHOT/repository/resources/security/client-truststore.jks
vim /app/nginx/conf/nginx.conf
user nginx;
worker_processes auto;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
include /app/nginx/conf/ei.http.conf;
include /app/nginx/conf/ei.https.conf;
include /app/nginx/conf/ui.ei.https.conf;
}
创建日志文件
# 创建日志文件
mkdir -p /app/nginx/logs
touch /app/nginx/logs/error.log
touch /app/nginx/logs/access.log
# 创建 pid 文件
touch /app/nginx/logs/nginx.pid
chown -R nginx:nginx /app/nginx
执行以下命令启动 NGINX
# 停止
/app/nginx/sbin/nginx -s stop
# 启动
/app/nginx/sbin/nginx -c /app/nginx/conf/nginx.conf
如果只是对 VHost 文件进行修改时不需要重新启动服务器,请执行以下命令:
# 重载配置文件
/app/nginx/sbin/nginx -s reload
WSO2 EI 的所有配置文件都使用数据库来存储用户管理详细信息和注册表数据等信息。 集群中的所有节点都必须使用一个中央数据库进行配置和治理注册表挂载。 创建以下数据库和关联的数据源。
数据库 | 描述 |
---|---|
WSO2_USER_DB JDBC | 用户存储和授权管理器 |
REGISTRY_DB | 用于产品节点中的配置和治理注册表挂载的共享数据库 |
REGISTRY_LOCAL1 | 节点 1 中的本地注册表空间 |
REGISTRY_LOCAL2 | 节点 2 中的本地注册表空间 |
对于大多数企业测试和生产环境,建议使用行业标准的 RDBMS,例如 Oracle、PostgreSQL、MySQL、MS SQL 等。 但是,也可以仅将嵌入式 H2 数据库用于 REGISTRY_LOCAL1 和 REGISTRY_LOCAL2。
按照以下步骤创建必要的数据库。
这些说明假设将 MySQL 安装为关系数据库管理系统 (RDBMS),但可以根据需要安装另一个受支持的 RDBMS。
如果使用的是 MySQL 5.7 或更高版本,则需要使用 mysql5.7.sql 脚本而不是 mysql.sql 脚本。(EI 6.6.0只有mysql.sql文件)
yum install -y unzip
unzip wso2ei-6.7.0-SNAPSHOT_ZH.zip
cp -r /app/wso2ei-6.7.0-SNAPSHOT/dbscripts/mysql.sql /app/
mysql -u root -p'CWCcwy12'
create database WSO2_USER_DB;
use WSO2_USER_DB;
source /app/mysql.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
create database REGISTRY_DB;
use REGISTRY_DB;
source /app/mysql.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
/*** REGISTRY_LOCAL1 和 REGISTRY_LOCAL2 不是必须的,可以使用内置H2数据库 **/
create database REGISTRY_LOCAL1;
use REGISTRY_LOCAL1;
source /app/mysql.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
create database REGISTRY_LOCAL2;
use REGISTRY_LOCAL2;
source /app/mysql.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
/**********************************************************************/
alter user 'regadmin'@'%' identified by 'regadmin';
flush privileges;
quit;
对于 Microsoft Windows 用户,在 MySQL 中创建数据库时,将字符集指定为 latin1 很重要。不这样做可能会在启动集群时导致错误(错误代码:1709)。此错误发生在某些版本的 MySQL (5.6.x) 中,与 UTF-8 编码有关。 MySQL 最初默认使用 latin1 字符集,它以 2 字节的序列存储字符。然而,在最近的版本中,为了对国际用户更友好,MySQL 默认使用 UTF-8。因此,必须在数据库创建命令中使用 latin1 作为字符集,如下所示以避免此问题。请注意,这可能会导致非拉丁字符(如希伯来语、日语等)出现问题。以下是数据库创建命令的sql。
create database <DATABASE_NAME> character set latin1;
对于其他操作系统的用户,标准的数据库创建命令就足够了。对于这些操作系统,以下是数据库创建命令的sql。
create database <DATABASE_NAME>;
对集群的所有节点进行以下配置。
mkdir -p /app
cd /app
yum install -y unzip
unzip wso2ei-6.7.0-SNAPSHOT_ZH.zip
vim /app/wso2ei-6.7.0-SNAPSHOT/conf/registry.xml
将以下配置添加到每个 ESB 节点的
添加这些配置时请注意以下几点:
<dbConfig name="sharedregistry">
<dataSource>jdbc/WSO2RegistryDBdataSource>
dbConfig>
<remoteInstance url="https://localhost:9443/registry">
<id>node04id>
<dbConfig>sharedregistrydbConfig>
<readOnly>falsereadOnly>
<enableCache>trueenableCache>
<registryRoot>/registryRoot>
<cacheId>regadmin@jdbc:mysql://192.168.100.129:3306/REGISTRY_DB?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8cacheId>
remoteInstance>
<mount path="/_system/config" overwrite="true">
<instanceId>node04instanceId>
<targetPath>/_system/eiconfigtargetPath>
mount>
<mount path="/_system/governance" overwrite="true">
<instanceId>node04instanceId>
<targetPath>/_system/governancetargetPath>
mount>
vim /app/wso2ei-6.7.0-SNAPSHOT/conf/datasources/master-datasources.xml
按照下面给出的步骤更新数据源。
<datasources-configuration xmlns:svns="http://org.wso2.securevault/configuration">
<providers>
<provider>org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReaderprovider>
providers>
<datasources>
<datasource>
<name>REGISTRY_LOCAL1name>
<description>The datasource used for registry- localdescription>
<jndiConfig>
<name>jdbc/WSO2CarbonDBname>
jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://192.168.100.129:3306/REGISTRY_LOCAL1?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8url>
<username>regadminusername>
<password>regadminpassword>
<driverClassName>com.mysql.jdbc.DriverdriverClassName>
<maxActive>50maxActive>
<maxWait>60000maxWait>
<testOnBorrow>truetestOnBorrow>
<validationQuery>SELECT 1validationQuery>
<validationInterval>30000validationInterval>
configuration>
definition>
datasource>
<datasource>
<name>REGISTRY_DBname>
<description>The datasource used for registry- config/governancedescription>
<jndiConfig>
<name>jdbc/WSO2RegistryDBname>
jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://192.168.100.129:3306/REGISTRY_DB?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8url>
<username>regadminusername>
<password>regadminpassword>
<driverClassName>com.mysql.jdbc.DriverdriverClassName>
<maxActive>50maxActive>
<maxWait>60000maxWait>
<testOnBorrow>truetestOnBorrow>
<validationQuery>SELECT 1validationQuery>
<validationInterval>30000validationInterval>
configuration>
definition>
datasource>
<datasource>
<name>WSO2_USER_DBname>
<description>The datasource used for registry and user managerdescription>
<jndiConfig>
<name>jdbc/WSO2UMDBname>
jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://192.168.100.129:3306/WSO2_USER_DB?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8url>
<username>regadminusername>
<password>regadminpassword>
<driverClassName>com.mysql.jdbc.DriverdriverClassName>
<maxActive>50maxActive>
<maxWait>60000maxWait>
<testOnBorrow>truetestOnBorrow>
<validationQuery>SELECT 1validationQuery>
<validationInterval>30000validationInterval>
configuration>
definition>
datasource>
datasources>
datasources-configuration>
<datasources-configuration xmlns:svns="http://org.wso2.securevault/configuration">
<providers>
<provider>org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReaderprovider>
providers>
<datasources>
<datasource>
<name>REGISTRY_LOCAL2name>
<description>The datasource used for registry- localdescription>
<jndiConfig>
<name>jdbc/WSO2CarbonDBname>
jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_LOCAL2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8url>
<username>regadminusername>
<password>regadminpassword>
<driverClassName>com.mysql.jdbc.DriverdriverClassName>
<maxActive>50maxActive>
<maxWait>60000maxWait>
<testOnBorrow>truetestOnBorrow>
<validationQuery>SELECT 1validationQuery>
<validationInterval>30000validationInterval>
configuration>
definition>
datasource>
<datasource>
<name>REGISTRY_DBname>
<description>The datasource used for registry- config/governancedescription>
<jndiConfig>
<name>jdbc/WSO2RegistryDBname>
jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_DB?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8url>
<username>regadminusername>
<password>regadminpassword>
<driverClassName>com.mysql.jdbc.DriverdriverClassName>
<maxActive>50maxActive>
<maxWait>60000maxWait>
<testOnBorrow>truetestOnBorrow>
<validationQuery>SELECT 1validationQuery>
<validationInterval>30000validationInterval>
configuration>
definition>
datasource>
<datasource>
<name>WSO2_USER_DBname>
<description>The datasource used for registry and user managerdescription>
<jndiConfig>
<name>jdbc/WSO2UMDBname>
jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://carbondb.mysql-wso2.com:3306/WSO2_USER_DB?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8url>
<username>regadminusername>
<password>regadminpassword>
<driverClassName>com.mysql.jdbc.DriverdriverClassName>
<maxActive>50maxActive>
<maxWait>60000maxWait>
<testOnBorrow>truetestOnBorrow>
<validationQuery>SELECT 1validationQuery>
<validationInterval>30000validationInterval>
configuration>
definition>
datasource>
datasources>
datasources-configuration>
jdbc/WSO2UMDB
vim /app/wso2ei-6.7.0-SNAPSHOT/conf/axis2/axis2.xml
WSO2 产品使用 Hazelcast 作为其默认的集群引擎。 下面给出了将产品节点连接到集群的步骤。
<clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" enable="true">
<parameter name="membershipScheme">wkaparameter>
集群域/组。 同一组中的节点将属于同一个多播域。 不同组的节点之间不会有干扰。
<parameter name="domain">wso2.ei.domainparameter>
对于 ESB 节点 1
<parameter name="localMemberHost">192.168.100.115parameter>
<parameter name="localMemberHost">192.168.100.105parameter>
<parameter name="localMemberPort">4100parameter>
<members>
<member>
<hostName>192.168.100.115hostName>
<port>4100port>
member>
<member>
<hostName>192.168.100.105hostName>
<port>4100port>
member>
members>
<parameter name="WSDLEPRPrefix" locked="false">http://192.168.100.129:8280parameter>
<parameter name="WSDLEPRPrefix" locked="false">https://192.168.100.129:8243parameter>
vim /app/wso2ei-6.7.0-SNAPSHOT/conf/carbon.xml
对于 ESB 节点 1
<HostName>192.168.100.115HostName>
<HostName>192.168.100.105HostName>
touch /app/wso2ei-6.7.0-SNAPSHOT/conf/hazelcast.properties
vim /app/wso2ei-6.7.0-SNAPSHOT/conf/hazelcast.properties
#Disabling the hazelcast shutdown hook
hazelcast.shutdownhook.enabled=false
#Setting the hazelcast logging type to log4j
hazelcast.logging.type=log4j
下面解释上述配置。
vim /app/wso2ei-6.7.0-SNAPSHOT/conf/log4j2.properties
log4j.logger.com.hazelcast=info
将主机条目添加到 DNS 或集群所有节点中的“/etc/hosts”文件(在 Linux 中),以将主机名映射到 IP 地址。 将以下主机名映射到 /etc/host 文件中的 IP 地址。
ei.wso2.com
ui.ei.wso2.com
carbondb.mysql-wso2.com
例子:
xxx.xxx.xxx.xxx ei.wso2.com
xxx.xxx.xxx.xxx ui.ei.wso2.com
carbondb.mysql-wso2.com
实际上本例用的全部都是IP地址,不需要再做主机名映射。
根据集群中发生的工件变化率使用以下部署同步建议:
选择适合生产环境的部署同步方法
可以使用常见的共享文件系统,例如网络文件系统 (NFS) 或任何其他共享文件系统作为内容同步机制。 需要将两个节点的
#检查是否安装NFS
rpm -qa nfs-utils rpcbind
#关闭防火墙
# 查看防火墙状态
systemctl status firewalld
## 关闭防火墙
systemctl stop firewalld
#安装NFS
yum install nfs-utils rpcbind -y
#检查安装结果
rpm -qa nfs-utils rpcbind
建立同步文件夹
mkdir -p /app/file
在挂载文件夹之前,先把
cp -r /app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server/* /app/file
对同步文件夹进行授权
chown root /app/file/
chmod 777 /app/file/
在配置文件中加入如下配置(参数no_root_squash的其作用是:NFS客户端使用共享目录的用户,如果是root 的话,所有的操作均在服务器端映射为root用户,拥有共享目录的root权限。不加这个参数在登入 NFS 主机export目录的使用者如果是root时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份。
因为客户端是使用root登录的,自然权限被压缩为nobody了,所以无法写入。)生产环境慎用no_root_squash!!!
创建配置文件
vim /etc/exports
/app/file *(rw,sync,no_root_squash)
# 执行exportfs -rv让配置立即生效
exportfs -rv
# 将NFS和rpcbind加入开机启动
systemctl enable nfs
systemctl enable rpcbind
# 启动NFS和rpcbind
systemctl start nfs
systemctl start rpcbind
# 查看NFS启动状态
systemctl status nfs
# 关闭防火墙
## 查看防火墙状态
systemctl status firewalld
## 关闭防火墙
systemctl stop firewalld
# 安装NFS软件包,并把NFS服务设为开机启动
## 安装NFS
yum install nfs-utils rpcbind -y
## 将NFS加入开启启动
systemctl enable nfs
## 将rpcbind加入开启启动
systemctl enable rpcbind
##启动NFS
systemctl start nfs
## 启动RPCbind
systemctl start rpcbind
# 将应用文件夹挂载到服务器上
mount -t nfs 192.168.100.129:/app/file /app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server
df -Th
#挂载完成后可以使用mount | grep file命令查看挂载情况
#取消挂载
sudo umount /app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server
#直接使用 umount /app/file 可能会报“Device is busy”错误。
如果无法维护共享文件系统,可以使用 Rsync 同步内容。 Rsync 工具是一种文件复制工具,是另一种在所有集群节点之间同步工件的常用方法。 因此,可以先在集群的一个节点中部署工件,然后使用 Rsync 将这些工件复制到其他节点,如下所述。
安装 rsync。
我们走的是 rsync over ssh 协议,因此不需要在服务器端安装 rsyncd,只要服务器开了 ssh 就行。
#首先检查是否已安装
rpm -aq rsync
#如果未安装则运行
yum install -y rsync
groupadd wso2ei
useradd -r -g wso2ei wso2ei
passwd wso2ei
mkdir -p /home/wso2ei
chown -R wso2ei:wso2ei /app/wso2ei-6.7.0-SNAPSHOT
sshpass 的作用是 ssh 免密登录
yum install -y sshpass
在 rsync over ssh 的基础上,我们采用sshpass解决非交互模式输入密码的问题。
传统做法是:使用密钥,但是很麻烦。
我们先成功登录一次remotehost,之后就可以使用sshpass了。
特别提醒:如果今后远程主机重装系统,或者换了机器,一定要删除本地~/.ssh/known_host,否则是会无法登录的。
ssh [email protected]
ssh [email protected]
cd /app
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar -zxvf inotify-tools-3.14.tar.gz
mv -f inotify-tools-3.14 inotify-tools
cd inotify-tools
./configure --prefix=/app/inotify-tools
make && make install
inotify 两个监控命令:
inotifywait:用于持续监控,实时输出结果(常用)
inotifywatch:用于短期监控,任务完成后再出结果
cd /app
touch rsync_test1_inotify.sh
chmod +x rsync_test1_inotify.sh
vim rsync_test1_inotify.sh
脚本的作用是:当 node03 的 /app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server 目录下的文件发生增删改操作时,把 node04 的 /app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server 目录同步成 node03 的一样。
#!/bin/bash
# 需要同步的本地目录
SRCDIR=/app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server
USER=wso2ei
PASSWORD=Abc123456
IP=192.168.100.105
# 被同步的节点的目录
DESTDIR=/app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server
# 格式:inotifywait -mrq -e 监控动作 1,监控动作 2 /监控目录 &
/app/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $SRCDIR | while read file
do
# 上行同步
sshpass -p $PASSWORD rsync -avpgorl --progress --delete-before -e 'ssh -p 22' $SRCDIR/ $USER@$IP:$DESTDIR
echo " ${file} was rsynced" >> /tmp/rsync.log 2>&1
echo -e "`date \"+%Y-%m-%d %H:%M:%S\"` \e[32m rsynced done! \e[0m"
done
后台启动
nohup /app/rsync_test1_inotify.sh >> /app/rsync_test1_inotify.log 2>&1 &
cd /app
touch rsync_test1_inotify.sh
chmod +x rsync_test1_inotify.sh
vim rsync_test1_inotify.sh
脚本的作用是:当 node04 的 /app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server 目录下的文件发生增删改操作时,把 node03 的 /app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server 目录同步成 node04 的一样。
#!/bin/bash
# 需要同步的本地目录
SRCDIR=/app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server
USER=wso2ei
PASSWORD=Abc123456
IP=192.168.100.115
# 被同步的节点的目录
DESTDIR=/app/wso2ei-6.7.0-SNAPSHOT/repository/deployment/server
# 格式:inotifywait -mrq -e 监控动作 1,监控动作 2 /监控目录 &
/app/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $SRCDIR | while read file
do
# 上行同步
sshpass -p $PASSWORD rsync -avpgorl --progress --delete-before -e 'ssh -p 22' $SRCDIR/ $USER@$IP:$DESTDIR
echo " ${file} was rsynced" >> /tmp/rsync.log 2>&1
echo -e "`date \"+%Y-%m-%d %H:%M:%S\"` \e[32m rsynced done! \e[0m"
done
后台启动
nohup /app/rsync_test1_inotify.sh >> /app/rsync_test1_inotify.log 2>&1 &
cd /app/wso2ei-6.7.0-SNAPSHOT/bin
chmod +x integrator.sh
# 直接启动
./integrator.sh
# 后台启动
nohup /app/wso2ei-6.7.0-SNAPSHOT/bin/integrator.sh >> /app/wso2ei-6.7.0-SNAPSHOT/bin/wso2ei.log 2>&1 &
tail -f /app/wso2ei-6.7.0-SNAPSHOT/bin/wso2ei.log
按照以下步骤测试集群。
有关日志和新节点的附加信息
当终止一个节点时,所有节点都会识别该节点已离开集群。当新节点加入集群时也是如此。如果要添加另一个新节点,如果在新服务器上运行现有节点(例如 xxx.xxx.xxx.184),则复制现有节点而不做任何更改。如果打算在运行另一个 WSO2 产品的服务器上使用新节点,请使用节点的副本并在
按照以下步骤调整集群的性能:
下面给出的示例参数值可能不是环境中特定硬件配置的最佳值。 因此,建议对环境进行负载测试,以相应地调整负载均衡器和其他配置。