设为首页 收藏本站
查看: 1763|回复: 0

[经验分享] ipvs

[复制链接]

尚未签到

发表于 2018-12-30 11:09:12 | 显示全部楼层 |阅读模式
keepalived应用案例及其ipvs-dr模型原理解释




【LVS--的调度方法】
分类:静态方法:只根据调度方法本身来调度,不关心RS的负载情况来调度。
动态方法:根据调度方法本身和RS的负载状况来调度。
【 静态方法】
RR  算法 : ROUND ROBIN,轮询
WRR算法:加权轮询
SH: sourcehashing源地址的hash绑定。
实现的方式:
Session:绑定方式,无冗余能力丢失客户端要重来。实现方式;负载均衡器内部有一个会话表。他可以记录一个会话信息哈希编码记录(CIP,RS)。
session服务器,把session放在后端服务器,多个服务器共用一个后端服务器,这样就会导致无冗余,因此建议使用高可用。
session复制的方式:这是把后端对台主机,实现DLTE会话复制,多台主机都有会话的COOKIE,有冗余,但是适合的节点比较少的情况。
DH算法: destination hashing;
这种情况是针对我们是客户端的情况下,我们期望可以实现连接追踪的功能。因此就必须要让我们之前从一台防火墙出去的,报文也从哪台防火墙回来。因此调度时只要director给调度到相应的防火墙,回来时自然还是那个防火墙回来。源IP是防火墙,然后再由director调度回相应的主机即可。
【动态方法】
LC: leastconnection 最少连接接数  
Active 后端主机的活动连接数
Inactive:后端主机的非活动连接数
Overhead=actconn*256+lnactionn
活动连接占用的资源多,因此*256。那台后端主机得值小,就挑中那一台。
WLC:  加权最少连接
Overhead=(actconn*256+lnactionn)/weighted   结果小的会被挑中
如果是相同的值,自上而下执行。
SED:short exppection delay最短期望延迟。最小的的被选中
存在问题:这种是会导致权重大的频繁被挑中,而当连接如果较少时,导致权重小的无法分担工作。
NQ:Nerver
Queue永不排队

在执行之前安装权重从大到小,先一次分一个。之后在执行SED模式。
LBLC:动态DH算法;
LBLCR: 类似于session复制的一种工作机制。
众多的算法中,系统默认的是使用WLC算法。


【LVS-DR模型的实现】
【目的】实现后端服务器负载均衡。
【特点】这是一种基于MAC地址的转换方式。
当一个客户端发起一个请求时,为了防止不经过负载均衡器,我们通过arptables,静态绑定的方式,将前端路由器强行指向我们的director。由于这是一种基于MAC地址的转换方式,因此director和RS之间必须是同一个网络内。然后由负载均衡器,直接把报文直接丢给交换机,广播对应真实主机的MAC地址。当RS打开报文时,发现目标IP是VIP,那么就会转发回给VIP,这显然不是我们希望看到的,因此我们需要在每一个RS上也配置上VIP(这样就是多台RS和负载均衡器都有VIP了,那么如何解决一个网段相同的IP冲突呢?)其实我们是把真实主机的VIP配置在lo:0上的。然后通过修改内核参数arp_ignore,arp_announce参数,限制本机被请求和自己通告的方式。这样我们就可以RS打开报文时就看到是发送给自己的报文,并且不冲突director接受外部的报文。
RS的响应:RS在响应时根据之前的IP首部(CIP,VIP),将报文返回(VIP,CIP)。因为CIP是将报文发送给VIP的,因此回应时,想让CIP能够识别,就必须使用VIP来作为源IP地址。但是我们的VIP是配置在lo:0上的无法外部通信,因此我们还需要给予真实主机设置一个内部的路由转换,强制VIP通过lo:0-->eth0转发出去。

####################keepalive的几个常见应用的介绍##################################################

[root@localhost ~ ]#yum install keepalived
[root@localhost ~ ]# rpm -ql keepalived   ####查看生成的配置文件
/etc/keepalived
/etc/keepalived/keepalived.conf           ####配置文件
/etc/rc.d/init.d/keepalived               ####服务脚本
/etc/sysconfig/keepalived                 #####定义脚本的选项的配置文件
/usr/sbin/keepalived                      #####二进制程序查看配置文件使用帮助的命令是:
[root@node3 ~ ]# man
keepalived.conf

