test2

jboss集群session复制原理:

jboss session复制是jboss session同步的一种实现。原理是在各Jboss节点间建立横向联系,每个节点都将本节点的session变化同步到其他所有节点上。

jboss的session复制与HTTP集群是相互配合、相互独立的两个系统。session复制是节点间的横向联系,HTTP集群是负载均衡器与节点的纵向联系。

   10.0.2.203 – 安装JDK 1.6,JBoss 7,JBoss节点名称为jboss1

   10.0.2.202 – 安装JDK 1.6,JBoss 7,JBoss节点名称为jboss2


   不过在编译nginx的时候给nginx打上nginx_upstream_check_module补丁,在网上下载这个模块,解压和nginx放于/usr/local/src/目录下,进入这个目录下的nginx解压后的目录,编辑 auto/cc/gcc文件,(关闭debug)

# debug
#CFLAGS="$CFLAGS -g"  注释掉这行,去掉 debug 模式编译,编译以后程序只有几百k
再编辑 src/core/nginx.h文件,
改成这样:#define NGINX_VER          "nginx"  修改此行,去掉后面的“NGINX_VERSION”,为了安全,这样编译后外界无法获取程序的版本号

最后打补丁:

patch -p1 <  /usr/local/src/nginx_upstream_check_module-master/check_1.2.6+.patch,

然后 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --add-module=/usr/local/src/nginx_upstream_check_module-master --add-module=/usr/local/src/nginx-sticky-module-1.0/

#使用nginx_upstream_check_module 模块对后端server进行检测

再make  && make install

以下实验注意iptables 和 selinux 的影响。

安装jdk和jboss 此处就不多说了,jboss不需要修改

 /usr/local/jboss-4.2.2.GA/server/all/deploy/jboss-web.deployer 目录下的

 server.xml文件的 <Connector port="8080" address="${jboss.bind.address}"默认地址

a:下面是nginx的配置:

user  nginx nginx;

worker_processes  2;

events {

       use epoll;

   worker_connections  1024;

}

