八、对象存储

一、部署
1、安装ceph-radosgw(需要开启4780端口)

cd ceph-deploy-admin
yum install -y ceph-radosgw
ceph-deploy rgw create ceph01

2、修改默认7480端口为80端口

echo '[client.rgw.ceph01]' >>ceph.conf
echo 'rgw_frontends = "civetweb port=80"' >>ceph.conf
ceph-deploy --overwrite-conf config push ceph01 ceph02 ceph03 ceph04
systemctl restart ceph-radosgw.target

二、使用
1、通过s3接口使用RGW

1>创建用户
radosgw-admin user create --uid ceph-s3-user --display-name "Ceph S3 User Demo"
2>查看用户信息
radosgw-admin user info --uid ceph-s3-user
3>安装依赖包
yum -y install python-boto\

4>创建管理员用户(可选)
radosgw-admin caps add --uid=ceph-s3-user --caps="users=*;buckets=*;metadata=*;usage=*;zone=*"

4>demo代码(参考:https://docs.ceph.com/en/latest/radosgw/s3/python/)

import boto
import boto.s3.connection
access_key = '7WGXLK24XAGQ7HVXP1JJ'
secret_key = 'sU6xvokvYUuTvuNeihwDheyxExyRGjQwPRP0UbKK'

# create connection
conn = boto.connect_s3(
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_key,
        host = '192.168.86.51',
        is_secure=False,               # uncomment if you are not using ssl
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )

#create bucket
bucket = conn.create_bucket('ceph-s3-bucket')

#get bucket
for bucket in conn.get_all_buckets():
        print "{name}\t{created}".format(
                name = bucket.name,
                created = bucket.creation_date,
        )

2、通过s3cmd管理对象存储

1>安装命令行工具
yum -y install s3cmd
2>配置s3cmd
s3cmd --configure
Access Key:7WGXLK24XAGQ7HVXP1JJ
Secret Key:sU6xvokvYUuTvuNeihwDheyxExyRGjQwPRP0UbKK
Default Region [US]:
S3 Endpoint: 192.168.86.51:80
DNS-style bucket+hostname: 192.168.86.51/%(bucket)s
Encryption password:回车
Path to GPG program [/usr/bin/gpg]:回车
Use HTTPS protocol [Yes]: no
HTTP Proxy server name:
Test access with supplied credentials? [Y/n] Y
Save settings? [y/N] y
3>bucket操作
列举bucket: 
s3cmd ls

创建bucket: 
sed -i 's/signature_v2 = False/signature_v2 = True/g' ~/.s3cfg 
s3cmd mb s3://s3cmd-demo

上传文件到bucket
s3cmd put /etc/fstab s3://s3cmd-demo/fstab-demo

上传目录
s3cmd put /etc/ s3://s3cmd-demo/etc/ --recursive

#查看bucket内容
s3cmd ls s3://s3cmd-demo

下载文件
s3cmd get s3://s3cmd-demo/etc/sysctl.conf /tmp/sysctl.conf

#删除文件
s3cmd rm s3://s3cmd-demo/fstab-demo

#删除目录
s3cmd rm s3://s3cmd-demo/etc/ --recursive

#删除bucket
s3cmd rb s3://s3cmd-demo

#查看pool内存储文件
rados -p default.rgw.buckets.data ls

3、通过swift风格使用RGW

#创建子用户
radosgw-admin subuser create --uid ceph-s3-user --subuser ceph-s3-user:swift --access=full
#生成sk
radosgw-admin key create --subuser ceph-s3-user:swift --key-type=swift --gen-secret
#安装swift客户端
yum -y install python-setuptools python-pip
pip install --upgrade pip
pip install upgrade python-swiftclient

三、高可用设计
高可用ip规划: 192.168.86.88

节点ip角色
ceph01192.168.86.51rgw01
ceph02192.168.86.52rgw02
haproxy01192.168.86.7haproxy+keepalive
haproxy01192.168.86.100haproxy+keepalive

扩展rgw集群

1、安装ceph-radosgw(需要开启4780端口)

cd ceph-deploy-admin
ssh ceph02 "yum install -y ceph-radosgw"
ceph-deploy rgw create ceph02

2、修改默认7480端口为80端口

echo '[client.rgw.ceph02]' >>ceph.conf
echo 'rgw_frontends = "civetweb port=80"' >>ceph.conf
ceph-deploy --overwrite-conf config push ceph01 ceph02 ceph03 ceph04
systemctl restart ceph-radosgw.target
ssh ceph02 "systemctl restart ceph-radosgw.target"

3、验证

curl ceph01
curl ceph02

4、haproxy01和haproxy02 部署keepalived

yum -y install keepalived
systemctl start keepalived.service
systemctl enable keepalived.service

5、修改keepalive配置文件

cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
 #  vrrp_strict  #此处需要修改,否则可能会出现端口无法访问的情况
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# 切换脚本  如果haproxy服务掉线,会将该主机的权重-2,使得backup成为master
vrrp_script chk_haproxy {
	script "killall -0 haproxy"
	interval 2
	weight -2
}

vrrp_instance RGW {
    state MASTER  #backup节点填BACKUP
    interface eth0 #vip配置的网卡必须要真实存在
    virtual_router_id 51
    priority 100   #backup节点是99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.86.88/24 #vip地址,虚拟ip地址,配置之后自动在interface选择的网卡中生成
    }
    track_script {
				chk_haproxy #脚本
    }
}