配置文件:
分成三段:
全局段:
Global definitions
        global_defs           
        # Block id
        {
               notification_email    # To:      ####定义提示信息发给的主机
               {
               admin@example1.com
               ...
               }      
notification_email_from admin@example.com    //定义由谁发
        smtp_server 127.0.0.1              # IP
        smtp_connect_timeout 30      # integer, seconds
        router_id my_hostname        # string identifying the machine,
                                     # (doesn’thave to be hostname).
        vrrp_mcast_group4 224.0.0.18 #optional, default 224.0.0.18
        vrrp_mcast_group6 ff02::12   # optional, default ff02::12
        enable_traps                 # enable SNMP traps
        }静态路由的定义格式
static_ipaddress
        {
        192.168.1.1/24 dev eth0 scope global
        ...
        }
        static_routes
        {
        192.168.2.0/24 via 192.168.1.100 dev
        eth0
        ...
        }#####################################【对haproxy高可用】#############################################

[root@node3
keepalived ]# vim keepalived.conf
  1 ! Configuration File for keepalived
  2
  3 global_defs {
  4   notification_email {
  5          root@node1    //通知的邮件
  6          root@node3
  7    }
  8   notification_email_from kanotify@stu11.com  ####定义发送的邮件
  9   smtp_connect_timeout 3
10   smtp_server 127.0.0.1
11   router_id LVS_DEVEL
12 }
13
14 vrrp_script chk_haproxy {    #####定义检测脚本
15     script "killall -0 haproxy"  ####成功就是在运行,这时不管它。
16    interval 1                              ####检测的间隔
17    weight -2                               ####修改的权重
18 }
19
20 vrrp_script chk_mantaince_down {   ###定义手动控制的脚本
21   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit0" ####如果有down文件,权重.
22   interval 1
23   weight -5
24 }
25
26 vrrp_instance VI_1 {                    ####定义实例
27    interface eth0
28    state MASTER                          ####主节点
29    priority 100                               ####优先级
30    virtual_router_id 110             ####虚拟路由的ID
31    garp_master_delay 1                     
32
33    authentication {                       ####通信认证
34        auth_type PASS                   #####认证类型
35        auth_pass password           #####密码
36     }
37    track_interface {                     ###追踪的网卡
38       eth0
39     }
40    virtual_ipaddress {                 ###虚拟IP
41  172.16.11.1/16 dev eth0 label eth0:0   ####虚拟IP/掩码 使用的设备 应用在别名上的标签
42     }
43    track_script {
44        chk_haproxy                                                 ###定义haproxy
45        chk_mantaince_down
46     }
47
48
49  notify_master"/etc/keepalived/notify.sh master"   // notifiy_master是内置参数,表示如果当前状态是master
50  notify_backup"/etc/keepalived/notify.sh backup"   //notify_backup 也是内置参数,表示如果当前状态是backup
51     notify_fault "/etc/keepalived/notify.sh fault"            
52 }[root@director1keepalived]# scp keepalived.conf director2:/etc/keepalived/
[root@director2keepalived ]# vim keepalived.conf
State  BACKUP
priority
99########################################提供外部的服务本##########################################
[root@node3 keepalived ]# vim notify.sh   
  1 #!/bin/bash
  2 #
  3 #
  4
  5 vip=172.16.11.1
  6 contact='root@localhost'
  7 notify() {   //这是指定的邮件格式
  8     mailsubject="`hostname` to be $1:$vip floating"   //主题:主机名变成了主还是从,vip也变了。
  9     mailbody="`date '+%F %H:%M:%S'`: vrrptransition, `hostname` changed to be $1"  //时间,…正在转变
10     echo $mailbody | mail -s"$mailsubject" $contact        //定义发送邮件的语句
11 }
12
13 case "$1" in
14    master)
15        notify master
16        /etc/rc.d/init.d/haproxy start
17        exit 0
18    ;;
19    backup)
20        notify backup
21        /etc/rc.d/init.d/haproxy stop
22        exit 0
23    ;;
24    fault)
25        notify fault
26        /etc/rc.d/init.d/haproxy stop
27        exit 0
28    ;;
29    *)
30        echo 'Usage: `basename $0` {master|backup|fault}'
31        exit 1
32    ;;
33 esac
34chmod a+x notify.sh  //一定要给脚本文件执行权限查看我们的邮件
[root@node3keepalived ]# mail
Heirloom Mailversion 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root":2 messages 2 new
>N  1 root                  Wed Jan 14 21:59  18/686  "node3 to be master: 172.16.11.1 floating"
N  2root                   Wed Jan 14 21:59  18/686   "node3 to be backup: 172.16.11.1
floating"
&

