公司的P2PServer的扩容有以下几点:
1)P2PServer.conf需要添加当前流量最小的p2pstun的外网IP地址,这一步手动输入;
2)GMS的Group.xml需要把新的P2PServer外网IP地址添加进去,这一步使用sshpass来实现;
3)数据库服务器需要把新的P2PServer外网IP地址写进语句里去,这一步同样使用sshpass来实现;
这个脚本我犯懒,就直接用shell写了,内容如下:
#!/bin/bash #Author:ChrisChan@2017-09-20 #这个脚本用于乐橙P2PServer的扩容 ip=$(ifconfigeth1|grep"inetaddr"|awk'{print$2}'|awk-F:'{print$2}') echo"本机的外网IP是:"$ip echo"准备启动乐橙P2PServer的扩容..." sleep1 echo"3..." sleep1 echo"2..." sleep1 echo"1..." #添加开机启动项 echo"cd/opt/server&&./stopAll.sh">>/etc/rc.d/rc.local echo"cd/opt/server&&nohuppythonP2PServerDog.py1>/dev/null2>&1&">>/etc/rc.d/rc.local echo"开机启动已经添加完毕!" #解压缩server文件夹 cd/share/yunwei/p2p/&&tar-zxvfserver.tar.gz-C/opt/ #安装sshpass yuminstall-ysshpass echo"sshpass已经安装完毕!" echo"数据库服务器密码">/root/MysqL.passwd echo"gms服务器密码">/root/gms.passwd #修改p2pserver.conf并且启动狗 read-p"请输入你要添加的p2pstun的外网IP地址:"stun sed-i"s/STUN_IP=/STUN_IP=$stun"//opt/server/P2PServer.conf nohuppython./P2PServerDog.py>/dev/null2>&1& echo"P2PServerDog已经启动..." #更改GMS的Group.xml sshpass-f/root/gms.passwdssh-o"StrictHostKeyCheckingno"root@gms服务器IP地址"sh/root/addip.sh$ip" #生成数据库语句并执行 cat<<EOF>p2pserver.sql insertintothird_service(host,port,create_time,weight)values('$ip',8800,now(),100); EOF sshpass-f/root/civil.passwdssh-o"StrictHostKeyCheckingno"root@数据库服务器IP地址'MysqL_PWD=you_passwordMysqL-uroot-pyour_db'<p2pserver.sql echo"数据库语句已经添加完毕...如果要删除,请用'deletefromthird_servicewhereid=新ID号;'来>删除。" echo"P2PServer扩容完成,感谢您的使用!"
在GMS的服务器上需要一个addip.sh,内容如下:
#!/bin/bash #Author:ChrisChan@2017-09-20 #这个脚本用于Group.xml的修改 sed-i'$i'"\<Server>$1:8801</Server>"''/root/Group.xml pid=$(ps-ef|grepGMS|grep-v'grep'|grep-v'GMSDog'|awk'{print$2}')#获取到GMS的进程号,并且重启 kill-9$pid sleep20
本地执行效果如下:
在GMS查看Group.xml,已经将新的IP地址添加到Group.xml里:
在数据库里查看语句,也达到了新增的目的:
新的知识点!
1)sshpass里具体执行的command是在远程服务器上执行,以本文为例,如果变量ip使用的是单引号的话,那么远程的服务器是无法获取到这个值的,所以应该用的是双引号;
2)这种直接将命令行写入ssh参数的做法很容易造成引号嵌套地狱,虽然看上去你的脚本很酷,但是维护起来很麻烦,所以还是推荐在本地写一个脚本,然后远程执行这个脚本;