配置Linux环境下多网卡高可用网络端口

 

网络是信息系统的核心关键。目前主流的信息系统结构体系中,数据库存储往往都是在系统的后端,不直接与前端用户相对。同时,在诸如SANNAS等基于网络体系的存储环境中,可靠的网络环境是我们必须考虑的因素。

 

从常见系统运维事故中,意外断电、断网和空调漏水是三个主要故障因素。意外的网络中断,对Oracle而言可能就意味着丢失数据写入、数据归档失败、DG同步失败。面对这些因素,我们能做的其实也就是用软硬件冗余策略,提高系统关键网络点可用性。

 

在网络层面,目前服务器大都可以配置多余一个网卡设备(一般四个)。通常,我们的配置是一个网卡对应一个IP地址,访问不同的网卡对应不同的IP地址。那么,可否设置一种方法,建立一个虚拟的网卡,对应一个虚拟的IP地址。后台是由多个物理网卡与之对应。这种策略下:一旦一个网卡或者线路出现问题,其他的网络旁路也可以以相同的IP地址对外提供支持。

 

本篇主要介绍在Linux环境下,如何配置这种高可用公共网络配置。

 

1、环境说明

 

笔者使用红帽6.5进行实验。

 

 

[root@SimpleLinux ~]# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 6.5 (Santiago)

[root@SimpleLinux ~]# uname -a

Linux SimpleLinux.localdomain 2.6.32-431.el6.i686 #1 SMP Sun Nov 10 22:20:22 EST 2013 i686 i686 i386 GNU/Linux

 

 

当前在服务器上,安装了两个物理网卡,对应名称分别是eth0eth1

 

 

[root@SimpleLinux network-scripts]# ifconfig

eth0      Link encap:Ethernet  HWaddr 08:00:27:91:3F:F7 

          inet addr:192.168.137.88  Bcast:192.168.137.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:fe91:3ff7/64 Scope:Link

 

eth1      Link encap:Ethernet  HWaddr 08:00:27:36:30:45 

          inet addr:192.168.137.89  Bcast:192.168.137.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:fe36:3045/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:93 errors:0 dropped:0 overruns:0 frame:0

 

 

当前,两个网卡均可有效,可以从外部使用网络ping通。

 

 

C:\Users\admin>ping 192.168.137.88

 

正在 Ping 192.168.137.88 具有 32 字节的数据:

来自 192.168.137.88 的回复: 字节=32 时间<1ms TTL=64

来自 192.168.137.88 的回复: 字节=32 时间<1ms TTL=64

 

192.168.137.88 Ping 统计信息:

    数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失)

往返行程的估计时间(以毫秒为单位):

    最短 = 0ms,最长 = 0ms,平均 = 0ms

Control-C

^C

C:\Users\admin>ping 192.168.137.89

 

正在 Ping 192.168.137.89 具有 32 字节的数据:

来自 192.168.137.89 的回复: 字节=32 时间<1ms TTL=64

来自 192.168.137.89 的回复: 字节=32 时间<1ms TTL=64

 

192.168.137.89 Ping 统计信息:

    数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失)

往返行程的估计时间(以毫秒为单位):

    最短 = 0ms,最长 = 0ms,平均 = 0ms

Control-C

^C

 

 

2、配置虚拟bond0

 

配置高可用虚拟网卡,首先需要在操作系统层面关闭Network Manager服务。

 

 

[root@SimpleLinux ~]# chkconfig NetworkManager off

[root@SimpleLinux ~]# chkconfig --list | grep Network

NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off

 

[root@SimpleLinux ~]# service NetworkManager stop

 

 

进入网络配置目录文件夹,将原有的两个网卡配置文件备份好。

 

 

[root@SimpleLinux ~]# cd /etc/sysconfig/network-scripts/

[root@SimpleLinux network-scripts]# ls -l | grep ifcfg-eth

-rw-r--r--. 1 root root   281 Sep  5  2014 ifcfg-eth0

-rw-r--r--. 1 root root   108 Oct 20 09:45 ifcfg-eth1

[root@SimpleLinux network-scripts]# mv ifcfg-eth0 /tmp

[root@SimpleLinux network-scripts]# mv ifcfg-eth1 /tmp

 

 

生成bond0文件。

 

 

[root@SimpleLinux network-scripts]# echo "alias bond0 bonding" > /etc/modprobe.d/bonding.conf

[root@SimpleLinux network-scripts]# cd /etc/modprobe.d/

