解决方法很简单:
1. 打开 Internet 信息服务(IIS) 管理器
2. 右击 网站 ,点击 属性
3. 切换到 HTTP 头 选项卡
4. 点击 MIME 类型 按钮
5. 点击 新建,
扩展名为 .ini
MIME类型为 application/octet-stream
6. 一路确定…搞定
IIS 下面文件打不开大多数情况下无怪乎以下两种情况:
- MINE 类型设置不正确
- 文件权限设置不正确
解决方法很简单:
1. 打开 Internet 信息服务(IIS) 管理器
2. 右击 网站 ,点击 属性
3. 切换到 HTTP 头 选项卡
4. 点击 MIME 类型 按钮
5. 点击 新建,
扩展名为 .ini
MIME类型为 application/octet-stream
6. 一路确定…搞定
IIS 下面文件打不开大多数情况下无怪乎以下两种情况:
Host A IP: 192.168.108.125
Host B IP: 192.168.108.124
下文所用 MongoDB 版本均为 2.0.7 ,操作系统为 Debian 6。
打开两台机器的防火墙 没开防火墙的同学这部分可以不用看了
在 Host A (数据源) 上执行如下命令
1 | iptables -A INPUT -s HostA/32 -p tcp -m tcp --dport 27017 -j ACCEPT |
在 Host B (迁移目标) 上执行如下命令
1 | iptables -A INPUT -s HostB/32 -p tcp -m tcp --dport 27017 -j ACCEPT |
为了安全,我的 MongoDB 是只绑定在本地环回接口上的,打开 /etc/mongodb.conf
,注释掉 bind_ip = 127.0.0.1
这行。
同时,在文件末尾加上replSet = rs0
以打开 Replication 功能。
1 | dbpath = /db/mongo |
现在,重启 Host A 和 Host B 的 MongoDB。
在 Host A 上运行 mongo
,输入以下命令
1 | config = {_id: 'rs0', members: [ |
稍等一会儿,系统会有下列提示
1 | rs.initiate(config) |
打开 Host B的 mongo
,我们可以看到有如下的提示
1 | MongoDB shell version: 2.0.7 |
输入 rs.status()
查看恢复状态
1 | RECOVERING> rs.status() |
依照数据量的大小可能需要传输一阵子,利用这个空闲我们把 Host A 上的网络服务迁移到 Host B 上
在 MongoDB 中,从 Slave 上执行查询需要在查询前先执行 db.getMongo().setSlaveOk()
,否则会出现这样的提示:
RECOVERING> db.tasks.find(); error: { "$err" : "not master and slaveok=false", "code" : 13435 }
如果你的程序木有注意这一点,那么…赶紧给我改代码去!!!快去!!!
现在我们的 Web 应用程序已经复制到了 Host B 的硬盘里,并已经可以提供服务。
打开 Host A 的 nginx 的配置文件,在这里是 /etc/nginx/nginx.conf
。
将原有 server
部分均删除并替换为如下内容:
1 | upstream hostb { |
执行命令 /usr/local/nginx/sbin/nginx -s reload
重新载入 nginx 配置。
在 MongoDB 完成复制后, Host B 的提示符会变成:
1 | MongoDB shell version: 2.0.7 |
这时候我们将 Host B 变更为 Primary, 在 Host A 上执行如下命令:
1 | cfg = rs.conf() |
稍等一会儿, Host A 就会变更为 Secondary:
1 | Sat Aug 25 00:18:49 DBClientCursor::init call() failed Sat Aug 25 00:18:49 query failed : admin.$cmd { replSetReconfig: { _id: "rs0", version: 2, members: [ { _id: 0, host: "192.168.108.125:27017", priority: 10.0 }, { _id: 1, host: "192.168.108.124:27017", priority: 20.0 } ] } } to: 127.0.0.1 Sat Aug 25 00:18:49 trying reconnect to 127.0.0.1 Sat Aug 25 00:18:49 reconnect 127.0.0.1 ok reconnected to server after rs command (which is normal) PRIMARY> Sat Aug 25 00:18:59 Socket recv() errno:104 Connection reset by peer 127.0.0.1:27017 Sat Aug 25 00:18:59 SocketException: remote: 127.0.0.1:27017 error: 9001 socket exception [1] server [127.0.0.1:27017] Sat Aug 25 00:18:59 DBClientCursor::init call() failed > Sat Aug 25 00:19:00 trying reconnect to 127.0.0.1 Sat Aug 25 00:19:00 reconnect 127.0.0.1 ok SECONDARY> |
现在我们可以关掉 Host A的 MongoDB。
打开 Host B 的 /etc/mongodb.conf
,去除 Host B 设置中的 replSet = rs0
:
1 | dbpath = /db/mongo |
重启 MongoDB,至此,本次迁移已经完成,等待 DNS解析生效 后,就可以把 Host A 下架了。
最近在研究虚拟化。。。嗯当然 OpenVZ 这怎么说呢,不算是虚拟化吧。
因为我们有些奇怪的需求,SolusVM 什么的不符合要求,所以在自己写。
嗯。然后呢,(啊喂主题是啥?!
嗯。。。有的时候呢用户一不小心把 SSH 搞残了或者把网络搞残了,这个时候!
就需要登录 OpenVZ 的控制台了,一个人用 OpenVZ 的时候很简单,直接 vzctl enter VEID 就可以了。
但!多人环境下如何操作捏。。。
首先我们为需要console的用户添加一个账户并设置密码
1 | useradd console-vz1000 -p wulala -s /usr/local/sbin/vzconsole |
然后创建vzconsole这个文件
1 | #!/bin/sh |
记得给这个文件加上执行权限
1 | chmod +x /usr/local/sbin/vzconsole |
在sudoer里添加相关内容。。直接在最后面新建一行
1 | console-vz1000 ALL = NOPASSWD : /usr/local/sbin/vzconsole |
Done..