移植搭建阿里云linux服务器

来源:互联网 发布:windows 设备管理中心 编辑:程序博客网 时间:2024/05/22 03:11

流程:linux购买—–>环境配置——>服务器代码移植——>服务器代码调试——>服务器应用安全稳定优化—–>服务器部署—–>连接测试

一、购买
1、必须有个实名认证的账号,区别企业账号还是个人账号。绑定服务器之后,账号类型不可更改。
2、登录阿里云进行配置选择,根据业务需求选型。如开通网路带宽,默认分配公网静态IP和局域网IP。
3、付款之后,相应账号会发送相关电脑信息过来,包括(IP地址,实例号,还有控制平台连接的密码)。
4、进入服务器之后里面就是一个原始的linux系统,基本上所有的应用软件需要自己安装,除去python。
二、环境配置
1、进入之后,创建用户Ryze自己随便起就好,输入 密码和账号后,使用新建的用户进行访问,使用客户端xshell(者别的)进行ssh连接。
2、进行显示配置和python版本下载,如果python使用的版本不支持我们的应用的话,我们要进行另外安装一个版本的python,目前使用python3.3m,调用LBS应用数据会用到。
3、用户命令行显示配置,这个要用到/home/Ryze/目录下,找到隐藏的.bashrc配置文件,打开进行配置快捷方式。
4、文件里面会标有alias快捷键和PS1=’[[\e[32m]#\t#[\e[31m]\u@[\e[36m]\h \w]$[\e[m]’,这个是进行命令行颜色设置的。
5、进行第三方软件库的搭建/数据库/ICE接口/libevent/log4cplus/google/OTL,这些配置中有一部分也是在/home/Ryze/目录下,里面的隐藏 文件叫.bash_profile这个是环境变量的配置详见服务器配置文件。例如:
这里写图片描述
6、这个.bash_profile运行的前提是/etc/bash_profile文件已经起作用。ICE和ORACLE的环境变量是在/etc/bash_profile里面实现定义和export的。
7、配置文件配置完成之后,要把相应的文件目录拷贝过来,尽量的路径不要变,因为makefile进行编译时候路径如果是绝对路径的话,就会报错,找不到目录文件。
三、代码移植调试
1、按照编译链的规则修改,尽量保持目录名字和路径一样,进行使用环境变量进行指定路径,否则后期移植会很麻烦。
2、把移植过来的源码文件进行顺序编译:
common—>protocol—>session—>balance—>task—>upload—>sending—>timing
3、编译第一个common源码,可能使用makefile会报很多错误,先进行单个.cpp文件进行编译,通过报出的错误看看是什么信息。在进行静态或者是动态库的添加。
4、编译过程中需要的头文件和库文件
.h文件:
/user/local/include/python3.3m
/user/local/include/log4cplus
/user/local/include/google
/opt/oracle
/opt/Ice-3.5.0
/HOME/include/common
以上的文件一定要把全部拷贝到新的服务器上面。
.so和.a文件:(这些文件是编译链接的时候用的,不可缺少)
/user/local/lib
/$HOME/common/lib
说明:我们的应用程序只是调用的python3.3m的库,在linux中的一些开发环境和依赖都是python2.6.6。 两者千万别更新,否则应用调用失败。
5、以上文件准备好之后,编译还是会有问题,这时候要进行强调内容新的ln软连接建立,因为这个库进行连接的时候会调用动态链接库,可能实际
的库在变 化,但是链接库不会变化。
6、文件全部编译成功之后,代码没有报错,但是运行时候直接挂掉,因为运行配置还有很多没有配置,不符合当前的运行环境导致出错,我们一个个进行排查
balance进程:运行报出连接数据库出错。
@1:抛出错误信息是:ORA-21561,经过查找是因为linux的hostname与/etc/sysconfig/network下的对应的127.0.0.1对应的名字不一样导致。
阿里云购买的时候给出的是服务器串号:****************很长的名字
然而配置文件中是:localhost,就会导致对应连接的时候,oracle验证失败,这时候要对服务器串号进行修改成localhost即可。之后运行DB连接成功。
在linux命令行下进行输入:hostname 会显示的阿里云分配的一串号码.这个与/etc/sysconfig/network不同,就会导致ORACLE验证失败。这时候修改这个里面的文件名字与/etc/hosts里面的127.0.0.1对应的localhost一样即可。配置完成要重启才生效或者重启网卡。这时候连接数据库正常。

远程redis出错,这个应该是iptables端口和IP过滤的原因,之前因为是本地连接redis不需要进行外网开放。现在阿里云服务端要进行连接远程redis,所以要在Iptables中进行端口源IP添加信任。现在启用本地redis服务,再次连接成功。

task服务程序运行失败:
iptables中并没有限制,后来才发现是阿里的服务层面做了端口限制。因为在购买的时候,上面有个默认的端口开放配置,只开放了ICMP和22/2389端口其他的端口没有开放。是因为购买的是香港服务器,宽带都是专网,没有经典网络选择。实际的公网IP不针对你这台服务器,应该是nat映射过来的信息。所以说阿里在控制台增加了端口配置,你开放哪个端口,他就会把相应的端口的映射到你的内网linux机子上(这是我的理解)。
登录阿里的控制台,添加了安全策略和规则,开放了相应的的端口,再次进行连接成功。

sending进程:
出现ICE组件异常,ICE 异常Address family not supported by protocol family
这个是因为有的系统导致ICE的组件异常,或者是底层的network代码导致用法不同导致,例如绑定的时候
srv = “default -p 25555”,原先代码是没有问题的,但是移植到阿里云上的服务器就出现了问题,应该是NetWork.cpp不同导致的。
这里是与linux系统有关系的。
这时候修改成 srv = “default -h 127.0.0.1 -p 25555”,运行时候就正常了。但是这种绑定本机回环地址的做法,外网是不可访问的,这时候
我们就必须填写一个公网IP,于是填写阿里云的外网IP。
但是提示另一个错误:
要解决这个问题就需要绑定内网的IP地址才可以(阿里云香港专网:提供内网和公网IP)。
这个公网IP不能绑定和支持,因为我们是阿里云香港的服务器,这里IP是进行虚拟nat出来的,所以外网需要映射到内网地址上才可以。
这时候因为阿里云提供云控制端,所以开放端口和安全策略的时候,会自动映射到对应的内网IP上去(意思应该就是这样)。
所以我们在控制台开放端口25555即可。(同上一个产不多)

ICE组件我觉得异常是因为系统中底层NetWork.cpp中的函数用法不一样所导致。要把地址写全 就可以了。

redis-srv redis_sending.conf&
这个redis服务程序要在后台运行才可以,因为这个程序会卡住前台运行进程,导致终端停掉。

(以上的信息仅供参考,虽然上层应用不同,但是底层与系统打交道的我觉得还是有比较相似的地方,只说明异常,不论其他)

四、服务器代码调测略过
五、服务器代码部署
1、启动添加运行应用程序
/etc/rc.d/rc.local
linux启动进程会启动rc.1 rc.2 rc.3 …..rc.local,最后的rc.local中是我们应用层启动的代码应该写的地方。
vi rc.local打开文件需要root用户,否则无法打开文件,
里面添加shell语句
runuser -l Ryze/home/coglink/release/script/run_all.sh
runuser -l Ryze /home/coglink/release/script/redis_monitor.sh
2、crontab日常进程监护运行
下载crontab日常进程监控软件,安装之后启用服务。
使用crontab -l进行查看,会提示:
no crontab for 用户名字
这个是因为,你没有把crontab日常任务进行编写,导致显示你用户没有任务日程,你只要使用
crontab -e进行编辑之后保存既可以。
10 4 * * * /HOME/release/script/run_all_upload.sh
10 9 * * * /HOME/release/script/run_all_upload.sh
5,10,15,20,25,30,35,40,45,50,55 * * * * $HOME/release/script/redis_monitor.sh
分 时 日 月 星期(0 代表周日)+ 运行脚本
相同时间属性的要以,号隔开,最后一个不需要逗号。
其他没填写的用*代表,默认每个对应的时间属性都执行。

注:以上仅供参考。


原创粉丝点击