[root@SimpleLinux modprobe.d]# cat bonding.conf

alias bond0 bonding

 

 

/etc/sysconfig/network-scripts目录下,创建单独的ifcfg-bond0文件。

 

 

[root@SimpleLinux modprobe.d]# cd /etc/sysconfig/network-scripts/

[root@SimpleLinux network-scripts]# cat ifcfg-bond0

DEVICE="bond0"

BONDING_OPTS="mode=1 miimon=100 primary=em1"

NM_CONTROLLED="no"

IPADDR="192.168.137.90"  --新的IP地址,虚拟IP

NETMASK="255.255.255.0"

GATEWAY="192.168.137.1"

ONBOOT="yes"

 

 

修改原有的eth0eth1文件。

 

 

[root@SimpleLinux network-scripts]# cat ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

NAME="System eth0"

SLAVE=yes

MASTER=bond0

 

[root@SimpleLinux network-scripts]# cat ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

NAME="System eth1"

SLAVE=yes

MASTER=bond0

 

 

重新启动网络服务service network,让应用生效。

 

 

 

此时ifconfig状态如下:

 

 

[root@SimpleLinux network-scripts]# ifconfig

bond0     Link encap:Ethernet  HWaddr 08:00:27:91:3F:F7 

          inet addr:192.168.137.90  Bcast:192.168.137.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:fe91:3ff7/64 Scope:Link

          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1

          RX packets:3000 errors:0 dropped:0 overruns:0 frame:0

          TX packets:2164 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:274055 (267.6 KiB)  TX bytes:275545 (269.0 KiB)

 

eth0      Link encap:Ethernet  HWaddr 08:00:27:91:3F:F7 

          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

          RX packets:2433 errors:0 dropped:0 overruns:0 frame:0

          TX packets:1727 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:220864 (215.6 KiB)  TX bytes:225329 (220.0 KiB)

 

eth1      Link encap:Ethernet  HWaddr 08:00:27:91:3F:F7 

          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

          RX packets:568 errors:0 dropped:0 overruns:0 frame:0

          TX packets:438 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:53251 (52.0 KiB)  TX bytes:50450 (49.2 KiB)

 

 

此时,新的IP地址90已经可以使用了。

 

 

C:\Users\admin>ping 192.168.137.90

 

正在 Ping 192.168.137.90 具有 32 字节的数据:

来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64

来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64

 

192.168.137.90 Ping 统计信息:

    数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失)

往返行程的估计时间(以毫秒为单位):

    最短 = 0ms,最长 = 0ms,平均 = 0ms

Control-C

^C

 

 

3、高可用测试

 

下面进行高可用性测试,两个网卡如果被关闭一个,看是否虚拟IP还可以连接。

 

 

[root@SimpleLinux ~]# ifconfig eth0 down 关闭了eth0,查看状态。

 

C:\Users\admin>ping 192.168.137.90

 

正在 Ping 192.168.137.90 具有 32 字节的数据:

来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64

来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64

 

192.168.137.90 Ping 统计信息:

    数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失)

往返行程的估计时间(以毫秒为单位):

    最短 = 0ms,最长 = 0ms,平均 = 0ms

Control-C

 

 

启动eth0,关闭eth1

 

 

 

[root@SimpleLinux network-scripts]# ifconfig eth1 down

 

C:\Users\admin>ping 192.168.137.90

 

正在 Ping 192.168.137.90 具有 32 字节的数据:

来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64

来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64

 

192.168.137.90 Ping 统计信息:

    数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失)

往返行程的估计时间(以毫秒为单位):

    最短 = 0ms,最长 = 0ms,平均 = 0ms

Control-C

^C

 

 

测试成功。

 

4、结论

 

高可用网络bond,在Oracle标准配置RAC的过程中,是一个必要过程。主要是针对公共网络和私有网络的高可用配置。RAC架构中,各个节点node之间,节点node和存储之间有非常复杂的数据交换和信息传递。所以,网络保障至关重要。

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-2127079/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17203031/viewspace-2127079/

