OneProxy :: 本地Socket连接支持,动态启停工作端口,匹配负载均衡设备。

在MySQL里,可以通过Socket文件连接MySQL数据库,连接效率要比TCP方式要高,并且不受动态端口范围的限制,如果程序和MySQL数据库安装在同一台物理机器上,通过Socket文件连接是极具优势的。当然MySQL不太会和应用程序安装在同一台机器上,但OneProxy中间件则是推荐安装在应用程序端,比如和PHP安装在一起,就可以充当PHP的透明连接池。在OneProxy 6.0.1版本中,只需要在参数中指定Socket文件的位置,就可以启用Socket连接了。如下所示:

......
proxy-address            = :3307
proxy-socket-file        = /tmp/oneproxy.sock
mysql-version            = 5.6.31
......

在起动OneProxy后,就可以偿试用Socket方式连接:

[root@rh4srv1 ~]# mysql -u test -ptest --socket=/tmp/oneproxy.sock -c -e "show tables"
Warning: Using a password on the command line interface can be insecure.
+----------------+
| Tables_in_test |
+----------------+
| my_global      |
| my_hash_0      |
| my_hash_2      |
| my_hash_4      |
+----------------+

建议PHP程序使用Socket方式连接OneProxy。在真实的应用场景中,都会将数个OneProxy实例置于负载均衡设备之后,就会需要临时将OneProxy从负截均衡中摘除以进行重起维护,因具给OneProxy增加了动态关停工作端口的功能,可以在管理端口中执行“suspend force”命令,以临时禁止3307端口(Socket方式连接和管理端口则不受影响)。如下所示:

[root@rh4srv1 ~]# mysql -u test -ptest -h192.168.1.119 -P3307 -e "show tables"
Warning: Using a password on the command line interface can be insecure.
+----------------+
| Tables_in_test |
+----------------+
| my_global      |
| my_hash_0      |
| my_hash_2      |
| my_hash_4      |
+----------------+
[root@rh4srv1 ~]# mysql -u admin -pOneProxy -h192.168.1.119 -P4041 -e "suspend force"
Warning: Using a password on the command line interface can be insecure.
[root@rh4srv1 ~]# mysql -u test -ptest -h192.168.1.119 -P3307 -e "show tables"
Warning: Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.119' (111)

临时禁止3307端口,并不会马上中止已经建立的连接,已有连接会在处理完当前事务或SQL语句后断开,以达到平滑地从负载均衡设备中摘除OneProxy的效果。临时中止的3307端口,可以通过管理端口执行“resume”命令来重新启用。如下所示:

[root@rh4srv1 ~]# mysql -u test -ptest -h192.168.1.119 -P3307 -e "show tables"
Warning: Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.119' (111)
[root@rh4srv1 ~]# mysql -u admin -pOneProxy -h192.168.1.119 -P4041 -e "resume"
Warning: Using a password on the command line interface can be insecure.
[root@rh4srv1 ~]# mysql -u test -ptest -h192.168.1.119 -P3307 -e "show tables"
Warning: Using a password on the command line interface can be insecure.
+----------------+
| Tables_in_test |
+----------------+
| my_global      |
| my_hash_0      |
| my_hash_2      |
| my_hash_4      |
+----------------+

当更改OneProxy配置需要重起时,可以通过暂停工作端口的方式来处理,可以通过Socket方式连接来进行配置验证。也可以通过如下参数来使OneProxy在重起时不马上启用工作端口,而是在起动后通过管理端口中执行“RESUME”命令来恢复工作端口。

......
proxy-skip-network        = 1
......

结合Socket连接和动态启停工作端口,可以实现OneProxy的在线维护操作,比如重大配置变更或版本升级等。