重启keepalive

systemctl restart keepalived.service

haproxy01和haproxy02 配置haproxy

1、安装haproxy

yum -y install haproxy
systemctl start haproxy
systemctl enable haproxy

2、haproxy配置文件

cat /etc/haproxy/haproxy.cfg

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  http_web *:80 #监听名称和端口
    mode http
    default_backend rgw  #默认后端名称        

backend rgw  #后端名称需要和frontend内后端名称保持一致
    balance     roundrobin
    mode http
    server ceph01 192.168.86.51:80  #后端地址
    server ceph02 192.168.86.52:80  #后端地址

3、验证keepalive

curl 192.168.86.88

4、通过修改s3cmd配置文件中host_base、host_bucket字段为vip地址验证

vi ~/.s3cfg
host_base = 192.168.86.88:80
host_bucket = 192.168.86.88/%(bucket)s
s3cmd ls
s3cmd mb s3://test-bucket
<think>嗯,用户问的是JSP的大内置对象,我需要详细介绍一下。首先,我得确认自己记得正确,大对象分别是哪些。让我先回忆一下:request、response、session、application、page、pageContext、out、config,对吧?有没有可能漏掉或者记错了? 接下来,每个对象的作用和类型需要解释清楚。比如,request是HttpServletRequest,处理客户端请求的数据。response是HttpServletResponse,用来响应客户端。session是HttpSession,跟踪用户会话。application是ServletContext,整个Web应用的上下文。page是Object,当前页面的实例。pageContext是PageContext,可以访问其他对象的作用域。out是JspWriter,输出内容到客户端。config是ServletConfig,获取配置信息。 用户可能是刚开始学JSP,需要这些基础知识来理解页面开发。他们可能在做项目或者学习Servlet和JSP的相关内容。需要确保解释清晰,没有术语混淆。比如,区分session和application的作用域,一个是用户级别,一个是应用级别。还有out对象和response.getWriter()的区别,可能会引起混乱,应该说明。 另外,是否需要举例说明每个对象的常见用法?比如,request.getParameter()获取表单数据,session.setAttribute()保存用户信息。这样用户更容易理解它们的实际应用。 还要注意每个对象的生命周期和作用域,比如pageContext只在当前页面有效,而application在整个应用内有效。这些信息对用户理解不同对象的使用场景很重要。 有没有可能用户遇到的问题是关于内置对象的使用错误,比如作用域不对或者方法调用不正确?比如在pageContext里试图访问其他作用域的属性,或者混淆了out和response的输出顺序。这时候给出示例代码可能更有帮助,但用户现在可能只需要概念性的介绍。 总之,我需要把大对象分点列出,每个对象的类型、作用、常用方法,以及使用场景和注意事项。确保语言简洁,重点突出,适合初学者理解。同时检查是否有最新的更新,比如JSP是否还常用,但用户的问题集中在内置对象本身,所以不用扩展其他内容。</think>JSP(JavaServer Pages)中的**大内置对象**是 JSP 容器(如 Tomcat)自动创建的,开发者可以直接在 JSP 页面中使用,无需手动实例化。它们提供了与 Web 应用交互的核心功能,以下是详细介绍: --- ### 1. **`request`** - **类型**:`javax.servlet.http.HttpServletRequest` - **作用**:封装客户端(浏览器)的 HTTP 请求信息。 - **常用方法**: - `getParameter(String name)`:获取请求参数(如表单数据)。 - `setAttribute(String name, Object value)`:存储属性到请求作用域。 - `getRequestDispatcher(String path).forward()`:请求转发。 - **生命周期**:一次请求有效,响应后销毁。 --- ### 2. **`response`** - **类型**:`javax.servlet.http.HttpServletResponse` - **作用**:封装服务器对客户端的响应。 - **常用方法**: - `sendRedirect(String url)`:重定向到指定 URL。 - `setContentType(String type)`:设置响应内容类型(如 `text/html`)。 - **注意**:避免同时使用 `response.getWriter()` 和 JSP 的 `out` 对象,可能导致输出顺序混乱。 --- ### 3. **`session`** - **类型**:`javax.servlet.http.HttpSession` - **作用**:跟踪用户会话,保存用户多次请求间的数据。 - **常用方法**: - `setAttribute(String name, Object value)`:存储用户会话数据。 - `getAttribute(String name)`:获取会话数据。 - **生命周期**:默认 30 分钟(可配置),用户关闭浏览器或超时后失效。 --- ### 4. **`application`** - **类型**:`javax.servlet.ServletContext` - **作用**:代表整个 Web 应用,所有用户共享数据。 - **常用方法**: - `setAttribute(String name, Object value)`:存储全局数据。 - `getAttribute(String name)`:获取全局数据。 - **生命周期**:服务器启动到关闭期间有效。 --- ### 5. **`page`** - **类型**:`java.lang.Object` - **作用**:指向当前 JSP 页面本身(相当于 `this` 关键字)。 - **注意**:实际开发中较少直接使用,更多用于底层框架。 --- ### 6. **`pageContext`** - **类型**:`javax.servlet.jsp.PageContext` - **作用**:提供对页面所有内置对象及作用域的访问权限。 - **常用方法**: - `getRequest()`、`getResponse()`:获取其他内置对象。 - `setAttribute(String name, Object value, int scope)`:指定作用域存储数据(如 `PAGE_SCOPE`、`REQUEST_SCOPE`)。 - **生命周期**:当前页面有效。 --- ### 7. **`out`** - **类型**:`javax.servlet.jsp.JspWriter` - **作用**:向客户端输出内容(类似 `System.out`)。 - **常用方法**: - `print(String s)`:输出内容到浏览器。 - `flush()`:强制刷新缓冲区。 - **注意**:优先于 `response.getWriter()` 在 JSP 中使用。 --- ### 8. **`config`** - **类型**:`javax.servlet.ServletConfig` - **作用**:获取 JSP 页面的配置信息(如 `web.xml` 中的初始化参数)。 - **常用方法**: - `getInitParameter(String name)`:获取初始化参数。 - `getServletName()`:获取当前 Servlet 名称。 --- ### **作用域总结** | 对象 | 作用域 | 范围 | |---------------|-------------|--------------------------| | `page` | 页面作用域 | 仅在当前页面有效 | | `request` | 请求作用域 | 一次请求及转发中有效 | | `session` | 会话作用域 | 同一用户多次请求间有效 | | `application` | 应用作用域 | 所有用户共享,全局有效 | --- ### **示例场景** 1. **登录验证**:使用 `session` 保存用户登录状态。 2. **表单提交**:通过 `request.getParameter()` 获取表单数据。 3. **全局计数器**:利用 `application` 统计网站访问量。 4. **页面跳转**:`response.sendRedirect()` 或 `request.getRequestDispatcher().forward()`。 掌握这些内置对象是 JSP 开发的基础,合理使用作用域可提升代码效率和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值