<think>好的,我现在需要帮用户解决在Conda虚拟环境中使用pip时出现的权限问题。首先,我得回忆一下相关的解决方案,可能涉及到权限设置、虚拟环境的使用方法,以及Conda和pip之间的交互。 用户提到的是在Conda虚拟环境中使用pip安装包时遇到权限被拒绝的问题。这种情况通常发生在用户没有足够的权限去修改目标目录,尤其是在全局的Python环境中安装包的时候。但是如果在虚拟环境中,理论上用户应该有权限,因为虚拟环境是用户自己创建的。不过,可能用户在使用pip没有正确激活虚拟环境,或者虚拟环境权限设置有问题。 首先,我需要确认用户是否正确激活了Conda虚拟环境。如果环境未激活,pip可能会指向系统的Python路径,导致权限问题。因此,第一步是检查环境激活状态,并确保pip的路径正确。 然后,如果环境已经激活,但问题仍然存在,可能需要检查虚拟环境的目录权限。用户可能需要使用chown或chmod来调整权限,确保自己有写入权限。另外,使用--user选项可能也是一个解决办法,但可能会将包安装到用户目录而非虚拟环境中,这可能不是用户想要的。 另一个可能的解决方案是使用Conda自带的包管理命令来安装所需的包,而不是使用pip。这样可以避免权限问题,因为Conda会正确处理虚拟环境中的权限。 此外,如果用户确实需要使用pip,可以尝试升级pip本身,或者使用conda run来执行pip命令,以确保在正确的环境中运行。 需要参考用户提供的引用资料,特别是引用[1]和[2],其中提到使用--user选项或者调整目录权限。但要注意在虚拟环境中使用--user可能并不合适,因为虚拟环境本身应该已经隔离了环境。可能用户误操作导致pip指向了全局环境,所以需要确认pip的路径是否正确。 可能还需要检查是否有其他权限问题,例如虚拟环境所在目录的父目录是否有执行权限,这会影响访问子目录。另外,SELinux或AppArmor等安全模块也可能导致权限问题,但这种情况较为少见。 总结可能的解决步骤: 1. 确认Conda虚拟环境已正确激活。 2. 检查pip的路径是否指向虚拟环境内的可执行文件。 3. 调整虚拟环境目录的权限,确保用户有写入权限。 4. 使用Conda安装包代替pip。 5. 必要时使用sudo,但不推荐,因为这可能导致环境混乱。 6. 使用--user选项作为临时解决方案,但注意潜在的影响。 7. 检查系统级的安全设置是否限制了对目录的访问。 接下来需要将这些步骤整理成用户友好的解答,确保结构清晰,并引用提供的参考资料中的解决方法。</think>### 如何解决Conda虚拟环境pip权限问题? #### 1. 确认虚拟环境已激活 首先检查是否**正确激活了Conda虚拟环境**。未激活时,pip可能指向系统全局环境(需管理员权限)而非虚拟环境。 - 激活命令: ```bash conda activate your_env_name ``` - 验证pip路径: ```bash which pip ``` 输出应为虚拟环境路径,例如:`/home/user/anaconda3/envs/your_env_name/bin/pip`。若指向系统路径(如`/usr/bin/pip`),则需重新激活环境[^1][^2]。 --- #### 2. 修复虚拟环境目录权限 若已激活环境仍报错,可能是**虚拟环境目录权限不足**。 - 赋予当前用户所有权: ```bash sudo chown -R $USER:$USER /path/to/conda/envs/your_env_name ``` 例如: ```bash sudo chown -R $USER:$USER ~/anaconda3/envs/my_env ``` 此操作需管理员权限,但仅需执行一次[^3]。 --- #### 3. 优先使用Conda安装包 尽量通过Conda而非pip安装包,避免权限冲突: ```bash conda install package_name ``` 若包仅在PyPI存在,再使用pip[^1]。 --- #### 4. 谨慎使用`--user`选项(不推荐) 在虚拟环境中使用`pip install --user`会将包安装到用户目录(如`~/.local`),可能污染全局环境。仅建议临时使用: ```bash pip install --user package_name ``` --- #### 5. 检查父目录权限 确保虚拟环境的**父目录**(如`~/anaconda3/envs`)有可执行权限: ```bash chmod +x /path/to/parent_dir ``` --- #### 6. 重装虚拟环境(终极方案) 若问题持续,可尝试删除并重建虚拟环境: ```bash conda remove --name your_env_name --all conda create --name your_env_name python=3.9 ``` --- ### 总结流程图 ```mermaid graph TD A[权限问题] --> B{是否激活环境?} B -->|否| C[激活环境] B -->|是| D{检查pip路径} D -->|指向系统路径| C D -->|指向虚拟环境| E{目录权限是否足够?} E -->|否| F[chown或chmod修复] E -->|是| G[尝试conda install] G -->|仍需pip| H[检查父目录权限] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值