[root@node3keepalived ]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root":2 messages 2 new
>N  1 root                  Wed Jan 14 21:59  18/686  "node3 to be master: 172.16.11.1 floating"
N  2 root                  Wed Jan 14 21:59  18/686   "node3 to be backup: 172.16.11.1
floating"
&  ##################################Nginx双主模式高可用####################################
节点一配置文件
[root@node1
keepalived ]# vim keepalived.conf
  1 ! Configuration File for keepalived
  2
  3 global_defs {
  4   notification_email {
  5         root@node1
  6         root@node3
  7    }
  8   notification_email_from root@node3
  9   smtp_connect_timeout 3
10   smtp_server 127.0.0.1
11   router_id LVS_DEVEL
12 }
13
14 vrrp_script chk_nginx {
15    script "killall -0 nginx"
16    interval 1
17    weight -5
18 }
19
20 vrrp_script chk_mantaince_down {
21   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit0"
22   interval 1
23   weight -5
24 }
25
26 vrrp_instance VI_1 {
27    interface eth0
28    state BACKUP
29    priority 98
30    virtual_router_id 110
31    garp_master_delay 1
32
33    authentication {
34        auth_type PASS
35        auth_pass password
36     }
37    track_interface {
38       eth0
39     }
40    virtual_ipaddress {
41        172.16.11.11/16 dev eth0 label eth0:1
42     }
43    track_script {
44        chk_mantaince_down
45        chk_nginx
46     }
47    notify_master "/etc/keepalived/notify.sh master"
48    notify_backup "/etc/keepalived/notify.sh backup"
49    notify_fault "/etc/keepalived/notify.sh fault"
50 }
51 vrrp_instance VI_2 {
52      interface eth0
53      state MASTER
54      priority 100
55      virtual_router_id 111
56      garp_master_delay 1 57
58      authentication {
59          auth_type PASS
60          auth_pass adminadmin
61      }
62      virtual_ipaddress {
63          172.16.11.12/16 dev eth0 label eth0:1
64      }
65      track_script {
66          chk_nginx
67          chk_mantaince_down
68      }
69
70
71      notify_master "/etc/keepalived/notify.sh master"
72      notify_backup "/etc/keepalived/notify.sh backup"
73      notify_fault "/etc/keepalived/notify.sh fault"
74   } 节点二配置文件                              
[root@node3keepalived ]# vim keepalived.conf
  1 ! Configuration File for keepalived
  2
  3 global_defs {
  4   notification_email {
  5         root@node1
  6         root@node3
  7    }
  8   notification_email_from root@node3
  9   smtp_connect_timeout 3
10   smtp_server 127.0.0.1
11   router_id LVS_DEVEL
12 }
13
14 vrrp_script chk_nginx {
15    script "killall -0 nginx"
16    interval 1
17    weight -5
18 }
19
20 vrrp_script chk_mantaince_down {
21   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit0"
22   interval 1
23   weight -5
24 }
25
26 vrrp_instance VI_1 {
27    interface eth0
28    state MASTER
29    priority 100
30    virtual_router_id 110
31    garp_master_delay 1
32
33    authentication {
34        auth_type PASS
35        auth_pass password
36     }
37    track_interface {
38       eth0
39     }
40    virtual_ipaddress {
41        172.16.11.11/16 dev eth0 label eth0:1
42     }
43    track_script {
44        chk_mantaince_down
45        chk_nginx
46     }
47    notify_master "/etc/keepalived/notify.sh master"
48    notify_backup "/etc/keepalived/notify.sh backup"
49    notify_fault "/etc/keepalived/notify.sh fault"
50 }
51 vrrp_instance VI_2 {
52      interface eth0
53      state BACKUP
54      priority 98
55      virtual_router_id 111
56      garp_master_delay 1
57
58      authentication {
59          auth_type PASS
60          auth_pass adminadmin
61      }
62      virtual_ipaddress {
63          172.16.11.12/16 dev eth0 label eth0:1
64      }
65      track_script {
66          chk_nginx
67          chk_mantaince_down
68      }
69
70
71      notify_master "/etc/keepalived/notify.sh master"
72      notify_backup "/etc/keepalived/notify.sh backup"
73      notify_fault "/etc/keepalived/notify.sh fault"
74   }##################################外部控制添加脚本 #################################################          
[root@node1
keepalived ]# vim notify.sh
  1 #!/bin/bash
  2 #
  3 #
  4
  5 vip=172.16.11.1
  6 contact='root@localhost'
  7 notify() {
  8    mailsubject="`hostname` to be $1: $vip floating"
  9    mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname`changed to be $1"
10    echo $mailbody | mail -s "$mailsubject" $contact
11 }
12
13 case "$1" in
14    master)
15        notify master
16   
17        exit 0
18    ;;
19    backup)
20        notify backup
21      
22        exit 0
23    ;;
24    fault)
25        notify fault
26        /etc/rc.d/init.d/nginx stop
27        exit 0
28    ;;
29    *)
30        echo 'Usage: `basename $0` {master|backup|fault}'
31        exit 1
32    ;;
33 esac  ###############################IPVS+KEEPALIVE实验准备如下##############################
Master  172.16.11.1
Backup
172.16.249.122

Node1:
172.16.249.106

Node2:172.16.249.141
vip 172.16.11.11
##########################前端director的高可用准备#######################################
#######################主机名解析一致###################################################
[root@director1 ~]#vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4
localhost4.localdomain4
::1         localhost localhost.localdomain
localhost6 localhost6.localdomain6
172.16.0.1  server.magelinux.com server
172.16.11.1 director1
172.16.249.122 director2
[root@director1 ~]#scp /etc/hosts 172.16.249.122:/etc/hosts
##########################时间保持同步###################################################
[root@director2 ~ ]#crontab -e
*/3 * * * *  /usr/sbin/ntpdate 172.16.0.1 &> /dev/null
[root@director1 ~]# crontab -e
*/3 * * * *  /usr/sbin/ntpdate 172.16.0.1 &> /dev/null
##########################基于主机间无密钥通信###########################################
[root@director2 ~ ]# ssh-keygen -P ''
[root@director2 ~ ]# ssh-copy-id -i ~/.ssh/id_rsa.pub director1
[root@director1 ~]# ssh-keygen -P ''
[root@director1 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub director2
######################配置前端使用ipvs以及keepalived高可用################################
#######################添加ipvs脚本,便于写规则##########################################
[root@director1 ~]#yum -y install keepalived ipvsadm
[root@director2 ~]# yum -y install keepalived ipvsadm
#####################修改节点一配置文件#################################################
[root@director1keepalived]# cp keepalived.conf keepalived.conf.bak
[root@director1 keepalived ]# vim keepalived.conf
  1 ! Configuration File for keepalived
  2
  3 global_defs {
  4   notification_email {  #####接受邮件地址
  5     root@director1  
  6     root@director2
  7    }
  8   notification_email_from admin@stu11.com  发送邮件的
  9   smtp_server 127.0.0.1
10   smtp_connect_timeout 30
11   router_id LVS_DEVEL
12 }
13
14 vrrp_instance VI_1 {       ###定义实例
15    state MASTER            ###主节点
16    interface eth0          ###网卡接口
17    virtual_router_id 101   ###路由ID主备必须一致
18    priority 100            ###优先级,主高于备
19    advert_int 1
20    authentication {        ###通信认证
21        auth_type PASS
22        auth_pass password  ###密码使用随机字符串就可以,但是主备保持一致
23     }
24    virtual_ipaddress {
25       172.16.11.11/16 brd 172.16.11.11 dev eth0 label eth0:0  ##虚拟IP
26     }
27 }
28
29 virtual_server 172.16.11.11 {  #####定义虚拟主机
30    delay_loop 6
31    lb_algo rr                  ###rr调度算法
32    lb_kind DR                  ###lvs的DR模型
33    nat_mask 255.255.0.0
34    persistence_timeout 50
35    protocol TCP
36
37 real_server 172.16.249.106 80 {    ###后端真实主机
38        weight 1
39        HTTP_GET {                  ###HTTP协议检测
40            url {
41               path /               ###检测请求路径
42         status_code 200            ###期望回应的状态码
43            }
44            connect_timeout 3       ###超时时长
45            nb_get_retry 3          ###重试时长
46            delay_before_retry 3    ###延迟时长
47        }
48     }
49
50
51 real_server 172.16.249.141 80 {
52        weight 1
53        HTTP_GET {
54            url {
55               path /
56         status_code 200
57            }
58            connect_timeout 3
59            nb_get_retry 3
60            delay_before_retry 3
61        }
62     }
63 }
#############################复制到第二个节点,修改如下选项##########################
[root@director2 keepalived ]# mv keepalived.conf keepalived.conf.bak
#####节点二做备份
[root@director1keepalived]# scp keepalived.conf director2:/etc/keepalived/
[root@director2keepalived ]# vim keepalived.conf
State  BACKUP
priority
99  
###############################确保开机自动启动#####################################
[root@director1 keepalived]# chkconfig keepalived on ;ssh director2 "chkconfig keepalived on";
[root@director1 keepalived]# chkconfig --list keepalived;ssh director2 "chkconfig --list
keepalived"
keepalived    0:off        1:off        2:on        3:on        4:on        5:on        6:off
keepalived    0:off        1:off        2:on        3:on        4:on        5:on        6:off
################################同时启动两个节点,观察VIP ###########################
[root@director1
keepalived]# service keepalived
start;ssh director2 "service keepalived start
###############################查看VIP,以及日志主备健康状态##########################
[root@director1
keepalived]# ifconfig
[root@director1keepalived]# tail /var/log/messages
Jan 21 11:53:11director1 Keepalived_vrrp[5698]: Using LinkWatch kernel netlink reflector...
Jan 21 11:53:11director1 Keepalived_healthcheckers[5697]: Using LinkWatch kernel netlinkreflector...
Jan 21 11:53:11director1 Keepalived_vrrp[5698]: VRRP sockpool: [ifindex(2), proto(112),unicast(0), fd(10,11)]
Jan 21 11:53:11director1 Keepalived_healthcheckers[5697]: Activating healthchecker for service[172.16.249.106]:80
Jan 21 11:53:12director1 Keepalived_vrrp[5698]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jan 21 11:53:13director1 Keepalived_vrrp[5698]: VRRP_Instance(VI_1) Entering MASTER STATE
Jan 21 11:53:13director1 Keepalived_vrrp[5698]: VRRP_Instance(VI_1) setting protocol VIPs.
Jan 21 11:53:13director1 Keepalived_vrrp[5698]: VRRP_Instance(VI_1) Sending gratuitous ARPs oneth0 for 172.16.11.11
Jan 21 11:53:13director1 Keepalived_healthcheckers[5697]: Netlink reflector reports IP172.16.11.11 added
Jan 21 11:53:18director1 Keepalived_vrrp[5698]: VRRP_Instance(VI_1) Sending gratuitous ARPs oneth0 for 172.16.11.11
########################配置主备节点之间的路由间转发###########################################
[root@director1
keepalived]# echo 1 > /proc/sys/net/ipv4/ip_forward;ssh director2 "echo1 > /proc/sys/net/ipv4/ip_forward";
[root@director1
keepalived]# echo 1 > /proc/sys/net/ipv4/ip_forward;ssh director2 "echo1 > /proc/sys/net/ipv4/ip_forward";
后端节点
vim /var/www/html/index.html
www.stu11.1.com
vim /var/www/html/index.html
www.stu11.2.com



#####################为两个后端主机配置VIP和内核参数#########################################
[root@node2 ~ ]# vim
rs.sh
  1 #!/bin/bash
  2    #
  3    vip=172.16.11.11
  4    case $1 in
  5    start)
  6      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  7      echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  8      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  9      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
10
11      ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
12      route add -host $vip dev lo:0
13        ;;
14        stop)
15        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
16        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
17        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
18        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
19
20        ifconfig lo:0 down
21        route del -host $vip dev lo:0
22        ;;
23 esac
[root@node2 ~ ]#chmod +x rs.sh
[root@node2 ~ ]#bash -x rs.sh start
[root@node2 ~ ]#ifconfig
lo:0      Link encap:Local Loopback
          inet addr:172.16.11.11  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:65536
Metric:1
################################查看MASTER节点的IPVS规则################################
[root@director1keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
ProtLocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.11.11:0 rr persistent 50
  -> 172.16.249.106:80            Route   1     0          0        
  -> 172.16.249.141:80            Route   1     0          0##################################测试结果##########################################################






至此IPVS+KEEPALIVED高可用全部结束!!!!!!!!








运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657531-1-1.html 上篇帖子: keepalived 配置 下篇帖子: LVS/NAT + keepalived负载均衡实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表