百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Linux搭建nginx+keepalived 高可用(主备+双主模式)

off999 2025-01-16 20:28 28 浏览 0 评论

一:keepalived简介

反向代理及负载均衡参考:nginx反向代理与负载均衡

当你了解会搭建nginx负载均衡后,需要考虑nginx这台服务器的安全性啦,如果只有一台,这台nginx一出问题,web就会无法访问的情况,所以为了应对这种情况,就需要两台nginx做主备服务器。

nginx+keepalived如下图所示:

Keepalived:

是Linux下面实现VRRP备份路由的高可靠性运行件。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。

VRRP协议:全称 Virtual Router Redundancy Protocol

即虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(RouterGroup),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

总结:两台主备机器通过keepalived,虚拟一个IP,也就是VIP,不是贵宾的意思,是Virtual IP的意思。VIP开始为主机器所有,备份机为空闲状态,同时在两台keepalived之间通信相当于有一条心跳线,通过心跳线互相通信,只要主机器监控(通过脚本)到ngin服务停止,则主机器自己停止keepalived,将VIP交给备份机器处理web请求,直至主机器再次恢复正常,将VIP返还给主机器。

高可用有2种方式:

1、Nginx+keepalived 主从配置

这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

2、Nginx+keepalived 双主配置

这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。

如下图所示:


模拟搭建环境:4台主机:系统centos7,注:本人搭建的环境为双网卡模式,192.168.200.0/24外网,172.16.2.0/内网。所以本文配置的VIP均为外网IP。

  • nginx1: 172.16.2.50(已安装nginx)外网ip:192.168.200.150
  • nginx2: 172.16.2.51(已安装nginx)外网ip:192.168.200.151
  • web1: 172.16.2.20(已安装nginx,php)
  • web1: 172.16.2.21(已安装nginx,php)

目的:配置nginx主备,模拟其中一台服务终止后,另外一台可正常访问到web服务器,当那台恢复正常时,两台恢复同时处理请求。


二:在nginx服务安装keepalived软件

keepalived官网:
https://www.keepalived.org/

由于yum安装的版本实在太旧了,所以自己下载下来编译安装(不嫌弃旧版本的直接 yum -y install keepalived 一步到位即可)。

1:安装基础依赖包,有的话就没必要安装了

主要是gcc ,openssl-devel, libnl, libnl-devel, libnfnetlink-devel, net-tools, vim这几个包。

yum install -y gcc openssl-devel libnl libnl-devel libnfnetlink-devel net-tools vim

2:在官网下载最新版:

目前最新版为2.2.2

wget https://www.keepalived.org/software/keepalived-2.2.2.tar.gz

3: 解压到指定目录,并重命名:

解压,移动到 /usr/local 目录,重命名keepalived文件夹

tar -zxvf keepalived-2.2.2.tar.gz
mv keepalived-2.2.2 /usr/local/keepalived

4:进入目录编译安装:

cd /usr/local/keepalived/
./configure
make && make install

5:复制相关文件到系统中:

(之所以不喜欢编译安装,就是这一步,由于版本不同,移少移错都可能导致启动失败)

确定好自己的文件路径,复制到系统相关文件夹即可。

mkdir /etc/keepalived
cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/sbin/

6:启动测试:

/etc/init.d/keepalived start

提示 正确 或者 OK ,则表示安装成功:

但是这时用 /etc/init.d/keepalived status 或者 systemctl status keepalived.service 命令查看服务是关闭状态,并没有启动起来。

那是因为我们配置文件并没有配置好,无论怎么start都起不来的。

三:keepalived配置文件基础配置

此配置为主备模式,先理解主备后,在配置双主模式更简单。

配置文件位置:
/etc/keepalived/keepalived.conf

打开也许会很懵,其实用不了太多模块,先备份原配置,然后删掉其他留下最基础的配置(配置全部参数说明参考本文最后)。

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf

基础三个模块,global_defs全局模块,vrrp_instance配置vip模块,vrrp_script 脚本模块,用来检测nginx服务。

注:vrrp_script定义脚本后,在vrrp_instance模块必须加上track_script 参数。我就入了这个坑,导致脚本不生效。