http {

       upstream jboss {

       sticky;        #添加此项实现session的sticky,即一个客户端的访问会被nginx转发到同一台jboss实例进行处理

       server 10.0.2.203:8080 weight=1 max_fails=3 fail_timeout=60s;

       server 10.0.2.202:8080 weight=1 max_fails=3 fail_timeout=60s;

       check interval=3000 rise=2 fall=5 timeout=1000;

       }

   #interval检测间隔时间,单位为毫秒。

   #rsie请求2次正常的话,标记此realserver的状态为up。

   #fall表示请求5次都失败的情况下,标记此realserver的状态为down。

   #timeout为超时时间,单位为毫秒。

   include       mime.types;

   default_type  application/octet-stream;



location /status {

       stub_status on;

       access_log off;

       }


 location ~ \.jsp$ {

       #  root html;

         index  index.jsp;

         proxy_pass http://jboss;

       }

b:jboss的配置同 上篇的 “使用apache的mod_jk实现jboss负载均衡

   参考此篇http://smartest.blog.51cto.com/3585938/1340219

c:启动10.0.2.203和10.0.2.202主机的jboss实例,然后启动10.0.2.90的nginx server

客户端 浏览器访问 10.0.2.90/status

165414783.jpg

如果使用nginx_upstream_check_module 模块,则需要修改nginx配置文件

location /status {

       #stub_status on;      #关闭nginx自身的status状态统计

       check_status;

       access_log off;

       }

然后浏览器访问 10.0.2.90/status

175459528.jpg

可以看到默认使用tcp进行check,可以修改成http,

check interval=3000 rise=2 fall=5 timeout=1000 type=http;


jboss 的配置参考 上篇“使用apache的mod_jk实现jboss负载均衡

http://smartest.blog.51cto.com/blog/3585938/1340219


客户端访问 后端jboss 10.0.2.90/index.jsp

165645494.jpg

165924575.jpg

nginx默认采用简单的轮询调度算法将请求转发到后端的jboss实例。

这个类似于apache的mod_proxy模式,每次都将当前所有的session复制到要访问的jboss实例(没有sticky的情况),jboss默认采用UDP方式,这对于带宽有影响。

注意:当session复制时,只能10.0.2.202(jboss2)到10.0.2.203,不能10.0.2.203到10.0.2.202,待后续解决。

问题:

取消nginx的sticky配置,每一次请求都会复制session,当一台jboss实例停掉后,不影响session,当这台jboss实例恢复后,恢复的jboss提示“ERROR [JBossCacheManager] Cannot add session with id=wxYgIkmw3KnEBn4xjSD1cA**.jboss1 because it is invalid”,原正常jboss提示“Possible concurrency problem: Replicated version id 1 matches in-memory version for session wxYgIkmw3KnEBn4xjSD1cA**”。(在用mod_jk时也用这个问题)

<think> 我们正在处理用户关于目录重命名的问题。根据用户提供的引用和之前的上下文,用户希望将目录test重命名为test2。 引用中提到:执行命令:mv test test3 #给目录test重命名 因此,我们可以推断,使用mv命令可以实现目录的重命名。 步骤: 1. 确认当前目录位置:确保在包含test目录的父目录下操作,或者使用绝对路径。 2. 使用mv命令:mv 旧目录名 新目录名 具体命令: mv test test2 注意: - 如果当前目录下已经存在名为test2的目录或文件,那么mv命令会覆盖目标(如果是目录,则要求目标为空目录,或者使用-f选项强制覆盖?但实际上,mv对目录的覆盖行为与文件不同,如果目标目录已存在,则会将源目录移动到目标目录里面。所以这里需要特别注意:目标名称不能已经存在,除非你想将test目录移动到test2目录里面)。 - 实际上,重命名目录时,目标目录名不能存在。如果存在,则无法直接重命名(会报错:目录已存在)。因此,在重命名之前,要确保目标名称不存在。 所以,正确的操作是: mv test test2 # 将目录test重命名为test2 如果test2已经存在,并且是一个目录,那么上面的命令会将test目录移动到test2目录下(即成为test2/test)。这不是我们想要的。因此,在重命名之前,我们需要确保test2不存在。 如果用户确实需要覆盖已存在的目录,那么需要先删除目标目录(如果目标目录中有重要文件,需要先备份)或者使用其他方法。 但是,用户的问题只是重命名,所以我们假设目标名称test2不存在。 操作示例: $ ls test $ mv test test2 $ ls test2 如果不在当前目录,可以使用绝对路径: mv /path/to/test /path/to/test2 权限问题:如果目录在当前用户没有写权限的目录下,则需要使用sudo。 因此,根据用户需求,直接给出命令: 命令: mv test test2 如果出现权限问题,则使用: sudo mv test test2 另外,引用[1]中给出了一个例子:执行命令:mv test test3 #给目录test重命名。所以这个操作是可行的。 生成相关问题: 1. 如何同时移动多个目录并重命名? 2. 如果目标目录已经存在,如何安全地重命名目录以避免覆盖? 3. 如何递归地重命名目录及其子目录中的文件? 4. 在Linux中,如何批量重命名多个目录? 回答用户: 您可以使用mv命令将test目录重命名为test2。具体命令为:`mv test test2`。请注意,如果目标目录test2已经存在,则此操作会将test目录移动到test2目录中(即成为test2/test)。因此,请确保test2不存在。如果操作需要权限,请使用sudo。 引用用户提供的引用[1]作为参考。 </think> ### 如何将test目录重命名为test2 在Linux系统中,使用`mv`命令可以轻松完成目录重命名操作。以下是详细步骤: #### 📌 基本重命名命令 ```bash mv test test2 ``` #### 🔍 操作详解 1. **检查当前目录** 确保在包含`test`目录的父目录下操作: ```bash ls -l # 确认test目录存在 ``` 2. **执行重命名** ```bash mv test test2 # 将test重命名为test2 ``` 3. **验证结果** ```bash ls -l # 查看新目录test2 ``` #### ⚠️ 注意事项 1. **目录存在性检查** - 如果目标名称`test2`已存在,会显示错误: `mv: cannot move 'test' to 'test2': File exists` - 安全操作建议: ```bash mv -i test test2 # 交互式确认覆盖 ``` 2. **跨文件系统移动** 当源目录(test)和目标目录(test2)在不同分区时: ```bash mv -T test test2 # 强制作为目录操作 ``` 3. **权限问题** - 如果目录属于其他用户: ```bash sudo mv test test2 # 使用管理员权限 ``` #### 📊 操作示意图 ```mermaid graph LR A[操作前] -->|mv 命令| B[操作后] A --> C[/test/] B --> D[/test2/] C -.重命名.-> D ``` #### 💡 高级技巧 1. **保留属性** 保留原目录的修改时间和权限: ```bash mv -v --preserve=all test test2 ``` 2. **批量重命名** 使用通配符重命名多个目录: ```bash for d in test_*; do mv "$d" "${d/_/}"; done # 移除下划线 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值