当前位置:   article > 正文

在 Docker 容器中使用 GreatSQL VIP

在 Docker 容器中使用 GreatSQL VIP

GreatSQL Docker 镜像不支持在 Docker 中使用 VIP 功能。原因如下:

  1. 在 Docker 中,无法用 systemd 方式来启动 GreatSQL。

  2. 在打包时,也没有将 mysqld 程序文件属主改为 root,并加上 setcap 提权。

因此,想要在 Docker 中使用 GreatSQL VIP 的话,需要自行处理。下面介绍如何在 Docker 容器中使用 GreatSQL 绑定 VIP 功能。

如果想要在 Docker 中使用 GreatSQL VIP,可以采用以下方式实现:

  1. 创建一个全新容器,并加上 --privileged 参数。

  2. 安装 GreatSQL 软件包(二进制包或 RPM 包都行)。

  3. 修改 mysqld 程序文件属主为 root,并利用 setcap 给 mysqld 程序文件加上提权属性。

  4. 正确配置相关参数。

正常地,在 Docker 容器中是无法执行绑定 VIP 等影响操作系统层的操作,以避免发生安全风险,这就需要先行提权。

想要在 Docker 容器中使用 VIP,在创建容器时,需要先加上 --privileged 参数,例如:

$ docker run -itd --privileged --hostname t1 --name t1 centos:8 bash

进入容器,并查看初始 IP 信息:

  1. [root@t1 /]# ip a
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4.     inet 127.0.0.1/8 scope host lo
  5.        valid_lft forever preferred_lft forever
  6. 233: eth0@if234: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  7.     link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  8.     inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
  9.        valid_lft forever preferred_lft forever

接下来,安装 GreatSQL,这里采用 RPM 包方式,具体过程不赘述。

执行提权操作并确认:

  1. [root@t1 /]# setcap CAP_NET_ADMIN,CAP_NET_RAW+ep /usr/sbin/mysqld
  2. [root@t1 /]# chown root:root /usr/sbin/mysqld
  3. [root@t1 /]# getcap /usr/sbin/mysqld
  4. /usr/sbin/mysqld = cap_net_admin,cap_net_raw+ep
  5. [root@t1 /]# ls -la /usr/sbin/mysqld
  6. -rwxr-xr-x 1 root root 67858088 Jul 30 08:18 /usr/sbin/mysqld

修改 /etc/my.cnf 配置文件(只展示部分相关内容):

  1. [mysqld]
  2. ...
  3. user = root
  4. ...
  5. loose-plugin_load_add = 'greatdb_ha.so'
  6. loose-greatdb_ha_enable_mgr_vip = ON
  7. loose-greatdb_ha_mgr_vip_nic = 'eth0'
  8. loose-greatdb_ha_mgr_vip_ip = '172.17.0.40'
  9. loose-greatdb_ha_mgr_vip_mask = '255.255.0.0'
  10. loose-greatdb_ha_port = 33062
  11. #loose-greatdb_ha_mgr_read_vip_ips = "172.17.0.41,172.17.0.42"
  12. loose-greatdb_ha_mgr_read_vip_floating_type = "TO_ANOTHER_SECONDARY"
  13. loose-greatdb_ha_send_arp_packge_times = 5
  14. loose-greatdb_ha_mgr_exit_primary_kill_connection_mode = OFF
  15. report_host = 172.17.0.4
  16. report_port = 3306
  17. ...

在已经完成 GreatSQL 数据初始化操作之后,启动 GreatSQL 服务进程(确认是以 root 身份运行):

  1. [root@t1 /]# /usr/sbin/mysqld &
  2. [root@t1 /]# ps -ef | grep mysqld
  3. root        1518       1  1 07:02 ?        00:00:23 /usr/sbin/mysqld

进入 GreatSQL 查看 VIP 绑定/运行状态:

  1. [root@GreatSQL][(none)]> SHOW GLOBAL VARIABLES LIKE 'greatdb_ha%';
  2. +--------------------------------------------------+---------------------------------------------------+
  3. | Variable_name                                    | Value                                             |
  4. +--------------------------------------------------+---------------------------------------------------+
  5. | greatdb_ha_enable_mgr_vip                        | ON                                                |
  6. | greatdb_ha_force_change_mgr_vip                  | OFF                                               |
  7. | greatdb_ha_gateway_address                       |                                                   |
  8. | greatdb_ha_mgr_exit_primary_kill_connection_mode | OFF                                               |
  9. | greatdb_ha_mgr_read_vip_floating_type            | TO_ANOTHER_SECONDARY                              |
  10. | greatdb_ha_mgr_read_vip_ips                      |                                                   |
  11. | greatdb_ha_mgr_vip_broad                         | 255.255.255.255                                   |
  12. | greatdb_ha_mgr_vip_ip                            | 172.17.0.40                                       |
  13. | greatdb_ha_mgr_vip_mask                          | 255.255.0.0                                       |
  14. | greatdb_ha_mgr_vip_nic                           | eth0                                              |
  15. | greatdb_ha_port                                  | 33062                                             |
  16. | greatdb_ha_send_arp_packge_times                 | 5                                                 |
  17. | greatdb_ha_vip_tope                              | bcd374fc-593c-11ef-a05e-0242ac110004::172.17.0.40 |
  18. +--------------------------------------------------+---------------------------------------------------+
  19. 13 rows in set (0.00 sec)

查看 VIP 绑定状态:

  1. [root@t1 /]# ip a
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4.     inet 127.0.0.1/8 scope host lo
  5.        valid_lft forever preferred_lft forever
  6. 233: eth0@if234: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  7.     link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  8.     inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
  9.        valid_lft forever preferred_lft forever
  10.     inet 172.17.0.40/16 brd 172.17.255.255 scope global secondary eth0:0
  11.        valid_lft forever preferred_lft forever

在外部宿主系统环境下检测 VIP 是否可连通:

  1. $ ping 172.17.0.40
  2. PING 172.17.0.40 (172.17.0.4056(84) bytes of data.
  3. 64 bytes from 172.17.0.40: icmp_seq=1 ttl=64 time=0.038 ms
  4. 64 bytes from 172.17.0.40: icmp_seq=2 ttl=64 time=0.032 ms
  5. ...

可以看到,已经正确绑定 VIP 并且可连通。

Enjoy GreatSQL :)


文章推荐:

想看更多技术好文,点个“在看”

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/984258
推荐阅读
相关标签
  

闽ICP备14008679号