global_defs模块参数:

  • notification_email : keepalived在发生诸如切换操作时需要发送email通知地址,后面的 smtp_server 相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。
  • router_id : 机器标识,通常可设为hostname。故障发生时,邮件通知会用到。

vrrp_instance模块参数:

  • state : 指定instance(Initial)的初始状态, MASTER 或者BACKUP,不是唯一性的,跟后面的优先级priority参数有关。
  • interface : 实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的,(注意自己系统,我的默认是ens33,有的是eth0)
  • mcast_src_ip : 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
  • virtual_router_id : 这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
  • priority : 设置本节点的优先级,优先级高的为master(1-255)
  • advert_int : 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
  • authentication : 定义认证方式和密码,主从必须一样
  • virtual_ipaddress : 这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
  • track_script : 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。

vrrp_script模块参数:

告诉 keepalived 在什么情况下切换,所以尤为重要。可以有多个 vrrp_script

  • script : 自己写的检测脚本。也可以是一行命令如killall -0 nginx
  • interval 2 : 每2s检测一次
  • weight -5 : 检测失败(脚本返回非0)则优先级 -5
  • fall 2 : 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间)
  • rise 1 : 检测 1 次成功就算成功。但不修改优先级

在主nginx服务器172.16.2.50上, VIP设置为 192.168.200.200 ,配置如下:

global_defs {
	router_id Nginx_01
	}
vrrp_script check_nginx {
	script "/etc/keepalived/check_nginx.sh"
	interval 2
	weight -5
	fall 3
	rise 2
	}
vrrp_instance VI_1 {
	state MASTER
	interface ens33
	virtual_router_id 51
	priority 150
	advert_int 1
	authentication {
	auth_type PASS
	auth_pass 1111
	}
virtual_ipaddress {
	192.168.200.200
	}
track_script {
	check_nginx
	}
}

在备用nginx服务器172.16.2.51上,配置一样,就三点不同,一点必须相同,1. router_id 不同, 2. state BACKUP 不同 ,3. priority 不同。 4. virtual_router_id 必相同。 配置如下:

global_defs {
	router_id Nginx_02
	}
vrrp_script check_nginx {
	script "/etc/keepalived/check_nginx.sh"
	interval 2
	weight -5
	fall 3
	rise 2
	}
vrrp_instance VI_1 {
	state BACKUP
	interface ens33
	virtual_router_id 51
	priority 100
	advert_int 1
	authentication {
	auth_type PASS
	auth_pass 1111
	}
virtual_ipaddress {
	192.168.200.200
	}
track_script {
	check_nginx
	}
}


四:nginx脚本与配置

由于待会测试,所以第一个简单脚本就可以了,只要判断nginx进程没有数值,则停止keepalived服务。测试脚本如下:

#! /bin/bash
pidof nginx
if [ $? -ne 0 ];then
	/etc/init.d/keepalived stop
fi

如果测试完,可以加个尝试启动nginx,如果尝试失败两次就停止keepalived服务。脚本如下:

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
	/usr/local/bin/nginx
	sleep 2
	counter=$(ps -C nginx --no-heading|wc -l)
	if [ "${counter}" = "0" ]; then
		/etc/init.d/keepalived stop
	fi
fi

nginx服务器中的nginx配置:只需要把 server_name 改成VIP的IP即可,其他无需更改,负载均衡时也只要访问这个VIP地址即可。

upstream phpserver1 {
	server 172.16.2.20:9091;
	server 172.16.2.21:9092;
}
server {
	listen 80;
	server_name 192.168.200.200;
	location / {
	proxy_pass http://phpserver1;
	index index.html index.htm;
	}
}


五:keepalived启动与测试

1:启动nginx服务,在启动keepalived服务:

依次在两台nginx服务器启动,

systemctl restart nginx.service
syetemctl start keepalived

此时在用 syetemctl status keepalived 查看服务已经正常启动!

分别在nginx主备两台用 ip addr 查看IP地址:主nginx1的网卡此时已经自动获取VIP,备nginx2则没有处于空闲状态!

在浏览器访问VIP:192.168.200.200,也正常,可依次负载均衡至两台web服务器的测试页面,如图展示!

2:模拟主nginx1的nginx服务停止

systemctl stop nginx.service

再次在两台nginx服务器上ip addr查看ip地址,主nginx1上此时已经没有VIP:192.168.200.200了,在备nginx2此时已经得到VIP了,浏览器访问VIP依然正常可得到web1和web2的测试网页!

3:测试再次启动主nginx服务器nginx服务和keepalived服务

systemctl start nginx.service
syetemctl start keepalived

最后在主nginx1上启动nginx后,在启动keepalived后,nginx重新抢回VIP,一切恢复正常。备nginx2恢复空闲状态。可自行测试查看结果。

六:keepalived双主模式

1:keepalived配置

当了解主备模式后,双主模式就容易配置多了。只需要在每台keepalived配置文件,加上一个vrrp_instance命名vrrp_instance VI_2即可,更改几个参数,设置另一个 VIP:192.168.200.210

nginx1:state BACKUP ,priority 100, virtual_router_id 52

nginx2:state MASTER ,priority 150, virtual_router_id 52

nginx1的配置如下:

global_defs {
	router_id Nginx_01
	}
vrrp_script check_nginx {
	script "/etc/keepalived/check_nginx.sh"
	interval 2
	weight -5
	fall 3
	rise 2
	}
vrrp_instance VI_1 {
	state MASTER
	interface ens33
	virtual_router_id 51
	priority 150
	advert_int 1
	authentication {
	auth_type PASS
	auth_pass 1111
	}
virtual_ipaddress {
	192.168.200.200
	}
track_script {
	check_nginx
	}
}
vrrp_instance VI_2 {
	state BACKUP
	interface ens33
	virtual_router_id 52
	priority 100
	advert_int 1
	authentication {
	auth_type PASS
	auth_pass 1111
	}
virtual_ipaddress {
	192.168.200.210
	}
track_script {
	check_nginx
	}
}


nginx2配置如下:

global_defs {
	router_id Nginx_02
	}
vrrp_script check_nginx {
	script "/etc/keepalived/check_nginx.sh"
	interval 2
	weight -5
	fall 3
	rise 2
	}
vrrp_instance VI_1 {
	state BACKUP
  interface ens33
  virtual_router_id 51
  priority 150
  advert_int 1
  authentication {
  auth_type PASS
	auth_pass 1111
	}
virtual_ipaddress {
	192.168.200.200
	}
track_script {
	check_nginx
	}
}

vrrp_instance VI_2 {
  state MASTER
  interface ens33
  virtual_router_id 52
  priority 150
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
virtual_ipaddress {
	192.168.200.210
	}
track_script {
	check_nginx
	}
}

同样,在nginx做负载均衡时,需要在nginx的配置文件中,server_name加上这个192.168.200.210这个VIP2的地址,配置如下:

upstream phpserver1 {
	server 172.16.2.20:9091;
	server 172.16.2.21:9092;
	}
server {
  listen 80;
  server_name 192.168.200.200;
  server_name 192.168.200.210;
location / {
  proxy_pass http://phpserver1;
  index index.html index.htm;
  }
}

2:启动测试,查看ip

依次重启两台的keepalived服务,查看IP,最后看到的为以下结果,

在浏览器分别访问192.168.200.200和192.168.200.210都可以负载均衡至web1和web2。

双主模式配置完成!!

七:keepalived配置文件详解(参考)

#全局配置
global_defs {
  # 邮件通知信息
  notification_email {
  # 定义收件人
  acassen@firewall.loc
  }
# 定义发件人
  notification_email_from Alexandre.Cassen@firewall.loc
  # SMTP服务器地址
  smtp_server 192.168.200.1
  smtp_connect_timeout 30
  # 路由器标识,一般不用改,也可以写成每个主机自己的主机名
  router_id LVS_DEVEL
  # VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,下面是默认值
  vrrp_mcast_group4 224.0.0.18
  vrrp_mcast_group6 ff02::12
}

# 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换
vrrp_script SCRIPT_NAME {
}

# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
vrrp_instance VI_1 {
  # 定义初始状态,可以是MASTER或者BACKUP
  state MASTER
  # 工作接口,通告选举使用哪个接口进行
  interface ens33
  # 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
  # ID还是虚拟MAC最后一段地址的信息,取值范围0-255
  virtual_router_id 51
  # 使用哪个虚拟MAC地址
  use_vmac XX:XX:XX:XX:XX
  # 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去
  track_interface {
  	eth0
  	ens33
  }
# 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
priority 100
# 通告频率,单位为秒
advert_int 1
# 通信认证机制,这里是明文认证还有一种是加密认证
	authentication {
    auth_type PASS
    auth_pass 1111
    }
# 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
	virtual_ipaddress {
    # IP/掩码 dev 配置在哪个网卡
    192.168.200.16/24 dev eth1
    # IP/掩码 dev 配置在哪个网卡的哪个别名上
    192.168.200.17/24 dev label eth1:1
  }
# 虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去
  virtual_routes {
    192.168.110.0/24 dev eth2
  }
# 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
  nopreempt|preempt
  # 如果是抢占默认则可以设置等多久再抢占,默认5分钟
  preempt delay 300
  # 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
  track_script {
  }
  # 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
  notify_master ""
  notify_backup ""
  notify_fault ""
}

# 定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则
# 所以通过这里就可以看出来keepalive天生就是为ipvs而设计的
virtual_server 10.10.10.2 1358 {
  delay_loop 6
  # 算法
  lb_algo rr|wrr|lc|wlc|lblc|sh|dh
  # LVS的模式
  lb_kind NAT|DR|TUN
  # 子网掩码,这个掩码是VIP的掩码
  nat_mask 255.255.255.0
  # 持久连接超时时间
  persistence_timeout 50
  # 定义协议
  protocol TCP
  # 如果后端应用服务器都不可用,就会定向到那个服务器上
  sorry_server 192.168.200.200 1358
  # 后端应用服务器 IP PORT
  real_server 192.168.200.2 1358 {
    # 权重
    weight 1
    # MSIC_CHECK|SMTP_CHEKC|TCP_CHECK|SSL_GET|HTTP_GET这些都是
    # 针对应用服务器做健康检查的方法
    MISC_CHECK {}
    # 用于检查SMTP服务器的
    SMTP_CHEKC {}
    # 如果应用服务器不是WEB服务器,就用TCP_CHECK检查
    TCP_CHECK {
    # 向哪一个端口检查,如果不指定默认使用上面定义的端口
    connect_port <PORT>
    # 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
    bindto <IP>
    # 连接超时时间
    connect_timeout 3
    }
  # 如果对方是HTTPS服务器就用SSL_GET方法去检查,里面配置的内容和HTTP_GET一样
  SSL_GET {}
  # 应用服务器UP或者DOWN,就执行那个脚本
  notify_up "这里写的是路径,如果脚本后有参数,整体路径+参数引起来"
  notify_down "/PATH/SCRIPTS.sh 参数"
  # 使用HTTP_GET方法去检查
  HTTP_GET {
  # 检测URL
  url {
    # 具体检测哪一个URL
    path /testurl/test.jsp
    # 检测内容的哈希值
    digest 640205b7b0fc66c1ea91c463fac6334d
    # 除了检测哈希值还可以检测状态码,比如HTTP的200 表示正常,两种方法二选一即可
    status_code 200
  	}
  url {
    path /testurl2/test.jsp
    digest 640205b7b0fc66c1ea91c463fac6334d
  	}
  url {
    path /testurl3/test.jsp
    digest 640205b7b0fc66c1ea91c463fac6334d
 	 }
  # 向哪一个端口检查,如果不指定默认使用上面定义的端口
  connect_port <PORT>
  # 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
  bindto <IP>
  # 连接超时时间
  connect_timeout 3
  # 尝试次数
  nb_get_retry 3
  # 每次尝试之间间隔几秒
  delay_before_retry 3
 	 }
  }
  real_server 192.168.200.3 1358 {
    weight 1
    HTTP_GET {
    url {
    path /testurl/test.jsp
    digest 640205b7b0fc66c1ea91c463fac6334c
  	}
  url {
    path /testurl2/test.jsp
    digest 640205b7b0fc66c1ea91c463fac6334c
    }
  connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  }
}

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: